From a369448b0ce98d57c061ea6f13dea978a00cb940 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Wed, 29 Jun 2022 01:25:41 +1000 Subject: [PATCH] adaptivedemux2: Clean up stream parsebins on finalize Remove the parsebin for a stream from the overall bin when cleaning up the stream, to avoid keeping around old ones when moving between periods Part-of: --- .../ext/adaptivedemux2/gstadaptivedemux-stream.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemux-stream.c b/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemux-stream.c index 2784a17271..3e40d24c0c 100644 --- a/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemux-stream.c +++ b/subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemux-stream.c @@ -104,6 +104,14 @@ gst_adaptive_demux2_stream_finalize (GObject * object) if (stream->pad_removed_id) g_signal_handler_disconnect (stream->parsebin, stream->pad_removed_id); + if (stream->parsebin != NULL) { + GST_LOG_OBJECT (stream, "Removing parsebin"); + gst_bin_remove (GST_BIN_CAST (stream->demux), stream->parsebin); + gst_element_set_state (stream->parsebin, GST_STATE_NULL); + gst_object_unref (stream->parsebin); + stream->parsebin = NULL; + } + g_free (stream->fragment_bitrates); g_list_free_full (stream->tracks, @@ -1045,7 +1053,7 @@ gst_adaptive_demux2_stream_create_parser (GstAdaptiveDemux2Stream * stream) if (tsdemux_type) g_signal_connect (stream->parsebin, "deep-element-added", (GCallback) parsebin_deep_element_added_cb, demux); - gst_bin_add (GST_BIN_CAST (demux), stream->parsebin); + gst_bin_add (GST_BIN_CAST (demux), gst_object_ref (stream->parsebin)); stream->parsebin_sink = gst_element_get_static_pad (stream->parsebin, "sink"); stream->pad_added_id = g_signal_connect (stream->parsebin, "pad-added",