From 19052a847d43c489e6bfd249d4e63ba31e630fe1 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Wed, 23 Feb 2011 14:31:13 +0100 Subject: [PATCH] playsink: release all chains when going to NULL Also fixes #642466. --- gst/playback/gstplaysink.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c index 14d6882178..5ba637ac40 100644 --- a/gst/playback/gstplaysink.c +++ b/gst/playback/gstplaysink.c @@ -3271,6 +3271,21 @@ gst_play_sink_change_state (GstElement * element, GstStateChange transition) add_chain (GST_PLAY_CHAIN (playsink->textchain), FALSE); } do_async_done (playsink); + /* when going to READY, keep elements around as long as possible, + * so they may be re-used faster next time/url around. + * when really going to NULL, clean up everything completely. */ + if (transition == GST_STATE_CHANGE_READY_TO_NULL) { + free_chain ((GstPlayChain *) playsink->videodeinterlacechain); + playsink->videodeinterlacechain = NULL; + free_chain ((GstPlayChain *) playsink->videochain); + playsink->videochain = NULL; + free_chain ((GstPlayChain *) playsink->audiochain); + playsink->audiochain = NULL; + free_chain ((GstPlayChain *) playsink->vischain); + playsink->vischain = NULL; + free_chain ((GstPlayChain *) playsink->textchain); + playsink->textchain = NULL; + } break; default: break;