Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qplatformaudiodevices.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
6#include <QtMultimedia/qaudiodevice.h>
7#include <QtMultimedia/qmediadevices.h>
8#include <QtMultimedia/private/qaudiosystem_p.h>
9
10#if defined(Q_OS_ANDROID)
11# include <qandroidaudiodevices_p.h>
12#endif
13#if defined(Q_OS_DARWIN)
14# include <qdarwinaudiodevices_p.h>
15#endif
16#if defined(Q_OS_WINDOWS) && QT_CONFIG(wmf)
17# include <qwindowsaudiodevices_p.h>
18#endif
19#if QT_CONFIG(alsa)
20# include <qalsaaudiodevices_p.h>
21#endif
22#if QT_CONFIG(pulseaudio)
23# include <qpulseaudiodevices_p.h>
24#endif
25#if QT_CONFIG(pipewire)
26# include <pipewire/qpipewire_audiodevices_p.h>
27#endif
28#if defined(Q_OS_QNX)
29# include <qqnxaudiodevices_p.h>
30#endif
31#if defined(Q_OS_WASM)
32# include <private/qwasmmediadevices_p.h>
33#endif
34
36
37std::unique_ptr<QPlatformAudioDevices> QPlatformAudioDevices::create()
38{
39#ifdef Q_OS_DARWIN
40 return std::make_unique<QDarwinAudioDevices>();
41#endif
42#if defined(Q_OS_WINDOWS) && QT_CONFIG(wmf)
43 return std::make_unique<QWindowsAudioDevices>();
44#endif
45#if defined(Q_OS_ANDROID)
46 return std::make_unique<QAndroidAudioDevices>();
47#endif
48#if QT_CONFIG(pipewire)
49 if (QtPipeWire::QAudioDevices::isSupported())
50 return std::make_unique<QtPipeWire::QAudioDevices>();
51#endif
52#if QT_CONFIG(pulseaudio)
53 return std::make_unique<QPulseAudioDevices>();
54#endif
55#if QT_CONFIG(alsa)
56 return std::make_unique<QAlsaAudioDevices>();
57#endif
58#if defined(Q_OS_QNX)
59 return std::make_unique<QQnxAudioDevices>();
60#endif
61#if defined(Q_OS_WASM)
62 return std::make_unique<QWasmMediaDevices>();
63#endif
64 return std::make_unique<QPlatformAudioDevices>();
67QPlatformAudioDevices::QPlatformAudioDevices()
69 qRegisterMetaType<PrivateTag>(); // for the case of queued connections
70}
71
72QPlatformAudioDevices::~QPlatformAudioDevices() = default;
73
74QList<QAudioDevice> QPlatformAudioDevices::audioInputs() const
75{
76 return m_audioInputs.ensure([this]() {
77 return findAudioInputs();
78 });
79}
80
81QList<QAudioDevice> QPlatformAudioDevices::audioOutputs() const
82{
83 return m_audioOutputs.ensure([this]() {
84 return findAudioOutputs();
85 });
86}
87
88void QPlatformAudioDevices::onAudioInputsChanged()
89{
90 m_audioInputs.reset();
91 emit audioInputsChanged(PrivateTag{});
92}
93
94void QPlatformAudioDevices::onAudioOutputsChanged()
95{
96 m_audioOutputs.reset();
97 emit audioOutputsChanged(PrivateTag{});
98}
99
100void QPlatformAudioDevices::updateAudioInputsCache()
101{
102 if (m_audioInputs.update(findAudioInputs()))
103 emit audioInputsChanged(PrivateTag{});
104}
105
106void QPlatformAudioDevices::updateAudioOutputsCache()
107{
108 if (m_audioOutputs.update(findAudioOutputs()))
109 emit audioOutputsChanged(PrivateTag{});
110}
111
112QPlatformAudioSource *QPlatformAudioDevices::createAudioSource(const QAudioDevice &,
113 const QAudioFormat &, QObject *)
114{
115 return nullptr;
116}
117QPlatformAudioSink *QPlatformAudioDevices::createAudioSink(const QAudioDevice &,
118 const QAudioFormat &, QObject *)
119{
120 return nullptr;
121}
122
123QPlatformAudioSource *QPlatformAudioDevices::audioInputDevice(const QAudioFormat &format,
124 const QAudioDevice &deviceInfo,
125 QObject *parent)
126{
127 QAudioDevice device = deviceInfo;
128 if (device.isNull())
129 device = QMediaDevices::defaultAudioInput();
130
131 if (device.isNull())
132 return nullptr;
133
134 return createAudioSource(device, format, parent);
135}
136
137QPlatformAudioSink *QPlatformAudioDevices::audioOutputDevice(const QAudioFormat &format,
138 const QAudioDevice &deviceInfo,
139 QObject *parent)
140{
141 QAudioDevice device = deviceInfo;
142 if (device.isNull())
143 device = QMediaDevices::defaultAudioOutput();
144
145 if (device.isNull())
146 return nullptr;
147
148 return createAudioSink(device, format, parent);
149}
150
151void QPlatformAudioDevices::prepareAudio() { }
152
153QT_END_NAMESPACE
154
155#include "moc_qplatformaudiodevices_p.cpp"
Combined button and popup list for selecting options.