alphadecodebin: Fix stall due to QoS
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Mon, 14 Jun 2021 20:04:52 +0000 (16:04 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Mon, 14 Jun 2021 20:33:15 +0000 (16:33 -0400)
alphacombine element is a simple element that assumes buffers are always
paired, or at least that missing buffers are signalled with a GAP. The QoS
implementation in the GstVideoDecoder base class allow decoders dropping
frames independently and that could lead to stall in alphacombine.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2326>

gst/codecalpha/gstalphadecodebin.c
sys/v4l2codecs/gstv4l2codecalphadecodebin.c

index 9f0a0a3..16b6285 100644 (file)
@@ -138,6 +138,11 @@ gst_alpha_decode_bin_constructed (GObject * obj)
     goto cleanup;
   }
 
+  /* We disable QoS on decoders because we need to maintain frame pairing in
+   * order for alphacombine to work. */
+  g_object_set (decoder, "qos", FALSE, NULL);
+  g_object_set (alpha_decoder, "qos", FALSE, NULL);
+
   alphacombine = gst_element_factory_make ("alphacombine", NULL);
   if (!alphacombine) {
     priv->missing_element = "alphacombine";
index 61c2612..72927d8 100644 (file)
@@ -141,6 +141,11 @@ gst_v4l2_codec_alpha_decode_bin_constructed (GObject * obj)
     goto cleanup;
   }
 
+  /* We disable QoS on decoders because we need to maintain frame pairing in
+   * order for alphacombine to work. */
+  g_object_set (decoder, "qos", FALSE, NULL);
+  g_object_set (alpha_decoder, "qos", FALSE, NULL);
+
   alphacombine = gst_element_factory_make ("alphacombine", NULL);
   if (!alphacombine) {
     priv->missing_element = "alphacombine";