diff --git a/0001-playsink-If-the-visualisation-is-changing-and-reconf.patch b/0001-playsink-If-the-visualisation-is-changing-and-reconf.patch deleted file mode 100644 index 3e10507..0000000 --- a/0001-playsink-If-the-visualisation-is-changing-and-reconf.patch +++ /dev/null @@ -1,203 +0,0 @@ -From dd4fe544bcafcf0f00660811d6c5d2b68b69ca25 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= -Date: Wed, 2 Oct 2013 15:02:44 +0200 -Subject: [PATCH] playsink: If the visualisation is changing and - reconfiguration is pending, do it all during reconfiguration - -Otherwise we will have two pad blocks that want to use the same mutex -and block each other via the streamlock. - -https://bugzilla.gnome.org/show_bug.cgi?id=709210 ---- - gst/playback/gstplaysink.c | 107 ++++++++++++++++++++++++++++++++++++++------- - 1 file changed, 91 insertions(+), 16 deletions(-) - -diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c -index e690c77..7f21c68 100644 ---- a/gst/playback/gstplaysink.c -+++ b/gst/playback/gstplaysink.c -@@ -230,6 +230,8 @@ struct _GstPlaySink - GstPad *text_sinkpad_stream_synchronizer; - gulong text_block_id; - -+ gulong vis_pad_block_id; -+ - guint32 pending_blocked_pads; - - /* properties */ -@@ -937,6 +939,8 @@ gst_play_sink_vis_blocked (GstPad * tee_pad, GstPadProbeInfo * info, - chain->vissrcpad); - - done: -+ playsink->vis_pad_block_id = 0; -+ - GST_PLAY_SINK_UNLOCK (playsink); - - /* remove the probe and unblock the pad */ -@@ -977,8 +981,11 @@ gst_play_sink_set_vis_plugin (GstPlaySink * playsink, GstElement * vis) - * function returns FALSE but the previous pad block will do the right thing - * anyway. */ - GST_DEBUG_OBJECT (playsink, "blocking vis pad"); -- gst_pad_add_probe (chain->blockpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, -- gst_play_sink_vis_blocked, playsink, NULL); -+ if (!playsink->vis_pad_block_id && !playsink->audio_block_id -+ && !playsink->video_block_id && !playsink->text_block_id) -+ playsink->vis_pad_block_id = -+ gst_pad_add_probe (chain->blockpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, -+ gst_play_sink_vis_blocked, playsink, NULL); - done: - GST_PLAY_SINK_UNLOCK (playsink); - -@@ -3339,21 +3346,54 @@ gst_play_sink_do_reconfigure (GstPlaySink * playsink) - - if (playsink->vischain) { - GST_DEBUG_OBJECT (playsink, "setting up vis chain"); -- srcpad = -- gst_element_get_static_pad (playsink->vischain->chain.bin, "src"); -- add_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE); -- activate_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE); -- if (playsink->audio_tee_vissrc == NULL) { -- playsink->audio_tee_vissrc = -- gst_element_get_request_pad (playsink->audio_tee, "src_%u"); -+ -+ /* Just change vis plugin or set up chain? */ -+ if (playsink->vischain->vis != playsink->visualisation) { -+ /* unlink the old plugin and unghost the pad */ -+ gst_pad_unlink (playsink->vischain->vispeerpad, -+ playsink->vischain->vissinkpad); -+ gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink-> -+ vischain->srcpad), NULL); -+ -+ /* set the old plugin to NULL and remove */ -+ gst_element_set_state (playsink->vischain->vis, GST_STATE_NULL); -+ gst_bin_remove (GST_BIN_CAST (playsink->vischain->chain.bin), -+ playsink->vischain->vis); -+ -+ /* add new plugin and set state to playing */ -+ playsink->vischain->vis = playsink->visualisation; -+ gst_bin_add (GST_BIN_CAST (playsink->vischain->chain.bin), -+ playsink->vischain->vis); -+ gst_element_set_state (playsink->vischain->vis, GST_STATE_PLAYING); -+ -+ /* get pads */ -+ playsink->vischain->vissinkpad = -+ gst_element_get_static_pad (playsink->vischain->vis, "sink"); -+ playsink->vischain->vissrcpad = -+ gst_element_get_static_pad (playsink->vischain->vis, "src"); -+ -+ /* link pads */ -+ gst_pad_link_full (playsink->vischain->vispeerpad, -+ playsink->vischain->vissinkpad, GST_PAD_LINK_CHECK_NOTHING); -+ gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (playsink-> -+ vischain->srcpad), playsink->vischain->vissrcpad); -+ } else { -+ srcpad = -+ gst_element_get_static_pad (playsink->vischain->chain.bin, "src"); -+ add_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE); -+ activate_chain (GST_PLAY_CHAIN (playsink->vischain), TRUE); -+ if (playsink->audio_tee_vissrc == NULL) { -+ playsink->audio_tee_vissrc = -+ gst_element_get_request_pad (playsink->audio_tee, "src_%u"); -+ } -+ gst_pad_link_full (playsink->audio_tee_vissrc, -+ playsink->vischain->sinkpad, GST_PAD_LINK_CHECK_NOTHING); -+ gst_pad_link_full (srcpad, playsink->video_sinkpad_stream_synchronizer, -+ GST_PAD_LINK_CHECK_NOTHING); -+ gst_pad_link_full (playsink->video_srcpad_stream_synchronizer, -+ playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING); -+ gst_object_unref (srcpad); - } -- gst_pad_link_full (playsink->audio_tee_vissrc, -- playsink->vischain->sinkpad, GST_PAD_LINK_CHECK_NOTHING); -- gst_pad_link_full (srcpad, playsink->video_sinkpad_stream_synchronizer, -- GST_PAD_LINK_CHECK_NOTHING); -- gst_pad_link_full (playsink->video_srcpad_stream_synchronizer, -- playsink->videochain->sinkpad, GST_PAD_LINK_CHECK_NOTHING); -- gst_object_unref (srcpad); - } - } else { - GST_DEBUG_OBJECT (playsink, "no vis needed"); -@@ -3802,6 +3842,11 @@ video_set_blocked (GstPlaySink * playsink, gboolean blocked) - GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD - (playsink->video_pad))); - if (blocked && playsink->video_block_id == 0) { -+ if (playsink->vis_pad_block_id) -+ gst_pad_remove_probe (((GstPlayVisChain *) playsink-> -+ vischain)->blockpad, playsink->vis_pad_block_id); -+ playsink->vis_pad_block_id = 0; -+ - playsink->video_block_id = - gst_pad_add_probe (opad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, - sinkpad_blocked_cb, playsink, NULL); -@@ -3824,10 +3869,20 @@ audio_set_blocked (GstPlaySink * playsink, gboolean blocked) - GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD - (playsink->audio_pad))); - if (blocked && playsink->audio_block_id == 0) { -+ if (playsink->vis_pad_block_id) -+ gst_pad_remove_probe (((GstPlayVisChain *) playsink-> -+ vischain)->blockpad, playsink->vis_pad_block_id); -+ playsink->vis_pad_block_id = 0; -+ - playsink->audio_block_id = - gst_pad_add_probe (opad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, - sinkpad_blocked_cb, playsink, NULL); - } else if (!blocked && playsink->audio_block_id) { -+ if (playsink->vis_pad_block_id) -+ gst_pad_remove_probe (((GstPlayVisChain *) playsink-> -+ vischain)->blockpad, playsink->vis_pad_block_id); -+ playsink->vis_pad_block_id = 0; -+ - gst_pad_remove_probe (opad, playsink->audio_block_id); - PENDING_FLAG_UNSET (playsink, GST_PLAY_SINK_TYPE_AUDIO_RAW); - PENDING_FLAG_UNSET (playsink, GST_PLAY_SINK_TYPE_AUDIO); -@@ -3846,6 +3901,11 @@ text_set_blocked (GstPlaySink * playsink, gboolean blocked) - GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD - (playsink->text_pad))); - if (blocked && playsink->text_block_id == 0) { -+ if (playsink->vis_pad_block_id) -+ gst_pad_remove_probe (((GstPlayVisChain *) playsink-> -+ vischain)->blockpad, playsink->vis_pad_block_id); -+ playsink->vis_pad_block_id = 0; -+ - playsink->text_block_id = - gst_pad_add_probe (opad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, - sinkpad_blocked_cb, playsink, NULL); -@@ -3995,6 +4055,11 @@ gst_play_sink_refresh_pad (GstPlaySink * playsink, GstPad * pad, - GstPad *blockpad = - GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (pad))); - -+ if (playsink->vis_pad_block_id) -+ gst_pad_remove_probe (((GstPlayVisChain *) playsink->vischain)->blockpad, -+ playsink->vis_pad_block_id); -+ playsink->vis_pad_block_id = 0; -+ - *block_id = - gst_pad_add_probe (blockpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, - sinkpad_blocked_cb, playsink, NULL); -@@ -4128,6 +4193,11 @@ gst_play_sink_request_pad (GstPlaySink * playsink, GstPlaySinkType type) - GstPad *blockpad = - GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (res))); - -+ if (playsink->vis_pad_block_id) -+ gst_pad_remove_probe (((GstPlayVisChain *) playsink-> -+ vischain)->blockpad, playsink->vis_pad_block_id); -+ playsink->vis_pad_block_id = 0; -+ - *block_id = - gst_pad_add_probe (blockpad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, - sinkpad_blocked_cb, playsink, NULL); -@@ -4433,6 +4503,11 @@ gst_play_sink_change_state (GstElement * element, GstStateChange transition) - video_set_blocked (playsink, FALSE); - audio_set_blocked (playsink, FALSE); - text_set_blocked (playsink, FALSE); -+ if (playsink->vis_pad_block_id) -+ gst_pad_remove_probe (((GstPlayVisChain *) playsink-> -+ vischain)->blockpad, playsink->vis_pad_block_id); -+ playsink->vis_pad_block_id = 0; -+ - GST_PLAY_SINK_UNLOCK (playsink); - /* fall through */ - case GST_STATE_CHANGE_READY_TO_NULL: --- -1.8.3.1 - diff --git a/gstreamer1-plugins-base.spec b/gstreamer1-plugins-base.spec index 89d5a94..609b1d9 100644 --- a/gstreamer1-plugins-base.spec +++ b/gstreamer1-plugins-base.spec @@ -1,16 +1,14 @@ %global majorminor 1.0 Name: gstreamer1-plugins-base -Version: 1.2.0 -Release: 2%{?dist} +Version: 1.2.1 +Release: 1%{?dist} Summary: GStreamer streaming media framework base plugins License: LGPLv2+ URL: http://gstreamer.freedesktop.org/ Source0: http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.xz Patch0: 0001-missing-plugins-Remove-the-mpegaudioversion-field.patch -# https://bugzilla.gnome.org/show_bug.cgi?id=709210 -Patch1: 0001-playsink-If-the-visualisation-is-changing-and-reconf.patch BuildRequires: gstreamer1-devel >= %{version} BuildRequires: gobject-introspection-devel >= 1.31.1 @@ -89,7 +87,7 @@ for the GStreamer Base Plugins library. %prep %setup -q -n gst-plugins-base-%{version} %patch0 -p1 -%patch1 -p1 + %build %configure \ @@ -352,6 +350,10 @@ chrpath --delete $RPM_BUILD_ROOT%{_bindir}/gst-discoverer-1.0 %changelog +* Mon Nov 11 2013 Brian Pepple - 1.2.1-1 +- Update to 1.2.1. +- Drop patch to fix potential deadlock on startup. Fixed upstream. + * Thu Oct 03 2013 Bastien Nocera 1.2.0-2 - Fix potential deadlock on startup when playing audio files