splitmuxsrc: don't queue data on unlinked pads
authorMathieu Duponchelle <mathieu@centricular.com>
Fri, 7 Oct 2022 23:03:13 +0000 (01:03 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 10 Oct 2022 18:11:12 +0000 (18:11 +0000)
Once a pad has returned NOT_LINKED, the part reader shouldn't let its
corresponding data queue run full and eventually (after 20 seconds)
stall playback.

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

subprojects/gst-plugins-good/gst/multifile/gstsplitmuxpartreader.c

index 7babb75..7ae526f 100644 (file)
@@ -232,6 +232,12 @@ splitmux_part_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
     return GST_FLOW_FLUSHING;
   }
 
+  if (GST_PAD_LAST_FLOW_RETURN (part_pad->target) == GST_FLOW_NOT_LINKED) {
+    SPLITMUX_PART_UNLOCK (reader);
+    gst_buffer_unref (buf);
+    return GST_FLOW_NOT_LINKED;
+  }
+
   /* Adjust buffer timestamps */
   offset = reader->start_offset + part_pad->segment.base;
   offset -= part_pad->initial_ts_offset;