Revert "gstgldisplay: Add public foreign_display property"
authorMatthew Waters <matthew@centricular.com>
Thu, 16 Jul 2020 06:31:28 +0000 (16:31 +1000)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 20 Jul 2020 05:59:14 +0000 (05:59 +0000)
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>

gst-libs/gst/gl/egl/gstgldisplay_egl.c
gst-libs/gst/gl/gstgldisplay.c
gst-libs/gst/gl/gstgldisplay.h
gst-libs/gst/gl/wayland/gstgldisplay_wayland.c
gst-libs/gst/gl/x11/gstgldisplay_x11.c

index 942ee57..8491165 100644 (file)
@@ -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;
-}
index 8c9b136..5bf9fc5 100644 (file)
@@ -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
index 33cdda7..c83b07a 100644 (file)
@@ -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
index 93eb83c..e1f406f 100644 (file)
@@ -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;
-}
index d051704..9a8bf1f 100644 (file)
@@ -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)
 {