From d78d5896272d78df41e696fac929e7dfb3bb3dfa Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Mon, 7 Dec 2015 16:33:14 +0100 Subject: qtdemux: Stop pushing data as soon as possible in push-mode When working in push-mode, we attempt to push out everything currently buffered in the adapter. This has two pitfalls: * We could stop earlier (the moment we get a non-ok or non-not-linked) * We return the last combined flow return, which might be completely different from the previous combined flow return --- gst/isomp4/qtdemux.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index 31aba9d0f..378982d9f 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -6112,6 +6112,8 @@ gst_qtdemux_process_adapter (GstQTDemux * demux, gboolean force) /* combine flows */ ret = gst_qtdemux_combine_flows (demux, stream, ret); + if (ret != GST_FLOW_OK && ret != GST_FLOW_NOT_LINKED) + goto non_ok_unlinked_flow; } else { /* skip this data, stream is EOS */ gst_adapter_flush (demux->adapter, demux->neededbytes); @@ -6155,6 +6157,12 @@ done: return ret; /* ERRORS */ +non_ok_unlinked_flow: + { + GST_DEBUG_OBJECT (demux, "Stopping, combined return flow %s", + gst_flow_get_name (ret)); + return ret; + } unknown_stream: { GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL), ("unknown stream found")); -- cgit v1.2.3