64
65
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
89
90
91QAudioDevice::QAudioDevice() =
default;
94
95
96QAudioDevice::QAudioDevice(
const QAudioDevice &other) =
default;
99
100
101
102
104
105
106
107
109
110
111QAudioDevice::~QAudioDevice() =
default;
114
115
116QAudioDevice &QAudioDevice::operator=(
const QAudioDevice &other) =
default;
119
120
121
122
125
126
127
128bool QAudioDevice::operator==(
const QAudioDevice &other)
const
130 return mode() == other.mode() && id() == other.id();
134
135
136
137bool QAudioDevice::operator!=(
const QAudioDevice &other)
const
139 return !operator==(other);
143
144
145bool QAudioDevice::isNull()
const
151
152
153
154
155
156
157
158
161
162
163
164
165
166
167
168
169QByteArray QAudioDevice::id()
const
171 return isNull() ? QByteArray() : d->id;
175
176
177
178
179
180
183
184
185
186
187
188
189QString QAudioDevice::description()
const
191 return isNull() ? QString() : d->description;
195
196
197
198
201
202
203
204
205bool QAudioDevice::isDefault()
const
207 return d ? d->isDefault :
false;
211
212
213
214bool QAudioDevice::isFormatSupported(
const QAudioFormat &settings)
const
218 auto result = d->isFormatSupported(settings);
219 return result ? *result :
false;
223
224
225
226
227
228
229
230
231
232
233
234
235QAudioFormat QAudioDevice::preferredFormat()
const
238 return QAudioFormat();
239 auto fmt = d->preferredFormat();
240 return fmt ? *fmt : QAudioFormat();
244
245
246int QAudioDevice::minimumSampleRate()
const
250 auto rate = d->minimumSampleRate();
251 return rate ? *rate : 0;
255
256
257int QAudioDevice::maximumSampleRate()
const
261 auto rate = d->maximumSampleRate();
262 return rate ? *rate : 0;
266
267
268
269
270int QAudioDevice::minimumChannelCount()
const
274 auto count = d->minimumChannelCount();
275 return count ? *count : 0;
279
280
281
282
283int QAudioDevice::maximumChannelCount()
const
287 auto count = d->maximumChannelCount();
288 return count ? *count : 0;
292
293
294QList<QAudioFormat::SampleFormat> QAudioDevice::supportedSampleFormats()
const
297 return QList<QAudioFormat::SampleFormat>();
298 auto formats = d->supportedSampleFormats();
299 return formats ? *formats : QList<QAudioFormat::SampleFormat>();
303
304
305QAudioFormat::ChannelConfig QAudioDevice::channelConfiguration()
const
308 return QAudioFormat::ChannelConfigUnknown;
309 auto config = d->channelConfiguration();
310 return config ? *config : QAudioFormat::ChannelConfigUnknown;
314
315
316
318
319
320QAudioDevice::QAudioDevice(QAudioDevicePrivate *p) : d(p) { }
323
324
325
326
327
328
329
330
331
332
333
336
337
338
339
340
341
342
345
346
347
348
349QAudioDevice::Mode QAudioDevice::mode()
const
351 return d ? d->mode : Null;
354#ifndef QT_NO_DEBUG_STREAM
357 QDebugStateSaver saver(dbg);
360 case QAudioDevice::Input:
361 dbg <<
"QAudioDevice::Input";
363 case QAudioDevice::Output:
364 dbg <<
"QAudioDevice::Output";
366 case QAudioDevice::Null:
367 dbg <<
"QAudioDevice::Null";
378QAudioDevicePrivate::QAudioDevicePrivate(QByteArray i, QAudioDevice::Mode m, QString description,
379 bool isDefault, std::future<AudioDeviceFormat> format)
382 description(std::move(description)),
383 isDefault(isDefault),
384 m_deviceFormat(std::move(format).share())
390std::future<QAudioDevicePrivate::AudioDeviceFormat>
391makeFuture(QAudioDevicePrivate::AudioDeviceFormat format)
393 std::promise<QAudioDevicePrivate::AudioDeviceFormat> promise;
394 promise.set_value(
std::move(format));
395 return promise.get_future();
400QAudioDevicePrivate::QAudioDevicePrivate(
const QByteArray &i, QAudioDevice::Mode m,
401 QString description,
bool isDefault,
402 AudioDeviceFormat format)
403 : QAudioDevicePrivate(i, m, std::move(description), isDefault, makeFuture(std::move(format)))
407QAudioDevicePrivate::~QAudioDevicePrivate() =
default;
410QAudioDeviceExpected<std::invoke_result_t<F,
const QAudioDevicePrivate::AudioDeviceFormat &>>
411QAudioDevicePrivate::doWithDeviceFormat(F &&f)
const
413 if (m_deviceFormat.valid()) {
414 auto status = m_deviceFormat.wait_for(formatProbeTimeout);
416 case std::future_status::ready:
417 case std::future_status::deferred:
418 return f(m_deviceFormat.get());
419 case std::future_status::timeout:
420 return q23::unexpected{ QAudioDeviceFormatError::Timeout };
422 Q_UNREACHABLE_RETURN(q23::unexpected{ QAudioDeviceFormatError::InvalidFuture });
425 return q23::unexpected{ QAudioDeviceFormatError::InvalidFuture };
428QAudioDeviceExpected<QAudioDevicePrivate::AudioDeviceFormat> QAudioDevicePrivate::format()
const
430 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
431 return AudioDeviceFormat{ fmt };
435QAudioDeviceExpected<QAudioFormat> QAudioDevicePrivate::preferredFormat()
const
437 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
438 return fmt.preferredFormat;
442QAudioDeviceExpected<
int> QAudioDevicePrivate::minimumSampleRate()
const
444 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
445 return fmt.minimumSampleRate;
449QAudioDeviceExpected<
int> QAudioDevicePrivate::maximumSampleRate()
const
451 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
452 return fmt.maximumSampleRate;
456QAudioDeviceExpected<
int> QAudioDevicePrivate::minimumChannelCount()
const
458 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
459 return fmt.minimumChannelCount;
463QAudioDeviceExpected<
int> QAudioDevicePrivate::maximumChannelCount()
const
465 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
466 return fmt.maximumChannelCount;
470QAudioDeviceExpected<QList<QAudioFormat::SampleFormat>>
471QAudioDevicePrivate::supportedSampleFormats()
const
473 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
474 return fmt.supportedSampleFormats;
478QAudioDeviceExpected<QAudioFormat::ChannelConfig> QAudioDevicePrivate::channelConfiguration()
const
480 return doWithDeviceFormat([](
const AudioDeviceFormat &fmt) {
481 return fmt.channelConfiguration;
485QAudioDeviceExpected<
bool> QAudioDevicePrivate::isFormatSupported(
const QAudioFormat &format)
const
487 return doWithDeviceFormat([&](
const AudioDeviceFormat &deviceFormat) {
488 if (format.sampleRate() < deviceFormat.minimumSampleRate
489 || format.sampleRate() > deviceFormat.maximumSampleRate)
491 if (format.channelCount() < deviceFormat.minimumChannelCount
492 || format.channelCount() > deviceFormat.maximumChannelCount)
494 if (!deviceFormat.supportedSampleFormats.contains(format.sampleFormat()))
501QAudioDevicePrivate::createQAudioDevice(std::unique_ptr<QAudioDevicePrivate> devicePrivate)
503 return QAudioDevice(devicePrivate.release());
506const QAudioDevicePrivate *QAudioDevicePrivate::handle(
const QAudioDevice &device)
508 return device.d.get();
511QAudioDevicePrivate *QAudioDevicePrivate::handle(QAudioDevice &device)
513 return device.d.get();
518#include "moc_qaudiodevice.cpp"