Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qplatformmediadevices.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
6#include "qmediadevices.h"
7#include "qaudiodevice.h"
8#include "qcameradevice.h"
9#include "qaudiosystem_p.h"
10#include "qaudiodevice.h"
12
13#include <qmutex.h>
14#include <qloggingcategory.h>
15
16#if defined(Q_OS_ANDROID)
18#elif defined(Q_OS_DARWIN)
20#elif defined(Q_OS_WINDOWS)
22#elif QT_CONFIG(alsa)
23#include <qalsamediadevices_p.h>
24#elif QT_CONFIG(pulseaudio)
26#elif defined(Q_OS_QNX)
27#include <qqnxmediadevices_p.h>
28#elif defined(Q_OS_WASM)
29#include <private/qwasmmediadevices_p.h>
30#endif
31
32
34
35namespace {
38 {
39 QMutexLocker locker(&mutex);
40 delete nativeInstance;
41 nativeInstance = nullptr;
42 instance = nullptr;
43 }
45 QPlatformMediaDevices *instance = nullptr;
46 QPlatformMediaDevices *nativeInstance = nullptr;
47} devicesHolder;
48
49}
50
52{
53 QMutexLocker locker(&devicesHolder.mutex);
54 if (devicesHolder.instance)
55 return devicesHolder.instance;
56
57#ifdef Q_OS_DARWIN
58 devicesHolder.nativeInstance = new QDarwinMediaDevices;
59#elif defined(Q_OS_WINDOWS)
60 devicesHolder.nativeInstance = new QWindowsMediaDevices;
61#elif defined(Q_OS_ANDROID)
62 devicesHolder.nativeInstance = new QAndroidMediaDevices;
63#elif QT_CONFIG(alsa)
64 devicesHolder.nativeInstance = new QAlsaMediaDevices;
65#elif QT_CONFIG(pulseaudio)
66 devicesHolder.nativeInstance = new QPulseAudioMediaDevices;
67#elif defined(Q_OS_QNX)
68 devicesHolder.nativeInstance = new QQnxMediaDevices;
69#elif defined(Q_OS_WASM)
70 devicesHolder.nativeInstance = new QWasmMediaDevices;
71#else
72 devicesHolder.nativeInstance = new QPlatformMediaDevices;
73#endif
74
75 devicesHolder.instance = devicesHolder.nativeInstance;
76 return devicesHolder.instance;
77}
78
79
81
83 std::call_once(m_videoDevicesConnectionFlag, [this]() {
84 QMetaObject::invokeMethod(this, [this]() {
86 if (videoDevices)
90 });
91}
92
94{
95 devicesHolder.instance = devices;
96}
97
99
101{
102 return {};
103}
104
106{
107 return {};
108}
109
111{
112 return nullptr;
113}
115{
116 return nullptr;
117}
118
120 const QAudioDevice &deviceInfo,
122{
123 QAudioDevice info = deviceInfo;
124 if (info.isNull())
125 info = audioInputs().value(0);
126
127 QPlatformAudioSource* p = !info.isNull() ? createAudioSource(info, parent) : nullptr;
128 if (p)
129 p->setFormat(format);
130 return p;
131}
132
134 const QAudioDevice &deviceInfo,
136{
137 QAudioDevice info = deviceInfo;
138 if (info.isNull())
139 info = audioOutputs().value(0);
140
141 QPlatformAudioSink* p = !info.isNull() ? createAudioSink(info, parent) : nullptr;
142 if (p)
143 p->setFormat(format);
144 return p;
145}
146
148
150
151#include "moc_qplatformmediadevices_p.cpp"
The QAudioDevice class provides an information about audio devices and their functionality.
The QAudioFormat class stores audio stream parameter information.
Definition qlist.h:74
T value(qsizetype i) const
Definition qlist.h:661
\inmodule QtCore
Definition qmutex.h:317
\inmodule QtCore
Definition qmutex.h:285
\inmodule QtCore
Definition qobject.h:90
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:311
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2823
static QPlatformMediaDevices * instance()
virtual QList< QAudioDevice > audioOutputs() const
virtual QPlatformAudioSource * createAudioSource(const QAudioDevice &, QObject *parent)
~QPlatformMediaDevices() override
QPlatformAudioSink * audioOutputDevice(const QAudioFormat &format, const QAudioDevice &deviceInfo, QObject *parent)
static void setDevices(QPlatformMediaDevices *)
virtual QPlatformAudioSink * createAudioSink(const QAudioDevice &, QObject *parent)
virtual QList< QAudioDevice > audioInputs() const
QPlatformAudioSource * audioInputDevice(const QAudioFormat &format, const QAudioDevice &deviceInfo, QObject *parent)
static QPlatformMediaIntegration * instance()
QPlatformVideoDevices * videoDevices()
Combined button and popup list for selecting options.
@ QueuedConnection
EGLDeviceEXT * devices
GLint GLsizei GLsizei GLenum format
GLfloat GLfloat p
[1]
QFileInfo info(fileName)
[8]
QMutex mutex
[2]
static bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType, QGenericReturnArgument ret, QGenericArgument val0=QGenericArgument(nullptr), QGenericArgument val1=QGenericArgument(), QGenericArgument val2=QGenericArgument(), QGenericArgument val3=QGenericArgument(), QGenericArgument val4=QGenericArgument(), QGenericArgument val5=QGenericArgument(), QGenericArgument val6=QGenericArgument(), QGenericArgument val7=QGenericArgument(), QGenericArgument val8=QGenericArgument(), QGenericArgument val9=QGenericArgument())
\threadsafe This is an overloaded member function, provided for convenience. It differs from the abov...
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent