mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
wavparse: respect seqnum in seek events
Propagate the original seek seqnum to events originated from seeking to make sure they have the same value
This commit is contained in:
parent
763a7e5265
commit
d55458135a
1 changed files with 17 additions and 4 deletions
|
@ -378,12 +378,14 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
|
||||||
gboolean update;
|
gboolean update;
|
||||||
GstSegment seeksegment = { 0, };
|
GstSegment seeksegment = { 0, };
|
||||||
gint64 last_stop;
|
gint64 last_stop;
|
||||||
|
guint32 seqnum = 0;
|
||||||
|
|
||||||
if (event) {
|
if (event) {
|
||||||
GST_DEBUG_OBJECT (wav, "doing seek with event");
|
GST_DEBUG_OBJECT (wav, "doing seek with event");
|
||||||
|
|
||||||
gst_event_parse_seek (event, &rate, &format, &flags,
|
gst_event_parse_seek (event, &rate, &format, &flags,
|
||||||
&cur_type, &cur, &stop_type, &stop);
|
&cur_type, &cur, &stop_type, &stop);
|
||||||
|
seqnum = gst_event_get_seqnum (event);
|
||||||
|
|
||||||
/* no negative rates yet */
|
/* no negative rates yet */
|
||||||
if (rate < 0.0)
|
if (rate < 0.0)
|
||||||
|
@ -449,6 +451,7 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
|
||||||
/* BYTE seek event */
|
/* BYTE seek event */
|
||||||
event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, cur_type, cur,
|
event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, cur_type, cur,
|
||||||
stop_type, stop);
|
stop_type, stop);
|
||||||
|
gst_event_set_seqnum (event, seqnum);
|
||||||
res = gst_pad_push_event (wav->sinkpad, event);
|
res = gst_pad_push_event (wav->sinkpad, event);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -464,9 +467,13 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
|
||||||
* as it completes one iteration (and thus might block when the sink is
|
* as it completes one iteration (and thus might block when the sink is
|
||||||
* blocking in preroll). */
|
* blocking in preroll). */
|
||||||
if (flush) {
|
if (flush) {
|
||||||
|
GstEvent *fevent;
|
||||||
GST_DEBUG_OBJECT (wav, "sending flush start");
|
GST_DEBUG_OBJECT (wav, "sending flush start");
|
||||||
gst_pad_push_event (wav->sinkpad, gst_event_new_flush_start ());
|
|
||||||
gst_pad_push_event (wav->srcpad, gst_event_new_flush_start ());
|
fevent = gst_event_new_flush_start ();
|
||||||
|
gst_event_set_seqnum (fevent, seqnum);
|
||||||
|
gst_pad_push_event (wav->sinkpad, gst_event_ref (fevent));
|
||||||
|
gst_pad_push_event (wav->srcpad, fevent);
|
||||||
} else {
|
} else {
|
||||||
gst_pad_pause_task (wav->sinkpad);
|
gst_pad_pause_task (wav->sinkpad);
|
||||||
}
|
}
|
||||||
|
@ -545,10 +552,15 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
|
||||||
|
|
||||||
/* prepare for streaming again */
|
/* prepare for streaming again */
|
||||||
if (flush) {
|
if (flush) {
|
||||||
|
GstEvent *fevent;
|
||||||
|
|
||||||
/* if we sent a FLUSH_START, we now send a FLUSH_STOP */
|
/* if we sent a FLUSH_START, we now send a FLUSH_STOP */
|
||||||
GST_DEBUG_OBJECT (wav, "sending flush stop");
|
GST_DEBUG_OBJECT (wav, "sending flush stop");
|
||||||
gst_pad_push_event (wav->sinkpad, gst_event_new_flush_stop (TRUE));
|
|
||||||
gst_pad_push_event (wav->srcpad, gst_event_new_flush_stop (TRUE));
|
fevent = gst_event_new_flush_stop (TRUE);
|
||||||
|
gst_event_set_seqnum (fevent, seqnum);
|
||||||
|
gst_pad_push_event (wav->sinkpad, gst_event_ref (fevent));
|
||||||
|
gst_pad_push_event (wav->srcpad, fevent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now we did the seek and can activate the new segment values */
|
/* now we did the seek and can activate the new segment values */
|
||||||
|
@ -569,6 +581,7 @@ gst_wavparse_perform_seek (GstWavParse * wav, GstEvent * event)
|
||||||
if (wav->start_segment)
|
if (wav->start_segment)
|
||||||
gst_event_unref (wav->start_segment);
|
gst_event_unref (wav->start_segment);
|
||||||
wav->start_segment = gst_event_new_segment (&wav->segment);
|
wav->start_segment = gst_event_new_segment (&wav->segment);
|
||||||
|
gst_event_set_seqnum (wav->start_segment, seqnum);
|
||||||
|
|
||||||
/* mark discont if we are going to stream from another position. */
|
/* mark discont if we are going to stream from another position. */
|
||||||
if (last_stop != wav->segment.position) {
|
if (last_stop != wav->segment.position) {
|
||||||
|
|
Loading…
Reference in a new issue