[gst-cvs] gst-plugins-base: playbin2: fix linking order
Wim Taymans
wtay at kemper.freedesktop.org
Mon Mar 23 07:27:53 PDT 2009
Module: gst-plugins-base
Branch: master
Commit: 7cc84f9205211d1a7b0b1011745981415cf50109
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=7cc84f9205211d1a7b0b1011745981415cf50109
Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date: Mon Mar 23 15:27:27 2009 +0100
playbin2: fix linking order
Link after doing the state change and unlink before shutting down. Makes the
window for causing races in toggling the visualisations smaller.
See #576187.
---
gst/playback/gstplaysink.c | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
index 848a914..3fbf566 100644
--- a/gst/playback/gstplaysink.c
+++ b/gst/playback/gstplaysink.c
@@ -1444,6 +1444,17 @@ gst_play_sink_reconfigure (GstPlaySink * playsink)
GST_DEBUG_OBJECT (playsink, "no video needed");
if (playsink->videochain) {
GST_DEBUG_OBJECT (playsink, "removing video chain");
+ if (playsink->vischain) {
+ GstPad *srcpad;
+
+ GST_DEBUG_OBJECT (playsink, "unlinking vis chain");
+
+ /* also had visualisation, unlink the video from it first */
+ srcpad =
+ gst_element_get_static_pad (GST_ELEMENT_CAST (playsink->vischain->
+ chain.bin), "src");
+ gst_pad_unlink (srcpad, playsink->videochain->sinkpad);
+ }
add_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
activate_chain (GST_PLAY_CHAIN (playsink->videochain), FALSE);
}
@@ -1549,18 +1560,19 @@ gst_play_sink_reconfigure (GstPlaySink * playsink)
if (playsink->vischain) {
GST_DEBUG_OBJECT (playsink, "setting up vis chain");
srcpad =
- gst_element_get_static_pad (GST_ELEMENT_CAST (playsink->
- vischain->chain.bin), "src");
+ gst_element_get_static_pad (GST_ELEMENT_CAST (playsink->vischain->
+ chain.bin), "src");
add_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
+ activate_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
gst_pad_link (playsink->audio_tee_vissrc, playsink->vischain->sinkpad);
gst_pad_link (srcpad, playsink->videochain->sinkpad);
gst_object_unref (srcpad);
- activate_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE);
}
} else {
GST_DEBUG_OBJECT (playsink, "no vis needed");
if (playsink->vischain) {
GST_DEBUG_OBJECT (playsink, "removing vis chain");
+ gst_pad_unlink (playsink->audio_tee_vissrc, playsink->vischain->sinkpad);
add_chain (GST_PLAY_CHAIN (playsink->vischain), FALSE);
activate_chain (GST_PLAY_CHAIN (playsink->vischain), FALSE);
}
More information about the Gstreamer-commits
mailing list