summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform/qplatformmediadevices.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/platform/qplatformmediadevices.cpp')
-rw-r--r--src/multimedia/platform/qplatformmediadevices.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/multimedia/platform/qplatformmediadevices.cpp b/src/multimedia/platform/qplatformmediadevices.cpp
new file mode 100644
index 000000000..a6029228d
--- /dev/null
+++ b/src/multimedia/platform/qplatformmediadevices.cpp
@@ -0,0 +1,114 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qplatformmediadevices_p.h"
+#include "qplatformmediaintegration_p.h"
+#include "qcameradevice.h"
+#include "qaudiosystem_p.h"
+#include "qaudiodevice.h"
+#include "qplatformvideodevices_p.h"
+
+#if defined(Q_OS_ANDROID)
+#include <qandroidmediadevices_p.h>
+#elif defined(Q_OS_DARWIN)
+#include <qdarwinmediadevices_p.h>
+#elif defined(Q_OS_WINDOWS) && QT_CONFIG(wmf)
+#include <qwindowsmediadevices_p.h>
+#elif QT_CONFIG(alsa)
+#include <qalsamediadevices_p.h>
+#elif QT_CONFIG(pulseaudio)
+#include <qpulseaudiomediadevices_p.h>
+#elif defined(Q_OS_QNX)
+#include <qqnxmediadevices_p.h>
+#elif defined(Q_OS_WASM)
+#include <private/qwasmmediadevices_p.h>
+#endif
+
+
+QT_BEGIN_NAMESPACE
+
+std::unique_ptr<QPlatformMediaDevices> QPlatformMediaDevices::create()
+{
+#ifdef Q_OS_DARWIN
+ return std::make_unique<QDarwinMediaDevices>();
+#elif defined(Q_OS_WINDOWS) && QT_CONFIG(wmf)
+ return std::make_unique<QWindowsMediaDevices>();
+#elif defined(Q_OS_ANDROID)
+ return std::make_unique<QAndroidMediaDevices>();
+#elif QT_CONFIG(alsa)
+ return std::make_unique<QAlsaMediaDevices>();
+#elif QT_CONFIG(pulseaudio)
+ return std::make_unique<QPulseAudioMediaDevices>();
+#elif defined(Q_OS_QNX)
+ return std::make_unique<QQnxMediaDevices>();
+#elif defined(Q_OS_WASM)
+ return std::make_unique<QWasmMediaDevices>();
+#else
+ return std::make_unique<QPlatformMediaDevices>();
+#endif
+}
+
+QPlatformMediaDevices::QPlatformMediaDevices() = default;
+
+void QPlatformMediaDevices::initVideoDevicesConnection()
+{
+ // Make sure we are notified if video inputs changed
+ if (const auto videoDevices = QPlatformMediaIntegration::instance()->videoDevices())
+ connect(videoDevices, &QPlatformVideoDevices::videoInputsChanged, this,
+ &QPlatformMediaDevices::videoInputsChanged, Qt::UniqueConnection);
+}
+
+QPlatformMediaDevices::~QPlatformMediaDevices() = default;
+
+QList<QAudioDevice> QPlatformMediaDevices::audioInputs() const
+{
+ return {};
+}
+
+QList<QAudioDevice> QPlatformMediaDevices::audioOutputs() const
+{
+ return {};
+}
+
+QPlatformAudioSource *QPlatformMediaDevices::createAudioSource(const QAudioDevice &, QObject *)
+{
+ return nullptr;
+}
+QPlatformAudioSink *QPlatformMediaDevices::createAudioSink(const QAudioDevice &, QObject *)
+{
+ return nullptr;
+}
+
+QPlatformAudioSource *QPlatformMediaDevices::audioInputDevice(const QAudioFormat &format,
+ const QAudioDevice &deviceInfo,
+ QObject *parent)
+{
+ QAudioDevice info = deviceInfo;
+ if (info.isNull())
+ info = audioInputs().value(0);
+
+ QPlatformAudioSource* p = !info.isNull() ? createAudioSource(info, parent) : nullptr;
+ if (p)
+ p->setFormat(format);
+ return p;
+}
+
+QPlatformAudioSink *QPlatformMediaDevices::audioOutputDevice(const QAudioFormat &format,
+ const QAudioDevice &deviceInfo,
+ QObject *parent)
+{
+ QAudioDevice info = deviceInfo;
+ if (info.isNull())
+ info = audioOutputs().value(0);
+
+ QPlatformAudioSink* p = !info.isNull() ? createAudioSink(info, parent) : nullptr;
+ if (p)
+ p->setFormat(format);
+ return p;
+}
+
+void QPlatformMediaDevices::prepareAudio() { }
+
+QT_END_NAMESPACE
+
+#include "moc_qplatformmediadevices_p.cpp"