From: Vincent Penquerc'h Date: Mon, 8 Aug 2011 21:14:28 +0000 (+0100) Subject: matroskademux: ensure no-more-pads is always emitted X-Git-Tag: RELEASE-0.11.1~7^2~344 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e032d2667496f6be815d5c8ac0af08510829f947;p=platform%2Fupstream%2Fgst-plugins-good.git matroskademux: ensure no-more-pads is always emitted In particular, do so even if failing to read while prerolling, such as when reading from a partial file (eg, while it is being downloaded). This fixes a wedge in playbin2. https://bugzilla.gnome.org/show_bug.cgi?id=651965 --- diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index 9481ed9..416f30e 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -4340,6 +4340,20 @@ pause: if (ret == GST_FLOW_UNEXPECTED) { /* perform EOS logic */ + /* If we were in the headers, make sure we send no-more-pads. + This will ensure decodebin2 does not get stuck thinking + the chain is not complete yet, and waiting indefinitely. */ + if (G_UNLIKELY (demux->common.state == GST_MATROSKA_READ_STATE_HEADER)) { + if (demux->common.src->len == 0) { + GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL), + ("No pads created")); + } else { + GST_ELEMENT_WARNING (demux, STREAM, DEMUX, (NULL), + ("Failed to finish reading headers")); + } + gst_element_no_more_pads (GST_ELEMENT (demux)); + } + /* Close the segment, i.e. update segment stop with the duration * if no stop was set */ if (GST_CLOCK_TIME_IS_VALID (demux->last_stop_end) &&