From e762f1b376ba8dcc191d0850903ee0976041242e Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Thu, 16 Jul 2020 16:31:28 +1000 Subject: [PATCH] Revert "gstgldisplay: Add public foreign_display property" This introduced a possible regression where the EGL display connection could be leaked when a foreign native display (x11, wayland, etc) could create a non-foreign EGL display that would never be destroyed. The underlying problem needed to be solved in a different way. See https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/issues/640 for more details. This reverts commit 2e686b0dad9700b10d91da5e91f34849fa7d32ae. Part-of: --- gst-libs/gst/gl/egl/gstgldisplay_egl.c | 13 ------------ gst-libs/gst/gl/gstgldisplay.c | 29 -------------------------- gst-libs/gst/gl/gstgldisplay.h | 5 +---- gst-libs/gst/gl/wayland/gstgldisplay_wayland.c | 10 --------- gst-libs/gst/gl/x11/gstgldisplay_x11.c | 9 -------- 5 files changed, 1 insertion(+), 65 deletions(-) diff --git a/gst-libs/gst/gl/egl/gstgldisplay_egl.c b/gst-libs/gst/gl/egl/gstgldisplay_egl.c index 942ee57..8491165 100644 --- a/gst-libs/gst/gl/egl/gstgldisplay_egl.c +++ b/gst-libs/gst/gl/egl/gstgldisplay_egl.c @@ -70,7 +70,6 @@ G_DEFINE_TYPE (GstGLDisplayEGL, gst_gl_display_egl, GST_TYPE_GL_DISPLAY); static void gst_gl_display_egl_finalize (GObject * object); static guintptr gst_gl_display_egl_get_handle (GstGLDisplay * display); -static gboolean gst_gl_display_egl_get_foreign_display (GstGLDisplay * display); static void init_debug (void) @@ -89,8 +88,6 @@ gst_gl_display_egl_class_init (GstGLDisplayEGLClass * klass) { GST_GL_DISPLAY_CLASS (klass)->get_handle = GST_DEBUG_FUNCPTR (gst_gl_display_egl_get_handle); - GST_GL_DISPLAY_CLASS (klass)->get_foreign_display = - GST_DEBUG_FUNCPTR (gst_gl_display_egl_get_foreign_display); G_OBJECT_CLASS (klass)->finalize = gst_gl_display_egl_finalize; } @@ -327,7 +324,6 @@ gst_gl_display_egl_from_gl_display (GstGLDisplay * display) GstGLDisplayEGL *ret; GstGLDisplayType display_type; guintptr native_display; - gboolean foreign_display; g_return_val_if_fail (GST_IS_GL_DISPLAY (display), NULL); @@ -353,7 +349,6 @@ gst_gl_display_egl_from_gl_display (GstGLDisplay * display) display_type = gst_gl_display_get_handle_type (display); native_display = gst_gl_display_get_handle (display); - foreign_display = gst_gl_display_get_foreign_display (display); g_return_val_if_fail (native_display != 0, NULL); g_return_val_if_fail (display_type != GST_GL_DISPLAY_TYPE_NONE, NULL); @@ -363,14 +358,12 @@ gst_gl_display_egl_from_gl_display (GstGLDisplay * display) ret->display = gst_gl_display_egl_get_from_native (display_type, native_display); - ret->foreign_display = foreign_display; if (!ret->display) { GST_WARNING_OBJECT (ret, "failed to get EGLDisplay from native display"); gst_object_unref (ret); return NULL; } - g_object_set_data_full (G_OBJECT (display), GST_GL_DISPLAY_EGL_NAME, gst_object_ref (ret), (GDestroyNotify) gst_object_unref); @@ -382,9 +375,3 @@ gst_gl_display_egl_get_handle (GstGLDisplay * display) { return (guintptr) GST_GL_DISPLAY_EGL (display)->display; } - -static gboolean -gst_gl_display_egl_get_foreign_display (GstGLDisplay * display) -{ - return GST_GL_DISPLAY_EGL (display)->foreign_display; -} diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c index 8c9b136..5bf9fc5 100644 --- a/gst-libs/gst/gl/gstgldisplay.c +++ b/gst-libs/gst/gl/gstgldisplay.c @@ -95,8 +95,6 @@ static guint gst_gl_display_signals[LAST_SIGNAL] = { 0 }; static void gst_gl_display_dispose (GObject * object); static void gst_gl_display_finalize (GObject * object); static guintptr gst_gl_display_default_get_handle (GstGLDisplay * display); -static gboolean gst_gl_display_default_get_foreign_display (GstGLDisplay * - display); static GstGLWindow *gst_gl_display_default_create_window (GstGLDisplay * display); @@ -178,7 +176,6 @@ gst_gl_display_class_init (GstGLDisplayClass * klass) GST_TYPE_GL_CONTEXT); klass->get_handle = gst_gl_display_default_get_handle; - klass->get_foreign_display = gst_gl_display_default_get_foreign_display; klass->create_window = gst_gl_display_default_create_window; G_OBJECT_CLASS (klass)->finalize = gst_gl_display_finalize; @@ -375,32 +372,6 @@ gst_gl_display_default_get_handle (GstGLDisplay * display) } /** - * gst_gl_display_get_foreign_display: - * @display: a #GstGLDisplay - * - * Returns: whether the context belongs to a foreign display - * - * Since: 1.18 - */ -gboolean -gst_gl_display_get_foreign_display (GstGLDisplay * display) -{ - GstGLDisplayClass *klass; - - g_return_val_if_fail (GST_IS_GL_DISPLAY (display), FALSE); - klass = GST_GL_DISPLAY_GET_CLASS (display); - g_return_val_if_fail (klass->get_foreign_display != NULL, 0); - - return klass->get_foreign_display (display); -} - -static gboolean -gst_gl_display_default_get_foreign_display (GstGLDisplay * display) -{ - return FALSE; -} - -/** * gst_gl_display_filter_gl_api: * @display: a #GstGLDisplay * @gl_api: a #GstGLAPI to filter with diff --git a/gst-libs/gst/gl/gstgldisplay.h b/gst-libs/gst/gl/gstgldisplay.h index 33cdda7..c83b07a 100644 --- a/gst-libs/gst/gl/gstgldisplay.h +++ b/gst-libs/gst/gl/gstgldisplay.h @@ -97,10 +97,9 @@ struct _GstGLDisplayClass guintptr (*get_handle) (GstGLDisplay * display); GstGLWindow * (*create_window) (GstGLDisplay * display); - gboolean (*get_foreign_display) (GstGLDisplay * display); /*< private >*/ - gpointer _padding[GST_PADDING-1]; + gpointer _padding[GST_PADDING]; }; GST_GL_API @@ -114,8 +113,6 @@ guintptr gst_gl_display_get_handle (GstGLDisplay * display); GST_GL_API GstGLDisplayType gst_gl_display_get_handle_type (GstGLDisplay * display); GST_GL_API -gboolean gst_gl_display_get_foreign_display (GstGLDisplay * display); -GST_GL_API void gst_gl_display_filter_gl_api (GstGLDisplay * display, GstGLAPI gl_api); GST_GL_API diff --git a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c index 93eb83c..e1f406f 100644 --- a/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c +++ b/gst-libs/gst/gl/wayland/gstgldisplay_wayland.c @@ -49,16 +49,12 @@ G_DEFINE_TYPE_WITH_PRIVATE (GstGLDisplayWayland, gst_gl_display_wayland, static void gst_gl_display_wayland_finalize (GObject * object); static guintptr gst_gl_display_wayland_get_handle (GstGLDisplay * display); -static gboolean gst_gl_display_wayland_get_foreign_display (GstGLDisplay * - display); static void gst_gl_display_wayland_class_init (GstGLDisplayWaylandClass * klass) { GST_GL_DISPLAY_CLASS (klass)->get_handle = GST_DEBUG_FUNCPTR (gst_gl_display_wayland_get_handle); - GST_GL_DISPLAY_CLASS (klass)->get_foreign_display = - GST_DEBUG_FUNCPTR (gst_gl_display_wayland_get_foreign_display); G_OBJECT_CLASS (klass)->finalize = gst_gl_display_wayland_finalize; } @@ -154,9 +150,3 @@ gst_gl_display_wayland_get_handle (GstGLDisplay * display) { return (guintptr) GST_GL_DISPLAY_WAYLAND (display)->display; } - -static gboolean -gst_gl_display_wayland_get_foreign_display (GstGLDisplay * display) -{ - return GST_GL_DISPLAY_WAYLAND (display)->foreign_display; -} diff --git a/gst-libs/gst/gl/x11/gstgldisplay_x11.c b/gst-libs/gst/gl/x11/gstgldisplay_x11.c index d051704..9a8bf1f 100644 --- a/gst-libs/gst/gl/x11/gstgldisplay_x11.c +++ b/gst-libs/gst/gl/x11/gstgldisplay_x11.c @@ -44,7 +44,6 @@ G_DEFINE_TYPE (GstGLDisplayX11, gst_gl_display_x11, GST_TYPE_GL_DISPLAY); static void gst_gl_display_x11_finalize (GObject * object); static guintptr gst_gl_display_x11_get_handle (GstGLDisplay * display); -static gboolean gst_gl_display_x11_get_foreign_display (GstGLDisplay * display); G_GNUC_INTERNAL gboolean gst_gl_display_x11_handle_event (GstGLDisplayX11 * display_x11); @@ -57,8 +56,6 @@ gst_gl_display_x11_class_init (GstGLDisplayX11Class * klass) { GST_GL_DISPLAY_CLASS (klass)->get_handle = GST_DEBUG_FUNCPTR (gst_gl_display_x11_get_handle); - GST_GL_DISPLAY_CLASS (klass)->get_foreign_display = - GST_DEBUG_FUNCPTR (gst_gl_display_x11_get_foreign_display); G_OBJECT_CLASS (klass)->finalize = gst_gl_display_x11_finalize; } @@ -171,12 +168,6 @@ gst_gl_display_x11_get_handle (GstGLDisplay * display) return (guintptr) GST_GL_DISPLAY_X11 (display)->display; } -static gboolean -gst_gl_display_x11_get_foreign_display (GstGLDisplay * display) -{ - return GST_GL_DISPLAY_X11 (display)->foreign_display; -} - static int _compare_xcb_window (GstGLWindowX11 * window_x11, xcb_window_t * window_id) { -- 2.7.4