summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2020-07-16 16:31:28 +1000
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>2020-07-20 05:59:14 +0000
commite762f1b376ba8dcc191d0850903ee0976041242e (patch)
tree4607dc73d1b3b7f330fc306f70b320295d3d567d
parentaa4bea913b6fb0c5cb48796acdf2bd0ef33c3453 (diff)
downloadgstreamer-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.c13
-rw-r--r--gst-libs/gst/gl/gstgldisplay.c29
-rw-r--r--gst-libs/gst/gl/gstgldisplay.h5
-rw-r--r--gst-libs/gst/gl/wayland/gstgldisplay_wayland.c10
-rw-r--r--gst-libs/gst/gl/x11/gstgldisplay_x11.c9
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)
{