v4l2videodec: Fix missing handling of resolution-change
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Thu, 19 May 2022 20:33:47 +0000 (16:33 -0400)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 24 May 2022 18:02:12 +0000 (18:02 +0000)
The pool process function may poll and get the resolution-change event
whenever it is not possible to share our buffers. This typically happen
when downstream does not support GstVideoMeta.

Not handling this would cause the decoder thread to exit silently and the
pipeline to stall.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2457>

subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c

index 52e641e..b586174 100644 (file)
@@ -699,6 +699,12 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
 
     GST_LOG_OBJECT (decoder, "Process output buffer");
     ret = gst_v4l2_buffer_pool_process (v4l2_pool, &buffer, NULL);
+
+    if (ret == GST_V4L2_FLOW_RESOLUTION_CHANGE) {
+      GST_INFO_OBJECT (decoder, "Received resolution change");
+      g_atomic_int_set (&self->capture_configuration_change, TRUE);
+      return;
+    }
   } while (ret == GST_V4L2_FLOW_CORRUPTED_BUFFER);
 
   if (ret != GST_FLOW_OK)