64
65
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
95
96
97QAudioDevice::QAudioDevice() =
default;
100
101
102QAudioDevice::QAudioDevice(
const QAudioDevice &other) =
default;
105
106
107
108
110
111
112
113
115
116
117QAudioDevice::~QAudioDevice() =
default;
120
121
122QAudioDevice &QAudioDevice::operator=(
const QAudioDevice &other) =
default;
125
126
127
128
131
132
133
134bool QAudioDevice::operator==(
const QAudioDevice &other)
const
136 return mode() == other.mode() && id() == other.id();
140
141
142
143bool QAudioDevice::operator!=(
const QAudioDevice &other)
const
145 return !operator==(other);
149
150
151bool QAudioDevice::isNull()
const
157
158
159
160
161
162
163
164
167
168
169
170
171
172
173
174
175QByteArray QAudioDevice::id()
const
177 return isNull() ? QByteArray() : d->id;
181
182
183
184
185
186
189
190
191
192
193
194
195QString QAudioDevice::description()
const
197 return isNull() ? QString() : d->description;
201
202
203
204
207
208
209
210
211bool QAudioDevice::isDefault()
const
213 return d ? d->isDefault :
false;
217
218
219
220bool QAudioDevice::isFormatSupported(
const QAudioFormat &settings)
const
224 auto result = d->isFormatSupported(settings);
225 return result ? *result :
false;
229
230
231
232
233
234
235
236
237
238
239
240
241QAudioFormat QAudioDevice::preferredFormat()
const
244 return QAudioFormat();
245 auto fmt = d->preferredFormat();
246 return fmt ? *fmt : QAudioFormat();
250
251
252int QAudioDevice::minimumSampleRate()
const
256 auto rate = d->minimumSampleRate();
257 return rate ? *rate : 0;
261
262
263int QAudioDevice::maximumSampleRate()
const
267 auto rate = d->maximumSampleRate();
268 return rate ? *rate : 0;
272
273
274
275
276int QAudioDevice::minimumChannelCount()
const
280 auto count = d->minimumChannelCount();
281 return count ? *count : 0;
285
286
287
288
289int QAudioDevice::maximumChannelCount()
const
293 auto count = d->maximumChannelCount();
294 return count ? *count : 0;
298
299
300QList<QAudioFormat::SampleFormat> QAudioDevice::supportedSampleFormats()
const
303 return QList<QAudioFormat::SampleFormat>();
304 auto formats = d->supportedSampleFormats();
305 return formats ? *formats : QList<QAudioFormat::SampleFormat>();
309
310
311QAudioFormat::ChannelConfig QAudioDevice::channelConfiguration()
const
314 return QAudioFormat::ChannelConfigUnknown;
315 auto config = d->channelConfiguration();
316 return config ? *config : QAudioFormat::ChannelConfigUnknown;
320
321
322
324
325
326QAudioDevice::QAudioDevice(QAudioDevicePrivate *p) : d(p) { }
329
330
331
332
333
334
335
336
337
338
339
342
343
344
345
346
347
348
351
352
353
354
355QAudioDevice::Mode QAudioDevice::mode()
const
357 return d ? d->mode : Null;
360#ifndef QT_NO_DEBUG_STREAM
363 QDebugStateSaver saver(dbg);
366 case QAudioDevice::Input:
367 dbg <<
"QAudioDevice::Input";
369 case QAudioDevice::Output:
370 dbg <<
"QAudioDevice::Output";
372 case QAudioDevice::Null:
373 dbg <<
"QAudioDevice::Null";
384QAudioDevicePrivate::QAudioDevicePrivate(QByteArray i, QAudioDevice::Mode m, QString description,
385 bool isDefault, std::future<AudioDeviceFormat> format)
388 description(std::move(description)),
389 isDefault(isDefault),
390 m_deviceFormat(std::move(format).share())
396std::future<QAudioDevicePrivate::AudioDeviceFormat>
397makeFuture(QAudioDevicePrivate::AudioDeviceFormat format)
399 std::promise<QAudioDevicePrivate::AudioDeviceFormat> promise;
400 promise.set_value(
std::move(format));
401 return promise.get_future();
406QAudioDevicePrivate::QAudioDevicePrivate(
const QByteArray &i, QAudioDevice::Mode m,
407 QString description,
bool isDefault,
408 AudioDeviceFormat format)
409 : QAudioDevicePrivate(i, m, std::move(description), isDefault, makeFuture(std::move(format)))
413QAudioDevicePrivate::~QAudioDevicePrivate() =
default;
416QAudioDeviceExpected<std::invoke_result_t<F,
const QAudioDevicePrivate::AudioDeviceFormat &>>
417QAudioDevicePrivate::doWithDeviceFormat(F &&f)
const
419 if (m_deviceFormat.valid()) {
420 auto status = m_deviceFormat.wait_for(formatProbeTimeout);
422 case std::future_status::ready:
423 case std::future_status::deferred:
424 return f(m_deviceFormat.get());
425 case std::future_status::timeout:
426 return q23::unexpected{ QAudioDeviceFormatError::Timeout };
428 Q_UNREACHABLE_RETURN(q23::unexpected{ QAudioDeviceFormatError::InvalidFuture });
431 return q23::unexpected{ QAudioDeviceFormatError::InvalidFuture };
434QAudioDeviceExpected<QAudioDevicePrivate::AudioDeviceFormat> QAudioDevicePrivate::format()
const
436 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
437 return AudioDeviceFormat{ fmt };
441QAudioDeviceExpected<QAudioFormat> QAudioDevicePrivate::preferredFormat()
const
443 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
444 return fmt.preferredFormat;
448QAudioDeviceExpected<
int> QAudioDevicePrivate::minimumSampleRate()
const
450 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
451 return fmt.minimumSampleRate;
455QAudioDeviceExpected<
int> QAudioDevicePrivate::maximumSampleRate()
const
457 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
458 return fmt.maximumSampleRate;
462QAudioDeviceExpected<
int> QAudioDevicePrivate::minimumChannelCount()
const
464 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
465 return fmt.minimumChannelCount;
469QAudioDeviceExpected<
int> QAudioDevicePrivate::maximumChannelCount()
const
471 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
472 return fmt.maximumChannelCount;
476QAudioDeviceExpected<QList<QAudioFormat::SampleFormat>>
477QAudioDevicePrivate::supportedSampleFormats()
const
479 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
480 return fmt.supportedSampleFormats;
484QAudioDeviceExpected<QAudioFormat::ChannelConfig> QAudioDevicePrivate::channelConfiguration()
const
486 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
487 return fmt.channelConfiguration;
491QAudioDeviceExpected<
bool> QAudioDevicePrivate::isFormatSupported(
const QAudioFormat &format)
const
493 return doWithDeviceFormat([&](
const AudioDeviceFormat &deviceFormat) {
494 if (format.sampleRate() < deviceFormat.minimumSampleRate
495 || format.sampleRate() > deviceFormat.maximumSampleRate)
497 if (format.channelCount() < deviceFormat.minimumChannelCount
498 || format.channelCount() > deviceFormat.maximumChannelCount)
500 if (!deviceFormat.supportedSampleFormats.contains(format.sampleFormat()))
507QAudioDevicePrivate::createQAudioDevice(std::unique_ptr<QAudioDevicePrivate> devicePrivate)
509 return QAudioDevice(devicePrivate.release());
512const QAudioDevicePrivate *QAudioDevicePrivate::handle(
const QAudioDevice &device)
514 return device.d.get();
519#include "moc_qaudiodevice.cpp"