summaryrefslogtreecommitdiffstats
path: root/src/gsttools
diff options
context:
space:
mode:
Diffstat (limited to 'src/gsttools')
-rw-r--r--src/gsttools/qgstutils.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/gsttools/qgstutils.cpp b/src/gsttools/qgstutils.cpp
index 1281d3fc5..465f43989 100644
--- a/src/gsttools/qgstutils.cpp
+++ b/src/gsttools/qgstutils.cpp
@@ -41,6 +41,7 @@
#include <QtCore/qset.h>
#include <QtCore/qstringlist.h>
#include <qaudioformat.h>
+#include <QtCore/qelapsedtimer.h>
#ifdef USE_V4L
# include <private/qcore_unix_p.h>
@@ -411,6 +412,10 @@ Q_GLOBAL_STATIC(FactoryCameraInfoMap, qt_camera_device_info);
QVector<QGstUtils::CameraInfo> QGstUtils::enumerateCameras(GstElementFactory *factory)
{
+ static QElapsedTimer camerasCacheAgeTimer;
+ if (camerasCacheAgeTimer.isValid() && camerasCacheAgeTimer.elapsed() > 500) // ms
+ qt_camera_device_info()->clear();
+
FactoryCameraInfoMap::const_iterator it = qt_camera_device_info()->constFind(factory);
if (it != qt_camera_device_info()->constEnd())
return *it;
@@ -469,6 +474,7 @@ QVector<QGstUtils::CameraInfo> QGstUtils::enumerateCameras(GstElementFactory *fa
}
if (!devices.isEmpty() || !hasVideoSource) {
+ camerasCacheAgeTimer.restart();
return devices;
}
}
@@ -527,6 +533,7 @@ QVector<QGstUtils::CameraInfo> QGstUtils::enumerateCameras(GstElementFactory *fa
}
qt_safe_close(fd);
}
+ camerasCacheAgeTimer.restart();
#endif // USE_V4L
return devices;