diff options
author | Jøger Hansegård <joger.hansegard@qt.io> | 2024-01-29 17:00:39 +0100 |
---|---|---|
committer | Jøger Hansegård <joger.hansegard@qt.io> | 2024-02-25 22:41:38 +0100 |
commit | 76d5703291b4d7264333f3effc5f8114d5d9dc44 (patch) | |
tree | efb559db24286b942bcf2874eebaf01a6ec11d8d /src/multimedia/platform | |
parent | f84fe0247c10b3fcb886b71c2cd4dc14e8817958 (diff) |
Simplify setup of media devices by using unique connection
Testing QMediaDevices was a bit tricky because we we needed to pump
messages to get everything set up for connecting cameras.
This patch removes the need for pumping messages by calling target
function directly. This way, video devices connections will be
initialized synchronously. By using UniqueConnection, we make sure this
only happens once, because we only need to create the connection if it
was not already created.
Amends 3d23c26565f087c2be2bb13cb511536ab05ab4d6.
Pick-to: 6.7 6.6 6.5
Change-Id: Icac571cbc1ccfc756a2e9a245752b7db4309fbfd
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Diffstat (limited to 'src/multimedia/platform')
-rw-r--r-- | src/multimedia/platform/qplatformmediadevices.cpp | 15 | ||||
-rw-r--r-- | src/multimedia/platform/qplatformmediadevices_p.h | 3 |
2 files changed, 6 insertions, 12 deletions
diff --git a/src/multimedia/platform/qplatformmediadevices.cpp b/src/multimedia/platform/qplatformmediadevices.cpp index 61b6515e6..069b3012b 100644 --- a/src/multimedia/platform/qplatformmediadevices.cpp +++ b/src/multimedia/platform/qplatformmediadevices.cpp @@ -98,15 +98,12 @@ QPlatformMediaDevices *QPlatformMediaDevices::instance() 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::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); } void QPlatformMediaDevices::setDevices(QPlatformMediaDevices *devices) diff --git a/src/multimedia/platform/qplatformmediadevices_p.h b/src/multimedia/platform/qplatformmediadevices_p.h index 0d7ba9306..555e269c8 100644 --- a/src/multimedia/platform/qplatformmediadevices_p.h +++ b/src/multimedia/platform/qplatformmediadevices_p.h @@ -59,9 +59,6 @@ Q_SIGNALS: void audioInputsChanged(); void audioOutputsChanged(); void videoInputsChanged(); - -private: - std::once_flag m_videoDevicesConnectionFlag; }; QT_END_NAMESPACE |