baseparse: fix stray discont flag set on outgoing buffers in push mode
authorTim-Philipp Müller <tim@centricular.com>
Thu, 4 Feb 2016 10:07:22 +0000 (10:07 +0000)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 4 Feb 2016 19:04:41 +0000 (19:04 +0000)
We have no guarantees about what flags are set on buffers we take
out of the GstAdapter. If we push out multiple buffers from the
first input buffer (which will have discont set), only the first
buffer we push out should be flagged as discont, not all of the
buffers produced from that first initial input buffer.

Fixes issue where the first few mp3 frames/seconds of data in push
mode were skipped or garbled in some cases, and the discont flags
would also trip up decoders which were getting drained/flushed for
every buffer. This was a regression introduced in 1.6 apparently.

libs/gst/base/gstbaseparse.c

index d305b12..fd0a4ee 100644 (file)
@@ -791,6 +791,8 @@ gst_base_parse_update_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
   if (G_UNLIKELY (parse->priv->discont)) {
     GST_DEBUG_OBJECT (parse, "marking DISCONT");
     GST_BUFFER_FLAG_SET (frame->buffer, GST_BUFFER_FLAG_DISCONT);
+  } else {
+    GST_BUFFER_FLAG_UNSET (frame->buffer, GST_BUFFER_FLAG_DISCONT);
   }
 
   if (parse->priv->prev_offset != parse->priv->offset || parse->priv->new_frame) {