[vlc-devel] [PATCH 2/2] egl: tune eglTerminate behaviour with display_reference availability
Rémi Denis-Courmont
remi at remlab.net
Wed Sep 25 10:43:20 CEST 2019
Hi,
If it's a compile-time constant, better keep it a compile time constant than store it in memory IMO.
Le 25 septembre 2019 11:24:40 GMT+03:00, Alexandre Janniaux <ajanni at videolabs.io> a écrit :
>EGL_KHR_display_reference specifies the behaviour of eglTerminate
>with regards to reference counting. In addition, it specifies that
>the default is that reference counting is disabled X11 or wayland,
>but enabled on Android.
>
>As we can prevent EGL GL provider from terminating its state, it
>makes sure the state is correctly refcounted in any case.
>---
> modules/video_output/opengl/egl.c | 23 +++++++++++++++++++++--
> 1 file changed, 21 insertions(+), 2 deletions(-)
>
>diff --git a/modules/video_output/opengl/egl.c
>b/modules/video_output/opengl/egl.c
>index 6d6ab05738f..dd8e0cf9887 100644
>--- a/modules/video_output/opengl/egl.c
>+++ b/modules/video_output/opengl/egl.c
>@@ -58,6 +58,7 @@ typedef struct vlc_gl_sys_t
> PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR;
>
> bool prevent_terminate;
>+ bool has_display_reference;
> } vlc_gl_sys_t;
>
> static int MakeCurrent (vlc_gl_t *gl)
>@@ -188,8 +189,10 @@ static void Close(vlc_gl_t *gl)
> if (sys->surface != EGL_NO_SURFACE)
> eglDestroySurface(sys->display, sys->surface);
>
>- /* Kill the egl state only if we own it. */
>- if (!sys->prevent_terminate)
>+ /* If has_display_reference == true, sys->display is
>refcounted by
>+ * eglInitialize and eglTerminate, so call it anyway.
>+ * Otherwise, kill the egl state only if we own it. */
>+ if (sys->has_display_reference || !sys->prevent_terminate)
> eglTerminate(sys->display);
> eglReleaseThread();
> }
>@@ -224,6 +227,7 @@ static int Open(vlc_gl_t *gl, const struct gl_api
>*api,
> sys->surface = EGL_NO_SURFACE;
> sys->eglCreateImageKHR = NULL;
> sys->eglDestroyImageKHR = NULL;
>+ sys->has_display_reference = false;
>
> vout_window_t *wnd = gl->surface;
>EGLSurface (*createSurface)(EGLDisplay, EGLConfig, void *, const EGLint
>*)
>@@ -234,6 +238,21 @@ static int Open(vlc_gl_t *gl, const struct gl_api
>*api,
> * the associated EGL display. */
> sys->prevent_terminate = var_GetBool(wnd, "egl-prevent-terminate");
>
>+ /* See
>https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_display_reference.txt
>*/
>+ /* If EGL_KHR_display_reference is not present, eglTerminate will
>+ * terminate the EGLDisplay which is shared between all clients.
>+ * This extension turns the behaviour of eglTerminate into
>reference
>+ * counting mode and prevents this issues.
>+ * TODO: currently, we're using the default behaviour of this
>extension. */
>+#ifdef USE_PLATFORM_ANDROID
>+ sys->has_display_reference = true; /* enforced by Android */
>+#else
>+ /* If we don't conditionnaly add the EGL_TRACK_REFERENCE_KHR,
>EGL_TRUE
>+ * parameter to display query parameters, the default is false for
>other
>+ * platforms. */
>+ sys->has_display_reference = false;
>+#endif
>+
> #ifdef USE_PLATFORM_X11
> sys->x11 = NULL;
>
>--
>2.23.0
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel
--
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20190925/adc3bea5/attachment.html>
More information about the vlc-devel
mailing list