summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform/qplatformmediadevices.cpp
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2023-06-20 13:27:46 +0200
committerArtem Dyomin <artem.dyomin@qt.io>2023-06-27 00:08:51 +0200
commit3d23c26565f087c2be2bb13cb511536ab05ab4d6 (patch)
treebfd7570ab2812b41aca3f6a21233ce2ec68c7c60 /src/multimedia/platform/qplatformmediadevices.cpp
parent0e6a68fff78a487c809557fada08a87cec8d2ff0 (diff)
Implement initialization of video devices on the first connection
The problem is that VideoDevices are created and managed by QPlatformMediaIntegration, but signals are connected to QPlatformMediaDevices. A possible redesign is here codereview.qt-project.org/c/qt/qtmultimedia/+/484647, but the concern is that it's a bit of controversy with the initial idea. Current patchs solves the poblem directly and covers with UTs. Idea of the patch: let's handle connection to QMediaDevices::videoInputsChanged and initialize QPlatformMediaIntegration and video devices connection. I propose postpone initialization because users don't expect us doing any serious magic just on the signal connection. The UTs were slightly refactored in order to test the case. Pick-to: 6.6 6.5 Change-Id: I0ca3dfb2126daf69746380fa65096d9d05327f5e Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Diffstat (limited to 'src/multimedia/platform/qplatformmediadevices.cpp')
-rw-r--r--src/multimedia/platform/qplatformmediadevices.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/multimedia/platform/qplatformmediadevices.cpp b/src/multimedia/platform/qplatformmediadevices.cpp
index 09c26a670..f971fb4c3 100644
--- a/src/multimedia/platform/qplatformmediadevices.cpp
+++ b/src/multimedia/platform/qplatformmediadevices.cpp
@@ -2,11 +2,13 @@
// 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 "qmediadevices.h"
#include "qaudiodevice.h"
#include "qcameradevice.h"
#include "qaudiosystem_p.h"
#include "qaudiodevice.h"
+#include "qplatformvideodevices_p.h"
#include <qmutex.h>
#include <qloggingcategory.h>
@@ -75,8 +77,18 @@ QPlatformMediaDevices *QPlatformMediaDevices::instance()
}
-QPlatformMediaDevices::QPlatformMediaDevices()
-{}
+QPlatformMediaDevices::QPlatformMediaDevices() = default;
+
+void QPlatformMediaDevices::initVideoDevicesConnection() {
+ std::call_once(m_videoDevicesConnectionFlag, [this]() {
+ QMetaObject::invokeMethod(this, [this]() {
+ auto videoDevices = QPlatformMediaIntegration::instance()->videoDevices();
+ if (videoDevices)
+ connect(videoDevices, &QPlatformVideoDevices::videoInputsChanged, this,
+ &QPlatformMediaDevices::videoInputsChanged);
+ }, Qt::QueuedConnection);
+ });
+}
void QPlatformMediaDevices::setDevices(QPlatformMediaDevices *devices)
{