From 0dee7777ff93a09e9e7c74027be8dfdc0dd6ac0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 29 May 2013 10:35:11 +0200 Subject: [PATCH] playbin: Set custom stream-combiners to NULL and unref before finalizing --- gst/playback/gstplaybin2.c | 22 +++++++++++++++++++++- tests/check/elements/playbin-compressed.c | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c index 51bd56a939..be0a3c1c07 100644 --- a/gst/playback/gstplaybin2.c +++ b/gst/playback/gstplaybin2.c @@ -1491,6 +1491,19 @@ gst_play_bin_finalize (GObject * object) gst_object_unref (playbin->text_sink); } + if (playbin->video_stream_combiner) { + gst_element_set_state (playbin->video_stream_combiner, GST_STATE_NULL); + gst_object_unref (playbin->video_stream_combiner); + } + if (playbin->audio_stream_combiner) { + gst_element_set_state (playbin->audio_stream_combiner, GST_STATE_NULL); + gst_object_unref (playbin->audio_stream_combiner); + } + if (playbin->text_stream_combiner) { + gst_element_set_state (playbin->text_stream_combiner, GST_STATE_NULL); + gst_object_unref (playbin->text_stream_combiner); + } + if (playbin->elements) gst_plugin_feature_list_free (playbin->elements); @@ -3008,8 +3021,8 @@ pad_added_cb (GstElement * decodebin, GstPad * pad, GstSourceGroup * group) GST_DEBUG_OBJECT (playbin, "adding new stream combiner %p", combine->combiner); - gst_bin_add (GST_BIN_CAST (playbin), combine->combiner); gst_element_set_state (combine->combiner, GST_STATE_PAUSED); + gst_bin_add (GST_BIN_CAST (playbin), combine->combiner); } } @@ -5144,6 +5157,13 @@ gst_play_bin_change_state (GstElement * element, GstStateChange transition) if (playbin->text_sink) gst_element_set_state (playbin->text_sink, GST_STATE_NULL); + if (playbin->video_stream_combiner) + gst_element_set_state (playbin->video_stream_combiner, GST_STATE_NULL); + if (playbin->audio_stream_combiner) + gst_element_set_state (playbin->audio_stream_combiner, GST_STATE_NULL); + if (playbin->text_stream_combiner) + gst_element_set_state (playbin->text_stream_combiner, GST_STATE_NULL); + /* make sure the groups don't perform a state change anymore until we * enable them again */ groups_set_locked_state (playbin, TRUE); diff --git a/tests/check/elements/playbin-compressed.c b/tests/check/elements/playbin-compressed.c index 935ada722a..9b4a2a7f5a 100644 --- a/tests/check/elements/playbin-compressed.c +++ b/tests/check/elements/playbin-compressed.c @@ -1628,6 +1628,7 @@ GST_START_TEST (test_raw_raw_audio_stream_adder_manual_sink) g_object_get (G_OBJECT (playbin), "audio-stream-combiner", &playbin_combiner, NULL); fail_unless (playbin_combiner == adder); + gst_object_unref (playbin_combiner); /* text and video combiners should still be NULL */ g_object_get (G_OBJECT (playbin), "text-stream-combiner", &playbin_combiner,