v4l2videodec: add cap negotiation fail check in the capture configuration change
authorElliot Chen <elliot.chen@nxp.com>
Wed, 31 Aug 2022 03:13:06 +0000 (11:13 +0800)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Sat, 17 Sep 2022 21:21:22 +0000 (21:21 +0000)
The capture configuration change may cause negotiation fail.
Need to check it to avoid enter the endless loop.

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

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

index 7ac17cf..9f6fa7b 100644 (file)
@@ -684,7 +684,15 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
     ret = gst_v4l2_video_dec_setup_capture (decoder);
     if (ret != GST_FLOW_OK) {
       GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
-      return;
+
+      /* if caps negotiation failed, avoid trying it repeatly */
+      if (ret == GST_FLOW_NOT_NEGOTIATED) {
+        GST_ERROR_OBJECT (decoder,
+            "capture configuration change fail, return negotiation fail");
+        goto beach;
+      } else {
+        return;
+      }
     }
     g_atomic_int_set (&self->capture_configuration_change, FALSE);
   }