diff options
author | Matthew Waters <matthew@centricular.com> | 2020-07-16 16:31:28 +1000 |
---|---|---|
committer | GStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2020-07-20 05:59:14 +0000 |
commit | e762f1b376ba8dcc191d0850903ee0976041242e (patch) | |
tree | 4607dc73d1b3b7f330fc306f70b320295d3d567d | |
parent | aa4bea913b6fb0c5cb48796acdf2bd0ef33c3453 (diff) | |
download | gstreamer-plugins-base-e762f1b376ba8dcc191d0850903ee0976041242e.tar.gz |
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/758>
-rw-r--r-- | gst-libs/gst/gl/egl/gstgldisplay_egl.c | 13 | ||||
-rw-r--r-- | gst-libs/gst/gl/gstgldisplay.c | 29 | ||||
-rw-r--r-- | gst-libs/gst/gl/gstgldisplay.h | 5 | ||||
-rw-r--r-- | gst-libs/gst/gl/wayland/gstgldisplay_wayland.c | 10 | ||||
-rw-r--r-- | gst-libs/gst/gl/x11/gstgldisplay_x11.c | 9 |
5 files changed, 1 insertions, 65 deletions
diff --git a/gst-libs/gst/gl/egl/gstgldisplay_egl.c b/gst-libs/gst/gl/egl/gstgldisplay_egl.c index 942ee573d..84911658e 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 8c9b13633..5bf9fc589 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 33cdda710..c83b07ae3 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 93eb83cba..e1f406f94 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 d05170429..9a8bf1f34 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) { |