From ef8b83ccdf5f1b54b1a8c514cea97ea690216a29 Mon Sep 17 00:00:00 2001 From: ghost Date: Mon, 24 Aug 2009 15:48:24 +0200 Subject: gst-plugins-base_0.10.24.bb: replace own hotfix with fix from gstreamer team --- .../files/playsink_fix_double_refcount.patch | 78 +++++++++++++++++----- packages/gstreamer/gst-plugins-base_0.10.24.bb | 2 +- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/packages/gstreamer/files/playsink_fix_double_refcount.patch b/packages/gstreamer/files/playsink_fix_double_refcount.patch index 5221b9f6c7..ac26b50589 100644 --- a/packages/gstreamer/files/playsink_fix_double_refcount.patch +++ b/packages/gstreamer/files/playsink_fix_double_refcount.patch @@ -1,16 +1,64 @@ ---- gst-plugins-base-0.10.24.org/gst/playback/gstplaysink.c 2009-07-14 12:03:45.000000000 +0200 -+++ gst-plugins-base-0.10.24/gst/playback/gstplaysink.c 2009-08-24 14:42:32.000000000 +0200 -@@ -418,11 +418,11 @@ - } - if (chainp) { - /* we have an active chain with a sink, get the sink */ -- result = gst_object_ref (chainp); -+ result = chainp; - } - /* nothing found, return last configured sink */ - if (result == NULL && elem) -- result = gst_object_ref (elem); -+ result = elem; - GST_PLAY_SINK_UNLOCK (playsink); +From c3ebeec5a54c6c00bf30f7196968a9369c3d8205 Mon Sep 17 00:00:00 2001 +From: Wim Taymans +Date: Mon, 24 Aug 2009 13:06:28 +0000 +Subject: playbin2: fix refcounting of _get_sink() + +g_value_set_object() increases the refcount of the sink, which is not needed +because the object should already be refcounted. Make sure this is always the +case and use g_value_take_object(). + +Fixes: #592884 +--- +diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c +index 6fc8d2d..24071b5 100644 +--- a/gst/playback/gstplaybin2.c ++++ b/gst/playback/gstplaybin2.c +@@ -1618,8 +1618,12 @@ gst_play_bin_get_current_sink (GstPlayBin * playbin, GstElement ** elem, + GST_PTR_FORMAT ", the originally set %s sink is %" GST_PTR_FORMAT, + dbg, sink, dbg, *elem); - return result; +- if (sink == NULL) +- sink = *elem; ++ if (sink == NULL) { ++ GST_PLAY_BIN_LOCK (playbin); ++ if ((sink = *elem)) ++ gst_object_ref (sink); ++ GST_PLAY_BIN_UNLOCK (playbin); ++ } + + return sink; + } +@@ -1720,26 +1724,26 @@ gst_play_bin_get_property (GObject * object, guint prop_id, GValue * value, + GST_PLAY_BIN_UNLOCK (playbin); + break; + case PROP_VIDEO_SINK: +- g_value_set_object (value, ++ g_value_take_object (value, + gst_play_bin_get_current_sink (playbin, &playbin->video_sink, + "video", GST_PLAY_SINK_TYPE_VIDEO)); + break; + case PROP_AUDIO_SINK: +- g_value_set_object (value, ++ g_value_take_object (value, + gst_play_bin_get_current_sink (playbin, &playbin->audio_sink, + "audio", GST_PLAY_SINK_TYPE_AUDIO)); + break; + case PROP_VIS_PLUGIN: +- g_value_set_object (value, ++ g_value_take_object (value, + gst_play_sink_get_vis_plugin (playbin->playsink)); + break; + case PROP_TEXT_SINK: +- g_value_set_object (value, ++ g_value_take_object (value, + gst_play_bin_get_current_sink (playbin, &playbin->text_sink, + "text", GST_PLAY_SINK_TYPE_TEXT)); + break; + case PROP_SUBPIC_SINK: +- g_value_set_object (value, ++ g_value_take_object (value, + gst_play_bin_get_current_sink (playbin, &playbin->subpic_sink, + "subpicture", GST_PLAY_SINK_TYPE_SUBPIC)); + break; +-- +cgit v0.8.2 diff --git a/packages/gstreamer/gst-plugins-base_0.10.24.bb b/packages/gstreamer/gst-plugins-base_0.10.24.bb index 4aa4f0fe41..b1f085edf2 100644 --- a/packages/gstreamer/gst-plugins-base_0.10.24.bb +++ b/packages/gstreamer/gst-plugins-base_0.10.24.bb @@ -3,7 +3,7 @@ PROVIDES_${PN} += "gst-plugins" RCONFLICTS_gst-plugins-base = "libgstapp-0.10-0" RREPLACES_gst-plugins-base = "libgstapp-0.10-0" EXTRA_OECONF += "--with-audioresample-format=int" -PR = "r2" +PR = "r3" SRC_URI += "file://gst-plugins_configure_skip_shave.patch;patch=1;pnum=0 \ file://playsink-textsink.diff;patch=1;pnum=1 \ file://playsink_fix_double_refcount.patch;patch=1;pnum=1" \ No newline at end of file -- cgit 1.2.3-korg