mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
adder: ensure the discont flag is correct
Previously it happened that reused buffer caused the discont to be on the wrong buffers.
This commit is contained in:
parent
d5fbc905e3
commit
66148a770c
1 changed files with 9 additions and 2 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue