mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-30 04:00:37 +00:00
mssdemux: fix clearing of eos state in pads
The internal pad still keeps its EOS flag and event as it can be assigned after the flush-start/stop pair is sent. The EOS is assigned from the streaming thread so this is racy. To be sure to clear it, it has to be done after setting the source to READY to be sure that its streaming thread isn't running. https://bugzilla.gnome.org/show_bug.cgi?id=736012
This commit is contained in:
parent
07b59c93c2
commit
01ccac24fa
1 changed files with 26 additions and 1 deletions
|
@ -1207,6 +1207,31 @@ _src_query (GstPad * pad, GstObject * parent, GstQuery * query)
|
|||
return gst_pad_query_default (pad, parent, query);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_mss_demux_pad_remove_eos_sticky (GstPad * pad, GstEvent ** event,
|
||||
gpointer udata)
|
||||
{
|
||||
if (GST_EVENT_TYPE (*event) == GST_EVENT_EOS) {
|
||||
gst_event_replace (event, NULL);
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gst_mss_demux_stream_clear_eos_state (GstMssDemuxStream * stream)
|
||||
{
|
||||
GstPad *internal_pad;
|
||||
|
||||
internal_pad =
|
||||
GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (stream->pad)));
|
||||
gst_pad_sticky_events_foreach (internal_pad,
|
||||
_mss_demux_pad_remove_eos_sticky, NULL);
|
||||
GST_OBJECT_FLAG_UNSET (internal_pad, GST_PAD_FLAG_EOS);
|
||||
|
||||
gst_object_unref (internal_pad);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gst_mss_demux_stream_update_source (GstMssDemuxStream * stream,
|
||||
const gchar * uri, const gchar * referer, gboolean refresh,
|
||||
|
@ -1360,8 +1385,8 @@ gst_mss_demux_stream_download_uri (GstMssDemux * demux,
|
|||
/* flush the proxypads so that the EOS state is reset */
|
||||
gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_start ());
|
||||
gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_stop (TRUE));
|
||||
|
||||
gst_element_set_state (stream->src, GST_STATE_READY);
|
||||
gst_mss_demux_stream_clear_eos_state (stream);
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
|
|
Loading…
Reference in a new issue