play: Make ownership of video-sink clearer in combination with floating references
authorSebastian Dröge <sebastian@centricular.com>
Sat, 13 Aug 2022 08:50:20 +0000 (11:50 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Sat, 13 Aug 2022 09:16:16 +0000 (12:16 +0300)
And correctly handle the case of VideoRenderer::create_video_sink() not
actually returning a floating reference, which might be tricky for some
bindings.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2880>

subprojects/gst-plugins-bad/gst-libs/gst/play/gstplay.c

index 63bbf64..950be08 100644 (file)
@@ -598,11 +598,16 @@ gst_play_set_playbin_video_sink (GstPlay * self)
 {
   GstElement *video_sink = NULL;
 
-  if (self->video_renderer != NULL)
+  if (self->video_renderer != NULL) {
     video_sink =
         gst_play_video_renderer_create_video_sink (self->video_renderer, self);
-  if (video_sink)
+  }
+
+  if (video_sink) {
+    gst_object_ref_sink (video_sink);
     g_object_set (self->playbin, "video-sink", video_sink, NULL);
+    gst_object_unref (video_sink);
+  }
 }
 
 static void