From a9a05c01a9dc8caea375158b6fad91c718975378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 15 May 2017 20:31:31 +0300 Subject: [PATCH] gst: Clear floating flag in constructor of all GstObject subclasses that are not owned by any parent https://bugzilla.gnome.org/show_bug.cgi?id=743062 --- gst-libs/gst/gl/android/gstglwindow_android_egl.c | 7 ++++++- gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m | 7 ++++++- gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m | 11 +++++++++-- gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m | 7 ++++++- gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.c | 7 ++++++- gst-libs/gst/gl/eagl/gstglcontext_eagl.m | 7 ++++++- gst-libs/gst/gl/eagl/gstglwindow_eagl.m | 7 ++++++- gst-libs/gst/gl/egl/gstglcontext_egl.c | 7 ++++++- gst-libs/gst/gl/egl/gstgldisplay_egl.c | 3 +++ gst-libs/gst/gl/egl/gstglmemoryegl.c | 1 + gst-libs/gst/gl/gstglbuffer.c | 1 + gst-libs/gst/gl/gstglbufferpool.c | 1 + gst-libs/gst/gl/gstglcolorconvert.c | 3 ++- gst-libs/gst/gl/gstglcontext.c | 3 ++- gst-libs/gst/gl/gstgldisplay.c | 3 ++- gst-libs/gst/gl/gstglframebuffer.c | 3 ++- gst-libs/gst/gl/gstglmemory.c | 1 + gst-libs/gst/gl/gstglmemorypbo.c | 1 + gst-libs/gst/gl/gstgloverlaycompositor.c | 3 +++ gst-libs/gst/gl/gstglrenderbuffer.c | 1 + gst-libs/gst/gl/gstglshader.c | 1 + gst-libs/gst/gl/gstglslstage.c | 10 +++++----- gst-libs/gst/gl/gstglupload.c | 4 +++- gst-libs/gst/gl/gstglviewconvert.c | 9 +++++++-- gst-libs/gst/gl/gstglwindow.c | 7 ++++++- gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c | 1 + gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c | 7 ++++++- gst-libs/gst/gl/wayland/gstgldisplay_wayland.c | 2 ++ gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c | 7 ++++++- gst-libs/gst/gl/win32/gstglcontext_wgl.c | 7 ++++++- gst-libs/gst/gl/win32/gstglwindow_win32.c | 7 ++++++- gst-libs/gst/gl/x11/gstglcontext_glx.c | 7 ++++++- gst-libs/gst/gl/x11/gstgldisplay_x11.c | 2 ++ gst-libs/gst/gl/x11/gstglwindow_x11.c | 7 ++++++- 34 files changed, 134 insertions(+), 28 deletions(-) diff --git a/gst-libs/gst/gl/android/gstglwindow_android_egl.c b/gst-libs/gst/gl/android/gstglwindow_android_egl.c index af0ec1a7fe..4e7ded80ab 100644 --- a/gst-libs/gst/gl/android/gstglwindow_android_egl.c +++ b/gst-libs/gst/gl/android/gstglwindow_android_egl.c @@ -69,13 +69,18 @@ gst_gl_window_android_egl_init (GstGLWindowAndroidEGL * window) GstGLWindowAndroidEGL * gst_gl_window_android_egl_new (GstGLDisplay * display) { + GstGLWindowAndroidEGL *window; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_EGL) == 0) /* we require an egl display to create android windows */ return NULL; GST_DEBUG ("creating Android EGL window"); - return g_object_new (GST_TYPE_GL_WINDOW_ANDROID_EGL, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_ANDROID_EGL, NULL); + gst_object_ref_sink (window); + + return window; } static void diff --git a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m index daaecaa9b5..1869be4da1 100644 --- a/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m +++ b/gst-libs/gst/gl/cocoa/gstglcontext_cocoa.m @@ -77,11 +77,16 @@ gst_gl_context_cocoa_init (GstGLContextCocoa * context) GstGLContextCocoa * gst_gl_context_cocoa_new (GstGLDisplay * display) { + GstGLContextCocoa *context; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_COCOA) == 0) /* we require an cocoa display to create CGL contexts */ return NULL; - return g_object_new (GST_TYPE_GL_CONTEXT_COCOA, NULL); + context = g_object_new (GST_TYPE_GL_CONTEXT_COCOA, NULL); + gst_object_ref_sink (context); + + return context; } struct pixel_attr diff --git a/gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m b/gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m index cbdaa7eac4..3fa88e62d8 100644 --- a/gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m +++ b/gst-libs/gst/gl/cocoa/gstgldisplay_cocoa.m @@ -115,6 +115,7 @@ gst_gl_display_cocoa_setup_nsapp (gpointer data) if (NSApp != nil && !singleton) { GstGLDisplayCocoa *ret = g_object_new (GST_TYPE_GL_DISPLAY_COCOA, NULL); + gst_object_ref_sink (ret); g_mutex_unlock (&nsapp_lock); return ret; } @@ -167,6 +168,7 @@ gst_gl_display_cocoa_setup_nsapp (gpointer data) } else { GST_DEBUG ("Create display"); singleton = g_object_new (GST_TYPE_GL_DISPLAY_COCOA, NULL); + gst_object_ref_sink (singletone); } g_mutex_unlock (&nsapp_lock); @@ -223,13 +225,18 @@ gst_gl_display_cocoa_finalize (GObject * object) GstGLDisplayCocoa * gst_gl_display_cocoa_new (void) { + GstGLDisplayCocoa *display; + GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); #ifndef GSTREAMER_GLIB_COCOA_NSAPPLICATION - return gst_gl_display_cocoa_setup_nsapp (NULL); + display = gst_gl_display_cocoa_setup_nsapp (NULL); #else - return g_object_new (GST_TYPE_GL_DISPLAY_COCOA, NULL); + display = g_object_new (GST_TYPE_GL_DISPLAY_COCOA, NULL); + gst_object_ref_sink (display); #endif + + return display; } static guintptr diff --git a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m index 7bc822a7e0..57d7dfeb8b 100644 --- a/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m +++ b/gst-libs/gst/gl/cocoa/gstglwindow_cocoa.m @@ -143,11 +143,16 @@ gst_gl_window_cocoa_finalize (GObject * object) GstGLWindowCocoa * gst_gl_window_cocoa_new (GstGLDisplay * display) { + GstGLWindowCocoa *window; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_COCOA) == 0) /* we require an cocoa display to create CGL windows */ return NULL; - return g_object_new (GST_TYPE_GL_WINDOW_COCOA, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_COCOA, NULL); + gst_object_ref_sink (window); + + return window; } /* Must be called from the main thread */ diff --git a/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.c b/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.c index 4af4ec693d..011f49fdb0 100644 --- a/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.c +++ b/gst-libs/gst/gl/dispmanx/gstglwindow_dispmanx_egl.c @@ -108,13 +108,18 @@ gst_gl_window_dispmanx_egl_init (GstGLWindowDispmanxEGL * window_egl) GstGLWindowDispmanxEGL * gst_gl_window_dispmanx_egl_new (GstGLDisplay * display) { + GstGLWindowDispmanxEGL *window; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_EGL) == 0) /* we require an egl display to create dispmanx windows */ return NULL; GST_DEBUG ("creating Dispmanx EGL window"); - return g_object_new (GST_TYPE_GL_WINDOW_DISPMANX_EGL, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_DISPMANX_EGL, NULL); + gst_object_ref_sink (window); + + return window; } static void diff --git a/gst-libs/gst/gl/eagl/gstglcontext_eagl.m b/gst-libs/gst/gl/eagl/gstglcontext_eagl.m index d7294bab32..412e9ce10b 100644 --- a/gst-libs/gst/gl/eagl/gstglcontext_eagl.m +++ b/gst-libs/gst/gl/eagl/gstglcontext_eagl.m @@ -96,8 +96,13 @@ gst_gl_context_eagl_init (GstGLContextEagl * context) GstGLContextEagl * gst_gl_context_eagl_new (GstGLDisplay * display) { + GstGLContextEagl *context; + /* there isn't actually a display type for eagl yet? */ - return g_object_new (GST_TYPE_GL_CONTEXT_EAGL, NULL); + context = g_object_new (GST_TYPE_GL_CONTEXT_EAGL, NULL); + gst_object_ref_sink (context); + + return context; } void diff --git a/gst-libs/gst/gl/eagl/gstglwindow_eagl.m b/gst-libs/gst/gl/eagl/gstglwindow_eagl.m index fb70c012fd..4923260ff3 100644 --- a/gst-libs/gst/gl/eagl/gstglwindow_eagl.m +++ b/gst-libs/gst/gl/eagl/gstglwindow_eagl.m @@ -103,8 +103,13 @@ gst_gl_window_eagl_finalize (GObject * object) GstGLWindowEagl * gst_gl_window_eagl_new (GstGLDisplay * display) { + GstGLWindowEagl *window; + /* there isn't an eagl display type */ - return g_object_new (GST_TYPE_GL_WINDOW_EAGL, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_EAGL, NULL); + gst_object_ref_sink (window); + + return window; } static guintptr diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c index a8cf2f8891..eabc09c5e4 100644 --- a/gst-libs/gst/gl/egl/gstglcontext_egl.c +++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c @@ -108,9 +108,14 @@ gst_gl_context_egl_init (GstGLContextEGL * context) GstGLContextEGL * gst_gl_context_egl_new (GstGLDisplay * display) { + GstGLContextEGL *context; + /* XXX: display type could theoretically be anything, as long as * eglGetDisplay supports it. */ - return g_object_new (GST_TYPE_GL_CONTEXT_EGL, NULL); + context = g_object_new (GST_TYPE_GL_CONTEXT_EGL, NULL); + gst_object_ref_sink (context); + + return context; } static gboolean diff --git a/gst-libs/gst/gl/egl/gstgldisplay_egl.c b/gst-libs/gst/gl/egl/gstgldisplay_egl.c index 06ddc9bdb8..a2dc98a8e4 100644 --- a/gst-libs/gst/gl/egl/gstgldisplay_egl.c +++ b/gst-libs/gst/gl/egl/gstgldisplay_egl.c @@ -176,6 +176,7 @@ gst_gl_display_egl_new (void) GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); ret = g_object_new (GST_TYPE_GL_DISPLAY_EGL, NULL); + gst_object_ref_sink (ret); ret->display = gst_gl_display_egl_get_from_native (GST_GL_DISPLAY_TYPE_ANY, 0); @@ -206,6 +207,7 @@ gst_gl_display_egl_new_with_egl_display (EGLDisplay display) GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); ret = g_object_new (GST_TYPE_GL_DISPLAY_EGL, NULL); + gst_object_ref_sink (ret); ret->display = display; ret->foreign_display = TRUE; @@ -270,6 +272,7 @@ gst_gl_display_egl_from_gl_display (GstGLDisplay * display) g_return_val_if_fail (display_type != GST_GL_DISPLAY_TYPE_NONE, NULL); ret = g_object_new (GST_TYPE_GL_DISPLAY_EGL, NULL); + gst_object_ref_sink (ret); ret->display = gst_gl_display_egl_get_from_native (display_type, native_display); diff --git a/gst-libs/gst/gl/egl/gstglmemoryegl.c b/gst-libs/gst/gl/egl/gstglmemoryegl.c index 414d76b157..378925f0c2 100644 --- a/gst-libs/gst/gl/egl/gstglmemoryegl.c +++ b/gst-libs/gst/gl/egl/gstglmemoryegl.c @@ -252,6 +252,7 @@ gst_gl_memory_egl_init_once (void) _gl_memory_egl_allocator = g_object_new (GST_TYPE_GL_MEMORY_EGL_ALLOCATOR, NULL); + gst_object_ref_sink (_gl_memory_egl_allocator); /* The allocator is never unreffed */ GST_OBJECT_FLAG_SET (_gl_memory_egl_allocator, diff --git a/gst-libs/gst/gl/gstglbuffer.c b/gst-libs/gst/gl/gstglbuffer.c index 73c4b210a9..5b184d1a64 100644 --- a/gst-libs/gst/gl/gstglbuffer.c +++ b/gst-libs/gst/gl/gstglbuffer.c @@ -461,6 +461,7 @@ gst_gl_buffer_init_once (void) _gl_buffer_allocator = g_object_new (gst_gl_buffer_allocator_get_type (), NULL); + gst_object_ref_sink (_gl_buffer_allocator); /* The allocator is never unreffed */ GST_OBJECT_FLAG_SET (_gl_buffer_allocator, GST_OBJECT_FLAG_MAY_BE_LEAKED); diff --git a/gst-libs/gst/gl/gstglbufferpool.c b/gst-libs/gst/gl/gstglbufferpool.c index e886557acf..53d3b66d9a 100644 --- a/gst-libs/gst/gl/gstglbufferpool.c +++ b/gst-libs/gst/gl/gstglbufferpool.c @@ -310,6 +310,7 @@ gst_gl_buffer_pool_new (GstGLContext * context) GstGLBufferPool *pool; pool = g_object_new (GST_TYPE_GL_BUFFER_POOL, NULL); + gst_object_ref_sink (pool); pool->context = gst_object_ref (context); GST_LOG_OBJECT (pool, "new GL buffer pool for context %" GST_PTR_FORMAT, diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c index 89edb164c6..60ae5cbd43 100644 --- a/gst-libs/gst/gl/gstglcolorconvert.c +++ b/gst-libs/gst/gl/gstglcolorconvert.c @@ -469,7 +469,7 @@ gst_gl_color_convert_init (GstGLColorConvert * convert) * gst_gl_color_convert_new: * @context: a #GstGLContext * - * Returns: a new #GstGLColorConvert object + * Returns: (transfer full): a new #GstGLColorConvert object * * Since: 1.4 */ @@ -479,6 +479,7 @@ gst_gl_color_convert_new (GstGLContext * context) GstGLColorConvert *convert; convert = g_object_new (GST_TYPE_GL_COLOR_CONVERT, NULL); + gst_object_ref_sink (convert); convert->context = gst_object_ref (context); diff --git a/gst-libs/gst/gl/gstglcontext.c b/gst-libs/gst/gl/gstglcontext.c index 9af5e1cc8c..5550477a73 100644 --- a/gst-libs/gst/gl/gstglcontext.c +++ b/gst-libs/gst/gl/gstglcontext.c @@ -382,7 +382,7 @@ gst_gl_context_new (GstGLDisplay * display) * represented by @handle stays alive while the returned #GstGLContext is * active. * - * Returns: a #GstGLContext wrapping @handle + * Returns: (transfer full): a #GstGLContext wrapping @handle * * Since: 1.4 */ @@ -402,6 +402,7 @@ gst_gl_context_new_wrapped (GstGLDisplay * display, guintptr handle, NULL); context_wrap = g_object_new (GST_TYPE_GL_WRAPPED_CONTEXT, NULL); + gst_object_ref_sink (context_wrap); if (!context_wrap) { /* subclass returned a NULL context */ diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c index b456b1fa47..d7f4a5913b 100644 --- a/gst-libs/gst/gl/gstgldisplay.c +++ b/gst-libs/gst/gl/gstgldisplay.c @@ -323,7 +323,8 @@ gst_gl_display_new (void) "(platform: %s), creating dummy", GST_STR_NULL (user_choice), GST_STR_NULL (platform_choice)); - return g_object_new (GST_TYPE_GL_DISPLAY, NULL); + display = g_object_new (GST_TYPE_GL_DISPLAY, NULL); + gst_object_ref_sink (display); } return display; diff --git a/gst-libs/gst/gl/gstglframebuffer.c b/gst-libs/gst/gl/gstglframebuffer.c index f6289970f8..ef9bf73268 100644 --- a/gst-libs/gst/gl/gstglframebuffer.c +++ b/gst-libs/gst/gl/gstglframebuffer.c @@ -166,7 +166,7 @@ gst_gl_framebuffer_finalize (GObject * object) * * Returns: a new #GstGLFramebuffer * - * Since: 1.10 + * Since: (transfer full): 1.10 */ GstGLFramebuffer * gst_gl_framebuffer_new (GstGLContext * context) @@ -187,6 +187,7 @@ gst_gl_framebuffer_new (GstGLContext * context) fb = g_object_new (GST_TYPE_GL_FRAMEBUFFER, NULL); fb->context = gst_object_ref (context); gl->GenFramebuffers (1, &fb->fbo_id); + gst_object_ref_sink (fb); return fb; } diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c index 343a8598fb..2425b3878f 100644 --- a/gst-libs/gst/gl/gstglmemory.c +++ b/gst-libs/gst/gl/gstglmemory.c @@ -1096,6 +1096,7 @@ gst_gl_memory_init_once (void) "OpenGL Base Texture Memory"); _gl_memory_allocator = g_object_new (GST_TYPE_GL_MEMORY_ALLOCATOR, NULL); + gst_object_ref_sink (_gl_memory_allocator); gst_allocator_register (GST_GL_MEMORY_ALLOCATOR_NAME, _gl_memory_allocator); diff --git a/gst-libs/gst/gl/gstglmemorypbo.c b/gst-libs/gst/gl/gstglmemorypbo.c index 4ae7125a34..a7cf042f2c 100644 --- a/gst-libs/gst/gl/gstglmemorypbo.c +++ b/gst-libs/gst/gl/gstglmemorypbo.c @@ -835,6 +835,7 @@ gst_gl_memory_pbo_init_once (void) GST_DEBUG_CATEGORY_INIT (GST_CAT_GL_MEMORY, "glmemory", 0, "OpenGL Memory"); _gl_allocator = g_object_new (GST_TYPE_GL_MEMORY_PBO_ALLOCATOR, NULL); + gst_object_ref_sink (_gl_allocator); /* The allocator is never unreffed */ GST_OBJECT_FLAG_SET (_gl_allocator, GST_OBJECT_FLAG_MAY_BE_LEAKED); diff --git a/gst-libs/gst/gl/gstgloverlaycompositor.c b/gst-libs/gst/gl/gstgloverlaycompositor.c index 16c123cd0c..2572110978 100644 --- a/gst-libs/gst/gl/gstgloverlaycompositor.c +++ b/gst-libs/gst/gl/gstgloverlaycompositor.c @@ -474,6 +474,8 @@ gst_gl_overlay_compositor_new (GstGLContext * context) GstGLOverlayCompositor *compositor = g_object_new (GST_TYPE_GL_OVERLAY_COMPOSITOR, NULL); + gst_object_ref_sink (compositor); + compositor->context = gst_object_ref (context); gst_gl_context_thread_add (compositor->context, @@ -575,6 +577,7 @@ gst_gl_overlay_compositor_upload_overlays (GstGLOverlayCompositor * compositor, GstGLCompositionOverlay *overlay = gst_gl_composition_overlay_new (compositor->context, rectangle, compositor->position_attrib, compositor->texcoord_attrib); + gst_object_ref_sink (overlay); gst_gl_composition_overlay_upload (overlay, buf); diff --git a/gst-libs/gst/gl/gstglrenderbuffer.c b/gst-libs/gst/gl/gstglrenderbuffer.c index 72f95f853d..c3e36f6b54 100644 --- a/gst-libs/gst/gl/gstglrenderbuffer.c +++ b/gst-libs/gst/gl/gstglrenderbuffer.c @@ -317,6 +317,7 @@ gst_gl_renderbuffer_init_once (void) _gl_renderbuffer_allocator = g_object_new (GST_TYPE_GL_RENDERBUFFER_ALLOCATOR, NULL); + gst_object_ref_sink (_gl_renderbuffer_allocator); GST_OBJECT_FLAG_SET (_gl_renderbuffer_allocator, GST_OBJECT_FLAG_MAY_BE_LEAKED); diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c index ab348f1632..c665296eba 100644 --- a/gst-libs/gst/gl/gstglshader.c +++ b/gst-libs/gst/gl/gstglshader.c @@ -235,6 +235,7 @@ _new_with_stages_va_list (GstGLContext * context, GError ** error, g_return_val_if_fail (GST_IS_GL_CONTEXT (context), NULL); shader = g_object_new (GST_TYPE_GL_SHADER, NULL); + gst_object_ref_sink (shader); shader->context = gst_object_ref (context); while ((stage = va_arg (varargs, GstGLSLStage *))) { diff --git a/gst-libs/gst/gl/gstglslstage.c b/gst-libs/gst/gl/gstglslstage.c index 60a5af7a5d..d40a88b7e7 100644 --- a/gst-libs/gst/gl/gstglslstage.c +++ b/gst-libs/gst/gl/gstglslstage.c @@ -196,7 +196,7 @@ _ensure_shader (GstGLSLStage * stage) * @n_strings: the number of strings in @str * @str: an array of strings concatted together to produce a shader * - * Returns: (transfer full): a new #GstGLSLStage of the specified @type + * Returns: (transfer floating): a new #GstGLSLStage of the specified @type * * Since: 1.8 */ @@ -235,7 +235,7 @@ gst_glsl_stage_new_with_strings (GstGLContext * context, guint type, * @profile: the #GstGLSLProfile * @str: a shader string * - * Returns: (transfer full): a new #GstGLSLStage of the specified @type + * Returns: (transfer floating): a new #GstGLSLStage of the specified @type * * Since: 1.8 */ @@ -252,7 +252,7 @@ gst_glsl_stage_new_with_string (GstGLContext * context, guint type, * @context: a #GstGLContext * @type: the GL enum shader stage type * - * Returns: (transfer full): a new #GstGLSLStage of the specified @type + * Returns: (transfer floating): a new #GstGLSLStage of the specified @type * * Since: 1.8 */ @@ -267,7 +267,7 @@ gst_glsl_stage_new (GstGLContext * context, guint type) * gst_glsl_stage_new_with_default_vertex: * @context: a #GstGLContext * - * Returns: (transfer full): a new #GstGLSLStage with the default vertex shader + * Returns: (transfer floating): a new #GstGLSLStage with the default vertex shader * * Since: 1.8 */ @@ -284,7 +284,7 @@ gst_glsl_stage_new_default_vertex (GstGLContext * context) * gst_glsl_stage_new_with_default_fragment: * @context: a #GstGLContext * - * Returns: (transfer full): a new #GstGLSLStage with the default fragment shader + * Returns: (transfer floating): a new #GstGLSLStage with the default fragment shader * * Since: 1.8 */ diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c index 2b51bfad84..810f4fa1ae 100644 --- a/gst-libs/gst/gl/gstglupload.c +++ b/gst-libs/gst/gl/gstglupload.c @@ -1561,7 +1561,7 @@ gst_gl_upload_init (GstGLUpload * upload) * gst_gl_upload_new: * @context: a #GstGLContext * - * Returns: a new #GstGLUpload object + * Returns: (transfer full): a new #GstGLUpload object */ GstGLUpload * gst_gl_upload_new (GstGLContext * context) @@ -1569,6 +1569,8 @@ gst_gl_upload_new (GstGLContext * context) GstGLUpload *upload = g_object_new (GST_TYPE_GL_UPLOAD, NULL); gint i, n; + gst_object_ref_sink (upload); + if (context) gst_gl_upload_set_context (upload, context); else diff --git a/gst-libs/gst/gl/gstglviewconvert.c b/gst-libs/gst/gl/gstglviewconvert.c index acb9c85048..6ba48b6cc0 100644 --- a/gst-libs/gst/gl/gstglviewconvert.c +++ b/gst-libs/gst/gl/gstglviewconvert.c @@ -336,14 +336,19 @@ gst_gl_view_convert_finalize (GObject * object) /** * gst_gl_view_convert_new: * - * Returns: a new #GstGLViewConvert + * Returns: (transfer full): a new #GstGLViewConvert * * Since: 1.6 */ GstGLViewConvert * gst_gl_view_convert_new (void) { - return g_object_new (GST_TYPE_GL_VIEW_CONVERT, NULL); + GstGLViewConvert *convert; + + convert = g_object_new (GST_TYPE_GL_VIEW_CONVERT, NULL); + gst_object_ref_sink (convert); + + return convert; } /** diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c index c1dae2d17d..e7947bf048 100644 --- a/gst-libs/gst/gl/gstglwindow.c +++ b/gst-libs/gst/gl/gstglwindow.c @@ -1014,5 +1014,10 @@ gst_gl_dummy_window_init (GstGLDummyWindow * dummy) GstGLDummyWindow * gst_gl_dummy_window_new (void) { - return g_object_new (gst_gl_dummy_window_get_type (), NULL); + GstGLDummyWindow *window; + + window = g_object_new (gst_gl_dummy_window_get_type (), NULL); + gst_object_ref_sink (window); + + return window; } diff --git a/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c b/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c index 6820203180..48815e52fa 100644 --- a/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c +++ b/gst-libs/gst/gl/viv-fb/gstgldisplay_viv_fb.c @@ -83,6 +83,7 @@ gst_gl_display_viv_fb_new (gint disp_idx) GST_DEBUG ("creating Vivante FB EGL display %d", disp_idx); display = g_object_new (GST_TYPE_GL_DISPLAY_VIV_FB, NULL); + gst_object_ref_sink (display); display->disp_idx = disp_idx; display->display = fbGetDisplayByIndex (display->disp_idx); if (!display->display) { diff --git a/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c b/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c index f8fb638922..8ce25eed38 100644 --- a/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c +++ b/gst-libs/gst/gl/viv-fb/gstglwindow_viv_fb_egl.c @@ -72,12 +72,17 @@ gst_gl_window_viv_fb_egl_init (GstGLWindowVivFBEGL * window) GstGLWindowVivFBEGL * gst_gl_window_viv_fb_egl_new (GstGLDisplay * display) { + GstGLWindowVivFBEGL *window; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_VIV_FB) == 0) /* we require a Vivante FB display to create windows */ return NULL; - return g_object_new (GST_TYPE_GL_WINDOW_VIV_FB_EGL, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_VIV_FB_EGL, NULL); + gst_object_ref_sink (window); + + return window; } static void diff --git a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c index e466fb4dd2..a7ca203e61 100644 --- a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c +++ b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c @@ -116,6 +116,7 @@ gst_gl_display_wayland_new (const gchar * name) GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); ret = g_object_new (GST_TYPE_GL_DISPLAY_WAYLAND, NULL); + gst_object_ref_sink (ret); ret->display = wl_display_connect (name); if (!ret->display) { @@ -151,6 +152,7 @@ gst_gl_display_wayland_new_with_display (struct wl_display * display) GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); ret = g_object_new (GST_TYPE_GL_DISPLAY_WAYLAND, NULL); + gst_object_ref_sink (ret); ret->display = display; ret->foreign_display = TRUE; diff --git a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c index 933ddfe41d..7d99a55610 100644 --- a/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c +++ b/gst-libs/gst/gl/wayland/gstglwindow_wayland_egl.c @@ -353,6 +353,8 @@ gst_gl_window_wayland_egl_init (GstGLWindowWaylandEGL * window) GstGLWindowWaylandEGL * gst_gl_window_wayland_egl_new (GstGLDisplay * display) { + GstGLWindowWaylandEGL *window; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_WAYLAND) == 0) /* we require a wayland display to create wayland surfaces */ @@ -360,7 +362,10 @@ gst_gl_window_wayland_egl_new (GstGLDisplay * display) GST_DEBUG ("creating Wayland EGL window"); - return g_object_new (GST_TYPE_GL_WINDOW_WAYLAND_EGL, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_WAYLAND_EGL, NULL); + gst_object_ref_sink (window); + + return window; } static void diff --git a/gst-libs/gst/gl/win32/gstglcontext_wgl.c b/gst-libs/gst/gl/win32/gstglcontext_wgl.c index 53ebb8092d..91cea8fed7 100644 --- a/gst-libs/gst/gl/win32/gstglcontext_wgl.c +++ b/gst-libs/gst/gl/win32/gstglcontext_wgl.c @@ -98,12 +98,17 @@ gst_gl_context_wgl_init (GstGLContextWGL * context_wgl) GstGLContextWGL * gst_gl_context_wgl_new (GstGLDisplay * display) { + GstGLContextWGL *context; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_WIN32) == 0) /* we require an win32 display handle to create WGL contexts */ return NULL; - return g_object_new (GST_TYPE_GL_CONTEXT_WGL, NULL); + context = g_object_new (GST_TYPE_GL_CONTEXT_WGL, NULL); + gst_object_ref_sink (context); + + return context; } static HGLRC diff --git a/gst-libs/gst/gl/win32/gstglwindow_win32.c b/gst-libs/gst/gl/win32/gstglwindow_win32.c index dd11745444..8d33ea443e 100644 --- a/gst-libs/gst/gl/win32/gstglwindow_win32.c +++ b/gst-libs/gst/gl/win32/gstglwindow_win32.c @@ -93,12 +93,17 @@ gst_gl_window_win32_init (GstGLWindowWin32 * window) GstGLWindowWin32 * gst_gl_window_win32_new (GstGLDisplay * display) { + GstGLWindowWin32 *window; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_WIN32) == 0) /* we require an win32 display to create win32 windows */ return NULL; - return g_object_new (GST_TYPE_GL_WINDOW_WIN32, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_WIN32, NULL); + gst_object_ref_sink (window); + + return window; } static void diff --git a/gst-libs/gst/gl/x11/gstglcontext_glx.c b/gst-libs/gst/gl/x11/gstglcontext_glx.c index f59a0d3fe5..795cd9b981 100644 --- a/gst-libs/gst/gl/x11/gstglcontext_glx.c +++ b/gst-libs/gst/gl/x11/gstglcontext_glx.c @@ -112,11 +112,16 @@ gst_gl_context_glx_init (GstGLContextGLX * context) GstGLContextGLX * gst_gl_context_glx_new (GstGLDisplay * display) { + GstGLContextGLX *context; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_X11) == 0) /* we require an x11 display handle to create GLX contexts */ return NULL; - return g_object_new (GST_TYPE_GL_CONTEXT_GLX, NULL); + context = g_object_new (GST_TYPE_GL_CONTEXT_GLX, NULL); + gst_object_ref_sink (context); + + return context; } static inline void diff --git a/gst-libs/gst/gl/x11/gstgldisplay_x11.c b/gst-libs/gst/gl/x11/gstgldisplay_x11.c index 92101d45e0..c19d7a61a2 100644 --- a/gst-libs/gst/gl/x11/gstgldisplay_x11.c +++ b/gst-libs/gst/gl/x11/gstgldisplay_x11.c @@ -88,6 +88,7 @@ gst_gl_display_x11_new (const gchar * name) GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); ret = g_object_new (GST_TYPE_GL_DISPLAY_X11, NULL); + gst_object_ref_sink (ret); ret->name = g_strdup (name); ret->display = XOpenDisplay (ret->name); @@ -131,6 +132,7 @@ gst_gl_display_x11_new_with_display (Display * display) GST_DEBUG_CATEGORY_GET (gst_gl_display_debug, "gldisplay"); ret = g_object_new (GST_TYPE_GL_DISPLAY_X11, NULL); + gst_object_ref_sink (ret); ret->name = g_strdup (DisplayString (display)); ret->display = display; diff --git a/gst-libs/gst/gl/x11/gstglwindow_x11.c b/gst-libs/gst/gl/x11/gstglwindow_x11.c index 4675122f29..0c83539731 100644 --- a/gst-libs/gst/gl/x11/gstglwindow_x11.c +++ b/gst-libs/gst/gl/x11/gstglwindow_x11.c @@ -123,6 +123,8 @@ gst_gl_window_x11_init (GstGLWindowX11 * window) GstGLWindowX11 * gst_gl_window_x11_new (GstGLDisplay * display) { + GstGLWindowX11 *window; + if ((gst_gl_display_get_handle_type (display) & GST_GL_DISPLAY_TYPE_X11) == GST_GL_DISPLAY_TYPE_NONE) { GST_INFO ("Wrong display type %u for this window type %u", display->type, @@ -130,7 +132,10 @@ gst_gl_window_x11_new (GstGLDisplay * display) return NULL; } - return g_object_new (GST_TYPE_GL_WINDOW_X11, NULL); + window = g_object_new (GST_TYPE_GL_WINDOW_X11, NULL); + gst_object_ref_sink (window); + + return window; } gboolean