summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2011-02-23 14:31:13 +0100
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2011-02-23 14:33:40 +0100
commit19052a847d43c489e6bfd249d4e63ba31e630fe1 (patch)
treeb44b8f1066ace847cbbf823c052f2581232333fb
parent102b4feddf4f519515b5d33873f8aee776bdabfa (diff)
playsink: release all chains when going to NULL
Also fixes #642466.
-rw-r--r--gst/playback/gstplaysink.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
index 14d688217..5ba637ac4 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;