summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Martins <sergio.martins@kdab.com>2015-02-04 16:28:21 +0000
committerSérgio Martins <sergio.martins@kdab.com>2015-02-05 13:42:10 +0000
commit8923c0ff6b7b3d907c3500618b3234266a0ac31b (patch)
tree80d5b34876d70a2f8b2016cd92ba87bff3765c04
parent456944f855b0990d3765c1b8b37c997f9c4261c9 (diff)
downloadqtmultimedia-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.cpp15
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