mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
tagdemux: Properly propagate sequence numbers
If we received a time segment from upstream, we need to make sure we propagate it downstream with the same sequence number. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1903>
This commit is contained in:
parent
a95a3ca807
commit
0d617885f1
1 changed files with 5 additions and 0 deletions
|
@ -102,6 +102,7 @@ struct _GstTagDemuxPrivate
|
||||||
|
|
||||||
GstSegment segment;
|
GstSegment segment;
|
||||||
gboolean need_newseg;
|
gboolean need_newseg;
|
||||||
|
guint32 segment_seqnum;
|
||||||
|
|
||||||
guint64 offset;
|
guint64 offset;
|
||||||
|
|
||||||
|
@ -265,6 +266,7 @@ gst_tag_demux_reset (GstTagDemux * tagdemux)
|
||||||
|
|
||||||
gst_segment_init (&tagdemux->priv->segment, GST_FORMAT_UNDEFINED);
|
gst_segment_init (&tagdemux->priv->segment, GST_FORMAT_UNDEFINED);
|
||||||
tagdemux->priv->need_newseg = TRUE;
|
tagdemux->priv->need_newseg = TRUE;
|
||||||
|
tagdemux->priv->segment_seqnum = gst_util_seqnum_next ();
|
||||||
|
|
||||||
g_list_foreach (tagdemux->priv->pending_events,
|
g_list_foreach (tagdemux->priv->pending_events,
|
||||||
(GFunc) gst_mini_object_unref, NULL);
|
(GFunc) gst_mini_object_unref, NULL);
|
||||||
|
@ -769,6 +771,7 @@ gst_tag_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
|
||||||
case GST_EVENT_SEGMENT:
|
case GST_EVENT_SEGMENT:
|
||||||
{
|
{
|
||||||
gst_event_copy_segment (event, &demux->priv->segment);
|
gst_event_copy_segment (event, &demux->priv->segment);
|
||||||
|
demux->priv->segment_seqnum = gst_event_get_seqnum (event);
|
||||||
|
|
||||||
demux->priv->need_newseg = TRUE;
|
demux->priv->need_newseg = TRUE;
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
@ -1854,6 +1857,7 @@ gst_tag_demux_send_new_segment (GstTagDemux * tagdemux)
|
||||||
/* Can't adjust segments in non-BYTES formats */
|
/* Can't adjust segments in non-BYTES formats */
|
||||||
if (tagdemux->priv->segment.format != GST_FORMAT_BYTES) {
|
if (tagdemux->priv->segment.format != GST_FORMAT_BYTES) {
|
||||||
event = gst_event_new_segment (seg);
|
event = gst_event_new_segment (seg);
|
||||||
|
gst_event_set_seqnum (event, tagdemux->priv->segment_seqnum);
|
||||||
return gst_pad_push_event (tagdemux->priv->srcpad, event);
|
return gst_pad_push_event (tagdemux->priv->srcpad, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1910,6 +1914,7 @@ gst_tag_demux_send_new_segment (GstTagDemux * tagdemux)
|
||||||
newseg.stop = stop;
|
newseg.stop = stop;
|
||||||
newseg.time = time;
|
newseg.time = time;
|
||||||
event = gst_event_new_segment (&newseg);
|
event = gst_event_new_segment (&newseg);
|
||||||
|
gst_event_set_seqnum (event, tagdemux->priv->segment_seqnum);
|
||||||
|
|
||||||
return gst_pad_push_event (tagdemux->priv->srcpad, event);
|
return gst_pad_push_event (tagdemux->priv->srcpad, event);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue