From 8641997630a9a63cc23f3e3f883496073ea61f34 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Mon, 9 Mar 2015 19:31:36 -0300 Subject: [PATCH] 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 --- libs/gst/base/gstbaseparse.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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); -- 2.7.4