summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/eglgles/gstegladaptation_egl.c2
-rw-r--r--gst-libs/gst/egl/egl.c8
-rw-r--r--gst-libs/gst/egl/egl.h2
3 files changed, 7 insertions, 5 deletions
diff --git a/ext/eglgles/gstegladaptation_egl.c b/ext/eglgles/gstegladaptation_egl.c
index f54fb11d3..cecbcd4ab 100644
--- a/ext/eglgles/gstegladaptation_egl.c
+++ b/ext/eglgles/gstegladaptation_egl.c
@@ -168,7 +168,7 @@ gst_egl_adaptation_init_egl_display (GstEglAdaptationContext * ctx)
GST_ERROR_OBJECT (ctx->element, "Could not get EGL display connection");
goto HANDLE_ERROR; /* No EGL error is set by eglGetDisplay() */
}
- ctx->display = gst_egl_display_new (display);
+ ctx->display = gst_egl_display_new (display, (GDestroyNotify) eglTerminate);
context = gst_context_new ();
gst_context_set_egl_display (context, ctx->display);
diff --git a/gst-libs/gst/egl/egl.c b/gst-libs/gst/egl/egl.c
index 1c5d04c51..0b0ebcc24 100644
--- a/gst-libs/gst/egl/egl.c
+++ b/gst-libs/gst/egl/egl.c
@@ -328,16 +328,18 @@ struct _GstEGLDisplay
{
EGLDisplay display;
volatile gint refcount;
+ GDestroyNotify destroy_notify;
};
GstEGLDisplay *
-gst_egl_display_new (EGLDisplay display)
+gst_egl_display_new (EGLDisplay display, GDestroyNotify destroy_notify)
{
GstEGLDisplay *gdisplay;
gdisplay = g_slice_new (GstEGLDisplay);
gdisplay->display = display;
gdisplay->refcount = 1;
+ gdisplay->destroy_notify = destroy_notify;
return gdisplay;
}
@@ -358,8 +360,8 @@ gst_egl_display_unref (GstEGLDisplay * display)
g_return_if_fail (display != NULL);
if (g_atomic_int_dec_and_test (&display->refcount)) {
- if (display->display != EGL_NO_DISPLAY)
- eglTerminate (display->display);
+ if (display->destroy_notify)
+ display->destroy_notify (display->display);
g_slice_free (GstEGLDisplay, display);
}
}
diff --git a/gst-libs/gst/egl/egl.h b/gst-libs/gst/egl/egl.h
index fa6464ee4..ebc623322 100644
--- a/gst-libs/gst/egl/egl.h
+++ b/gst-libs/gst/egl/egl.h
@@ -65,7 +65,7 @@ gboolean gst_context_get_egl_display (GstContext * context,
#define GST_TYPE_EGL_DISPLAY (gst_egl_display_get_type())
GType gst_egl_display_get_type (void);
-GstEGLDisplay *gst_egl_display_new (EGLDisplay display);
+GstEGLDisplay *gst_egl_display_new (EGLDisplay display, GDestroyNotify destroy_notify);
GstEGLDisplay *gst_egl_display_ref (GstEGLDisplay * display);
void gst_egl_display_unref (GstEGLDisplay * display);
EGLDisplay gst_egl_display_get (GstEGLDisplay * display);