68 using namespace QPulseAudioInternal;
72 auto skipPipewire = [&] {
73 if (pipewireRequested)
75 return requestedBackend.isNull()
76 && pulseaudioDetectServerType() == PulseaudioServerType::Pulseaudio;
79 auto skipPipewire = [] {
84 const bool considerPipewire = requestedBackend.isNull() || pipewireRequested;
86 if (considerPipewire && QtPipeWire::QAudioDevices::isSupported()) {
88 return std::make_unique<QtPipeWire::QAudioDevices>();
91 if (pipewireRequested)
92 qDebug() <<
"PipeWire audio backend requested. not available. Using default backend";
95#if QT_CONFIG(pulseaudio)
96 return std::make_unique<QPulseAudioDevices>();
99 return std::make_unique<QAlsaAudioDevices>();
101#if defined(Q_OS_QNX) && defined(QT_MM_QNX_IO_SND)
102 return std::make_unique<QQnxSndAudioDevices>();
104#if defined(Q_OS_QNX) && defined(QT_MM_QNX_IO_AUDIO)
105 return std::make_unique<QQnxAudioDevices>();
107#if defined(Q_OS_WASM)
108 return std::make_unique<QWasmAudioDevices>();
110 return std::make_unique<QPlatformAudioDevices>();
113QPlatformAudioDevices::QPlatformAudioDevices()
115 qRegisterMetaType<PrivateTag>();
118QPlatformAudioDevices::~QPlatformAudioDevices() =
default;
120QList<QAudioDevice> QPlatformAudioDevices::audioInputs()
const
122 return m_audioInputs.ensure([
this]() {
123 return findAudioInputs();
127QList<QAudioDevice> QPlatformAudioDevices::audioOutputs()
const
129 return m_audioOutputs.ensure([
this]() {
130 return findAudioOutputs();
134void QPlatformAudioDevices::onAudioInputsChanged()
136 m_audioInputs.reset();
137 emit audioInputsChanged(PrivateTag{});
140void QPlatformAudioDevices::onAudioOutputsChanged()
142 m_audioOutputs.reset();
143 emit audioOutputsChanged(PrivateTag{});
146void QPlatformAudioDevices::updateAudioInputsCache()
148 if (m_audioInputs.update(findAudioInputs()))
149 emit audioInputsChanged(PrivateTag{});
152void QPlatformAudioDevices::updateAudioOutputsCache()
154 if (m_audioOutputs.update(findAudioOutputs()))
155 emit audioOutputsChanged(PrivateTag{});
169QPlatformAudioSource *QPlatformAudioDevices::audioInputDevice(QAudioFormat format,
170 const QAudioDevice &deviceInfo,
173 QAudioDevice device = deviceInfo;
175 device = QMediaDevices::defaultAudioInput();
180 if (format == QAudioFormat{})
181 format = device.preferredFormat();
183 return createAudioSource(device, format, parent);
186QPlatformAudioSink *QPlatformAudioDevices::audioOutputDevice(QAudioFormat format,
187 const QAudioDevice &deviceInfo,
190 QAudioDevice device = deviceInfo;
192 device = QMediaDevices::defaultAudioOutput();
197 if (format == QAudioFormat{})
198 format = device.preferredFormat();
200 return createAudioSink(device, format, parent);