diff options
-rw-r--r-- | ext/eglgles/gstegladaptation_egl.c | 2 | ||||
-rw-r--r-- | gst-libs/gst/egl/egl.c | 8 | ||||
-rw-r--r-- | gst-libs/gst/egl/egl.h | 2 |
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); |