From: Thiago Santos Date: Mon, 9 Mar 2015 22:31:36 +0000 (-0300) Subject: baseparse: respect DISCONT flag on buffers X-Git-Tag: 1.6.1~345 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8641997630a9a63cc23f3e3f883496073ea61f34;p=platform%2Fupstream%2Fgstreamer.git baseparse: respect DISCONT flag on buffers Drain the parser when a DISCONT buffer is received and then mark the next buffer to be pushed as a DISCONT one https://bugzilla.gnome.org/show_bug.cgi?id=745927 --- diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c index d611b17..193bdf8 100644 --- a/libs/gst/base/gstbaseparse.c +++ b/libs/gst/base/gstbaseparse.c @@ -2948,13 +2948,17 @@ gst_base_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) gst_base_parse_frame_free (&frame); return ret; } - /* upstream feeding us in reverse playback; - * finish previous fragment and start new upon DISCONT */ - if (parse->segment.rate < 0.0) { - if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))) { + if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))) { + /* upstream feeding us in reverse playback; + * finish previous fragment and start new upon DISCONT */ + if (parse->segment.rate < 0.0) { GST_DEBUG_OBJECT (parse, "buffer starts new reverse playback fragment"); ret = gst_base_parse_finish_fragment (parse, TRUE); gst_base_parse_start_fragment (parse); + } else { + /* discont in the stream, drain and mark discont for next output */ + gst_base_parse_drain (parse); + parse->priv->discont = TRUE; } } gst_adapter_push (parse->priv->adapter, buffer);