From 66148a770c3561a6b5c16b06b5b885b4b687cd71 Mon Sep 17 00:00:00 2001 From: Stefan Sauer Date: Fri, 10 Feb 2017 21:28:49 +0100 Subject: [PATCH] adder: ensure the discont flag is correct Previously it happened that reused buffer caused the discont to be on the wrong buffers. --- gst/adder/gstadder.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gst/adder/gstadder.c b/gst/adder/gstadder.c index fe2d21ae46..6d45980957 100644 --- a/gst/adder/gstadder.c +++ b/gst/adder/gstadder.c @@ -1090,6 +1090,7 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data) gint rate, bps, bpf; gboolean had_mute = FALSE; gboolean is_eos = TRUE; + gboolean is_discont = FALSE; adder = GST_ADDER (user_data); @@ -1111,7 +1112,7 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data) GstEvent *event; GST_INFO_OBJECT (adder->srcpad, "send pending stream start event"); - /* FIXME: create id based on input ids, we can't use + /* FIXME: create id based on input ids, we can't use * gst_pad_create_stream_id() though as that only handles 0..1 sink-pad */ g_snprintf (s_id, sizeof (s_id), "adder-%08x", g_random_int ()); @@ -1144,7 +1145,7 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data) FALSE)) { GstEvent *event; - /* + /* * When seeking we set the start and stop positions as given in the seek * event. We also adjust offset & timestamp accordingly. * This basically ignores all newsegments sent by upstream. @@ -1169,6 +1170,7 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data) "start:%" G_GINT64_FORMAT " end:%" G_GINT64_FORMAT " failed", adder->segment.start, adder->segment.stop); } + is_discont = TRUE; } /* get available bytes for reading, this can be 0 which could mean empty @@ -1459,6 +1461,11 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data) GST_BUFFER_OFFSET_END (outbuf) = adder->offset; GST_BUFFER_DURATION (outbuf) = adder->segment.position - next_timestamp; } + if (is_discont) { + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); + } else { + GST_BUFFER_FLAG_UNSET (outbuf, GST_BUFFER_FLAG_DISCONT); + } adder->offset = next_offset; adder->segment.position = next_timestamp;