summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@qt.io>2022-12-23 07:50:09 +0000
committerSamuli Piippo <samuli.piippo@qt.io>2023-01-04 11:42:55 +0000
commite98cfba8b1ef3d1c0fa4fccc2f2e12379e16db7b (patch)
tree05b998f729da6fe11b58ba0a907f32c558253bfe
parenta4068b36a7284458a41af6c927b1a17f2e076798 (diff)
downloadqtmultimedia-e98cfba8b1ef3d1c0fa4fccc2f2e12379e16db7b.tar.gz
ffmpeg: avoid infinite loop with non-discreate framesizes
The v4l2 camera checkup can properly handly only discrete types. In case ioctl reports anything else, make sure we increase the index to avoid getting stuck on infinite loop. Fixes: QTBUG-109535 Change-Id: I7e669b8167361875b75d4eece5c0c9a92a76c331 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no> (cherry picked from commit 8897d36de57db3ce9d75fbd87bcec96bbbd4d69f)
-rw-r--r--src/plugins/multimedia/ffmpeg/qv4l2camera.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qv4l2camera.cpp b/src/plugins/multimedia/ffmpeg/qv4l2camera.cpp
index e00641419..17516bad6 100644
--- a/src/plugins/multimedia/ffmpeg/qv4l2camera.cpp
+++ b/src/plugins/multimedia/ffmpeg/qv4l2camera.cpp
@@ -146,6 +146,7 @@ void QV4L2CameraDevices::doCheckCameras()
frameSize.pixel_format = formatDesc.pixelformat;
while (!ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frameSize)) {
+ ++frameSize.index;
if (frameSize.type != V4L2_FRMSIZE_TYPE_DISCRETE)
continue;
@@ -159,9 +160,9 @@ void QV4L2CameraDevices::doCheckCameras()
frameInterval.height = frameSize.discrete.height;
while (!ioctl(fd, VIDIOC_ENUM_FRAMEINTERVALS, &frameInterval)) {
+ ++frameInterval.index;
if (frameInterval.type != V4L2_FRMIVAL_TYPE_DISCRETE)
continue;
- ++frameInterval.index;
float rate = float(frameInterval.discrete.denominator)/float(frameInterval.discrete.numerator);
if (rate > max)
max = rate;
@@ -170,7 +171,6 @@ void QV4L2CameraDevices::doCheckCameras()
}
// qDebug() << " " << resolution << min << max;
- ++frameSize.index;
if (min <= max) {
QCameraFormatPrivate *fmt = new QCameraFormatPrivate;