decodebin: consider all deadend pads as drained
authorThiago Santos <ts.santos@sisa.samsung.com>
Fri, 11 Jul 2014 21:51:44 +0000 (18:51 -0300)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 13 Aug 2014 15:51:37 +0000 (18:51 +0300)
Otherwise when switching out a group with a deadend pad it will block
as it would be waiting for EOS on a deadend that already got one

https://bugzilla.gnome.org/show_bug.cgi?id=733169

gst/playback/gstdecodebin2.c

index b8d8052..7b1e0f3 100644 (file)
@@ -2653,8 +2653,13 @@ pad_event_cb (GstPad * pad, GstPadProbeInfo * info, gpointer data)
       GST_DEBUG_OBJECT (dbin, "Received EOS on a non final pad, this stream "
           "ended too early");
       chain->deadend = TRUE;
+      chain->drained = TRUE;
       gst_object_replace ((GstObject **) & chain->current_pad, NULL);
       /* we don't set the endcaps because NULL endcaps means early EOS */
+
+      /* TODO check if this makes the next_group complete, but drained/deadend,
+       * meaning that it should be skipped and not exposed */
+
       EXPOSE_LOCK (dbin);
       if (gst_decode_chain_is_complete (dbin->decode_chain))
         gst_decode_bin_expose (dbin);