diff options
author | Sergio Martins <sergio.martins@kdab.com> | 2015-02-04 16:28:21 +0000 |
---|---|---|
committer | Sérgio Martins <sergio.martins@kdab.com> | 2015-02-05 13:42:10 +0000 |
commit | 8923c0ff6b7b3d907c3500618b3234266a0ac31b (patch) | |
tree | 80d5b34876d70a2f8b2016cd92ba87bff3765c04 | |
parent | 456944f855b0990d3765c1b8b37c997f9c4261c9 (diff) | |
download | qtmultimedia-8923c0ff6b7b3d907c3500618b3234266a0ac31b.tar.gz |
directshow: Fix plugging/unplugging a second camera
When having more than 1 camera (like one laptop integrated webcam
and a separate one) you had to restart the application for QCameraInfo::availableCameras()
to work.
Change-Id: I47cfa928cfd9500524b81a4bf8ec5ebff0b79879
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
-rw-r--r-- | src/plugins/directshow/dsserviceplugin.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/plugins/directshow/dsserviceplugin.cpp b/src/plugins/directshow/dsserviceplugin.cpp index b59cd1dc5..f28f274e2 100644 --- a/src/plugins/directshow/dsserviceplugin.cpp +++ b/src/plugins/directshow/dsserviceplugin.cpp @@ -39,6 +39,7 @@ #include "dsvideodevicecontrol.h" #ifdef QMEDIA_DIRECTSHOW_CAMERA +#include <QtCore/QElapsedTimer> #include <dshow.h> #include "dscameraservice.h" #endif @@ -121,8 +122,7 @@ QByteArray DSServicePlugin::defaultDevice(const QByteArray &service) const { #ifdef QMEDIA_DIRECTSHOW_CAMERA if (service == Q_MEDIASERVICE_CAMERA) { - if (m_cameraDevices.isEmpty()) - updateDevices(); + updateDevices(); return m_defaultCameraDevice; } @@ -135,8 +135,7 @@ QList<QByteArray> DSServicePlugin::devices(const QByteArray &service) const { #ifdef QMEDIA_DIRECTSHOW_CAMERA if (service == Q_MEDIASERVICE_CAMERA) { - if (m_cameraDevices.isEmpty()) - updateDevices(); + updateDevices(); return m_cameraDevices; } @@ -149,8 +148,7 @@ QString DSServicePlugin::deviceDescription(const QByteArray &service, const QByt { #ifdef QMEDIA_DIRECTSHOW_CAMERA if (service == Q_MEDIASERVICE_CAMERA) { - if (m_cameraDevices.isEmpty()) - updateDevices(); + updateDevices(); for (int i=0; i<m_cameraDevices.count(); i++) if (m_cameraDevices[i] == device) @@ -164,6 +162,10 @@ QString DSServicePlugin::deviceDescription(const QByteArray &service, const QByt void DSServicePlugin::updateDevices() const { + static QElapsedTimer timer; + if (timer.isValid() && timer.elapsed() < 500) // ms + return; + addRefCount(); m_defaultCameraDevice.clear(); @@ -176,6 +178,7 @@ void DSServicePlugin::updateDevices() const } releaseRefCount(); + timer.restart(); } #endif |