pad: Only remove TAG events on STREAM_START if the stream-id actually changes
Missing part from 88a36b53c5064d186acb317b0b72633ef5d886e3 See also https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4097 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9268>
This commit is contained in:
parent
a8e3dc337b
commit
f40726597e
@ -6000,7 +6000,9 @@ gst_pad_send_event_unchecked (GstPad * pad, GstEvent * event,
|
|||||||
goto flushing;
|
goto flushing;
|
||||||
|
|
||||||
switch (event_type) {
|
switch (event_type) {
|
||||||
case GST_EVENT_STREAM_START:
|
case GST_EVENT_STREAM_START:{
|
||||||
|
gboolean changed_stream_id = TRUE;
|
||||||
|
|
||||||
/* Take the stream lock to unset the EOS status. This is to ensure
|
/* Take the stream lock to unset the EOS status. This is to ensure
|
||||||
* there isn't any other serialized event passing through while this
|
* there isn't any other serialized event passing through while this
|
||||||
* EOS status is being unset */
|
* EOS status is being unset */
|
||||||
@ -6012,13 +6014,38 @@ gst_pad_send_event_unchecked (GstPad * pad, GstEvent * event,
|
|||||||
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
|
if (G_UNLIKELY (GST_PAD_IS_FLUSHING (pad)))
|
||||||
goto flushing;
|
goto flushing;
|
||||||
|
|
||||||
|
for (guint i = 0; i < pad->priv->events->len; i++) {
|
||||||
|
PadEvent *ev = &g_array_index (pad->priv->events, PadEvent, i);
|
||||||
|
|
||||||
|
if (GST_EVENT_TYPE (ev->event) == GST_EVENT_STREAM_START) {
|
||||||
|
if (event == ev->event) {
|
||||||
|
changed_stream_id = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const gchar *old_stream_id, *new_stream_id;
|
||||||
|
|
||||||
|
gst_event_parse_stream_start (ev->event, &old_stream_id);
|
||||||
|
gst_event_parse_stream_start (event, &new_stream_id);
|
||||||
|
|
||||||
|
changed_stream_id = !g_str_equal (old_stream_id, new_stream_id);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove sticky EOS events */
|
/* Remove sticky EOS events */
|
||||||
GST_LOG_OBJECT (pad, "Removing pending EOS events");
|
GST_LOG_OBJECT (pad, "Removing pending EOS events");
|
||||||
remove_event_by_type (pad, GST_EVENT_EOS);
|
remove_event_by_type (pad, GST_EVENT_EOS);
|
||||||
remove_event_by_type (pad, GST_EVENT_STREAM_GROUP_DONE);
|
remove_event_by_type (pad, GST_EVENT_STREAM_GROUP_DONE);
|
||||||
remove_event_by_type (pad, GST_EVENT_TAG);
|
|
||||||
GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS);
|
GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_EOS);
|
||||||
|
|
||||||
|
if (changed_stream_id) {
|
||||||
|
GST_LOG_OBJECT (pad, "Removing pending TAG events");
|
||||||
|
remove_event_by_type (pad, GST_EVENT_TAG);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case GST_EVENT_RECONFIGURE:
|
case GST_EVENT_RECONFIGURE:
|
||||||
if (GST_PAD_IS_SRC (pad))
|
if (GST_PAD_IS_SRC (pad))
|
||||||
GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_NEED_RECONFIGURE);
|
GST_OBJECT_FLAG_SET (pad, GST_PAD_FLAG_NEED_RECONFIGURE);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user