41 struct AudioDeviceFormat
43 QAudioFormat preferredFormat;
44 int minimumSampleRate = 0;
45 int maximumSampleRate = 0;
46 int minimumChannelCount = 0;
47 int maximumChannelCount = 0;
48 QList<QAudioFormat::SampleFormat> supportedSampleFormats;
49 QAudioFormat::ChannelConfig channelConfiguration = QAudioFormat::ChannelConfigUnknown;
51 friend bool operator==(
const AudioDeviceFormat &lhs,
const AudioDeviceFormat &rhs)
53 return lhs.preferredFormat == rhs.preferredFormat
54 && lhs.minimumSampleRate == rhs.minimumSampleRate
55 && lhs.maximumSampleRate == rhs.maximumSampleRate
56 && lhs.minimumChannelCount == rhs.minimumChannelCount
57 && lhs.maximumChannelCount == rhs.maximumChannelCount
58 && lhs.supportedSampleFormats == rhs.supportedSampleFormats
59 && lhs.channelConfiguration == rhs.channelConfiguration;
63 QAudioDevicePrivate(QByteArray i, QAudioDevice::Mode m, QString description,
bool isDefault,
64 std::future<AudioDeviceFormat> format);
66 QAudioDevicePrivate(
const QByteArray &i, QAudioDevice::Mode m, QString description,
67 bool isDefault, AudioDeviceFormat format);
69 virtual ~QAudioDevicePrivate();
71 const QAudioDevice::Mode mode = QAudioDevice::Output;
72 const QString description;
73 bool isDefault =
false;
75 QAudioDeviceExpected<AudioDeviceFormat> format()
const;
77 QAudioDeviceExpected<QAudioFormat> preferredFormat()
const;
78 QAudioDeviceExpected<
int> minimumSampleRate()
const;
79 QAudioDeviceExpected<
int> maximumSampleRate()
const;
80 QAudioDeviceExpected<
int> minimumChannelCount()
const;
81 QAudioDeviceExpected<
int> maximumChannelCount()
const;
82 QAudioDeviceExpected<QList<QAudioFormat::SampleFormat>> supportedSampleFormats()
const;
83 QAudioDeviceExpected<QAudioFormat::ChannelConfig> channelConfiguration()
const;
85 QAudioDeviceExpected<
bool> isFormatSupported(
const QAudioFormat &format)
const;
87 static QAudioDevice createQAudioDevice(std::unique_ptr<QAudioDevicePrivate> devicePrivate);
89 static const QAudioDevicePrivate *handle(
const QAudioDevice &device);
91 template <
typename Derived>
92 static const Derived *handle(
const QAudioDevice &device)
95 return dynamic_cast<
const Derived *>(handle(device));
98 static constexpr std::chrono::seconds formatProbeTimeout{4};
101 QAudioDevicePrivate(
const QAudioDevicePrivate &) =
default;
104 template <
typename F>
105 QAudioDeviceExpected<std::invoke_result_t<F,
const AudioDeviceFormat &>>
106 doWithDeviceFormat(F &&f)
const;
108 std::shared_future<AudioDeviceFormat> m_deviceFormat;