[vlc-devel] [RFC PATCH] opengl: vaapi: add a way to get the X11 display

Rémi Denis-Courmont remi at remlab.net
Wed Jun 21 09:31:20 CEST 2017


Le 21 juin 2017 10:19:05 GMT+03:00, Thomas Guillem <thomas at gllm.fr> a écrit :
>I forgot to fix the TODO (ugly way to get the X11 Display via EGL) in
>converter_vaapi.c before pushing it.
>
>I think, there are 3 ways to fix this issues:
>
>- What I do in this patch: get the same X11 display that is created by
>x11_egl.
>
>- Just do an other XOpenDisplay(wnd->display.x11) from
>converter_vaapi.c. I
>guess this will safely use the same dpy instance created by x11_egl, no
>?
>
> - have x11_egl saving the X11 dpy in the wmd->display struct
>---
> include/vlc_opengl.h                          |  6 ++++++
> modules/video_output/opengl/converter_vaapi.c | 13 +++----------
> modules/video_output/opengl/egl.c             | 11 +++++++++++
> 3 files changed, 20 insertions(+), 10 deletions(-)
>
>diff --git a/include/vlc_opengl.h b/include/vlc_opengl.h
>index 6642f78554..d536d271d7 100644
>--- a/include/vlc_opengl.h
>+++ b/include/vlc_opengl.h
>@@ -50,6 +50,7 @@ struct vlc_gl_t
>     void (*resize)(vlc_gl_t *, unsigned, unsigned);
>     void (*swap)(vlc_gl_t *);
>     void*(*getProcAddress)(vlc_gl_t *, const char *);
>+    void*(*getNativeDpy)(vlc_gl_t *);
> };
> 
> enum {
>@@ -86,6 +87,11 @@ static inline void *vlc_gl_GetProcAddress(vlc_gl_t
>*gl, const char *name)
>return (gl->getProcAddress != NULL) ? gl->getProcAddress(gl, name) :
>NULL;
> }
> 
>+static inline void *vlc_gl_GetNativeDpy(vlc_gl_t *gl)
>+{
>+    return gl->getNativeDpy != NULL ? gl->getNativeDpy(gl) : NULL;
>+}
>+
> VLC_API vlc_gl_t *vlc_gl_surface_Create(vlc_object_t *,
>                                      const struct vout_window_cfg_t *,
>                                     struct vout_window_t **) VLC_USED;
>diff --git a/modules/video_output/opengl/converter_vaapi.c
>b/modules/video_output/opengl/converter_vaapi.c
>index 7c9f9947b6..4096f072dd 100644
>--- a/modules/video_output/opengl/converter_vaapi.c
>+++ b/modules/video_output/opengl/converter_vaapi.c
>@@ -38,14 +38,6 @@
> 
> #ifdef HAVE_VA_X11
> # include <va/va_x11.h>
>-/* TODO ugly way to get the X11 Display via EGL. */
>-struct vlc_gl_sys_t
>-{
>-    EGLDisplay display;
>-    EGLSurface surface;
>-    EGLContext context;
>-    Display *x11;
>-};
> #endif
> 
> struct priv
>@@ -315,8 +307,9 @@ opengl_tex_converter_vaapi_init(video_format_t
>*fmt, opengl_tex_converter_t *tc)
> #ifdef HAVE_VA_X11
>         case VOUT_WINDOW_TYPE_XID:
>         {
>-            struct vlc_gl_sys_t *glsys = tc->gl->sys;
>-            fshader = tc_vaegl_init(fmt, tc, priv,
>vaGetDisplay(glsys->x11));
>+            void *x11_dpy = vlc_gl_GetNativeDpy(tc->gl);
>+            if (x11_dpy != NULL)
>+                fshader = tc_vaegl_init(fmt, tc, priv,
>vaGetDisplay(x11_dpy));
>             break;
>         }
> #endif
>diff --git a/modules/video_output/opengl/egl.c
>b/modules/video_output/opengl/egl.c
>index 22cf3545c9..ccb4891640 100644
>--- a/modules/video_output/opengl/egl.c
>+++ b/modules/video_output/opengl/egl.c
>@@ -103,6 +103,14 @@ static void *GetSymbol(vlc_gl_t *gl, const char
>*procname)
>     return (void *)eglGetProcAddress (procname);
> }
> 
>+#if defined (USE_PLATFORM_X11)
>+static void *GetNativeDpy(vlc_gl_t *gl)
>+{
>+    vlc_gl_sys_t *sys = gl->sys;
>+    return sys->x11;
>+}
>+#endif
>+
> static bool CheckToken(const char *haystack, const char *needle)
> {
>     size_t len = strlen(needle);
>@@ -371,6 +379,9 @@ static int Open (vlc_object_t *obj, const struct
>gl_api *api)
>     gl->resize = Resize;
>     gl->swap = SwapBuffers;
>     gl->getProcAddress = GetSymbol;
>+#if defined (USE_PLATFORM_X11)
>+    gl->getNativeDpy = GetNativeDpy;
>+#endif
>     return VLC_SUCCESS;
> 
> error:
>-- 
>2.11.0
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

GL does not know what backend it runs on (GLX, EGL/X11, EGL/Wayland, maybe EGL/GBM soon) so it does not know the type of the native display pointer (if that even means anything). So I don't really see how that would work.
-- 
Rémi Denis-Courmont
Typed on an inconvenient virtual keyboard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20170621/56d3629f/attachment.html>


More information about the vlc-devel mailing list