gst-plugins-base_0.10.24.bb: replace own hotfix with fix from gstreamer team
[vuplus_openembedded] / packages / gstreamer / files / playsink_fix_double_refcount.patch
1 From c3ebeec5a54c6c00bf30f7196968a9369c3d8205 Mon Sep 17 00:00:00 2001
2 From: Wim Taymans <wim.taymans@collabora.co.uk>
3 Date: Mon, 24 Aug 2009 13:06:28 +0000
4 Subject: playbin2: fix refcounting of _get_sink()
5
6 g_value_set_object() increases the refcount of the sink, which is not needed
7 because the object should already be refcounted. Make sure this is always the
8 case and use g_value_take_object().
9
10 Fixes: #592884
11 ---
12 diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c
13 index 6fc8d2d..24071b5 100644
14 --- a/gst/playback/gstplaybin2.c
15 +++ b/gst/playback/gstplaybin2.c
16 @@ -1618,8 +1618,12 @@ gst_play_bin_get_current_sink (GstPlayBin * playbin, GstElement ** elem,
17        GST_PTR_FORMAT ", the originally set %s sink is %" GST_PTR_FORMAT,
18        dbg, sink, dbg, *elem);
19  
20 -  if (sink == NULL)
21 -    sink = *elem;
22 +  if (sink == NULL) {
23 +    GST_PLAY_BIN_LOCK (playbin);
24 +    if ((sink = *elem))
25 +      gst_object_ref (sink);
26 +    GST_PLAY_BIN_UNLOCK (playbin);
27 +  }
28  
29    return sink;
30  }
31 @@ -1720,26 +1724,26 @@ gst_play_bin_get_property (GObject * object, guint prop_id, GValue * value,
32        GST_PLAY_BIN_UNLOCK (playbin);
33        break;
34      case PROP_VIDEO_SINK:
35 -      g_value_set_object (value,
36 +      g_value_take_object (value,
37            gst_play_bin_get_current_sink (playbin, &playbin->video_sink,
38                "video", GST_PLAY_SINK_TYPE_VIDEO));
39        break;
40      case PROP_AUDIO_SINK:
41 -      g_value_set_object (value,
42 +      g_value_take_object (value,
43            gst_play_bin_get_current_sink (playbin, &playbin->audio_sink,
44                "audio", GST_PLAY_SINK_TYPE_AUDIO));
45        break;
46      case PROP_VIS_PLUGIN:
47 -      g_value_set_object (value,
48 +      g_value_take_object (value,
49            gst_play_sink_get_vis_plugin (playbin->playsink));
50        break;
51      case PROP_TEXT_SINK:
52 -      g_value_set_object (value,
53 +      g_value_take_object (value,
54            gst_play_bin_get_current_sink (playbin, &playbin->text_sink,
55                "text", GST_PLAY_SINK_TYPE_TEXT));
56        break;
57      case PROP_SUBPIC_SINK:
58 -      g_value_set_object (value,
59 +      g_value_take_object (value,
60            gst_play_bin_get_current_sink (playbin, &playbin->subpic_sink,
61                "subpicture", GST_PLAY_SINK_TYPE_SUBPIC));
62        break;
63 --
64 cgit v0.8.2