From 52257fe538cf33d2f10855d5ca3a8c3570cc382e Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 19 Aug 2014 00:01:28 -0300 Subject: [PATCH] tsdemux: remove pads when resetting the element Otherwise the pads will be there if it is restarted and the stream can be a completely different one. https://bugzilla.gnome.org/show_bug.cgi?id=734394 --- gst/mpegtsdemux/tsdemux.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index 3cb63c0b22..4cd051c90d 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -1431,15 +1431,19 @@ gst_ts_demux_stream_removed (MpegTSBase * base, MpegTSBaseStream * bstream) if (stream->pad) { gst_flow_combiner_remove_pad (GST_TS_DEMUX_CAST (base)->flowcombiner, stream->pad); - if (stream->active && gst_pad_is_active (stream->pad)) { - /* Flush out all data */ - GST_DEBUG_OBJECT (stream->pad, "Flushing out pending data"); - gst_ts_demux_push_pending_data ((GstTSDemux *) base, stream); + if (stream->active) { - GST_DEBUG_OBJECT (stream->pad, "Pushing out EOS"); - gst_pad_push_event (stream->pad, gst_event_new_eos ()); - GST_DEBUG_OBJECT (stream->pad, "Deactivating and removing pad"); - gst_pad_set_active (stream->pad, FALSE); + if (gst_pad_is_active (stream->pad)) { + /* Flush out all data */ + GST_DEBUG_OBJECT (stream->pad, "Flushing out pending data"); + gst_ts_demux_push_pending_data ((GstTSDemux *) base, stream); + + GST_DEBUG_OBJECT (stream->pad, "Pushing out EOS"); + gst_pad_push_event (stream->pad, gst_event_new_eos ()); + gst_pad_set_active (stream->pad, FALSE); + } + + GST_DEBUG_OBJECT (stream->pad, "Removing pad"); gst_element_remove_pad (GST_ELEMENT_CAST (base), stream->pad); stream->active = FALSE; }