diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-06-20 13:27:46 +0200 |
---|---|---|
committer | Artem Dyomin <artem.dyomin@qt.io> | 2023-06-27 00:08:51 +0200 |
commit | 3d23c26565f087c2be2bb13cb511536ab05ab4d6 (patch) | |
tree | bfd7570ab2812b41aca3f6a21233ce2ec68c7c60 /src/multimedia/platform/qplatformmediadevices.cpp | |
parent | 0e6a68fff78a487c809557fada08a87cec8d2ff0 (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.cpp | 16 |
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) { |