<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div><br></div>
<div><br></div>
<div><br></div>
<div>On Wed, Jun 21, 2017, at 09:31, Rémi Denis-Courmont wrote:<br></div>
<blockquote type="cite"><div defang_data-gmailquote="yes"><div>Le 21 juin 2017 10:19:05 GMT+03:00, Thomas Guillem <thomas@gllm.fr> a écrit :<br></div>
<blockquote defang_data-gmailquote="yes" style="margin-top:0pt;margin-right:0pt;margin-bottom:0pt;margin-left:0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204, 204, 204);padding-left:1ex;"><pre><div>I forgot to fix the TODO (ugly way to get the X11 Display via EGL) in<br></div>
<div>converter_vaapi.c before pushing it.<br></div>
<div><br></div>
<div>I think, there are 3 ways to fix this issues:<br></div>
<div><br></div>
<div> - What I do in this patch: get the same X11 display that is created by x11_egl.<br></div>
<div><br></div>
<div> - Just do an other XOpenDisplay(wnd->display.x11) from converter_vaapi.c. I<br></div>
<div>   guess this will safely use the same dpy instance created by x11_egl, no ?<br></div>
<div><br></div>
<div> - have x11_egl saving the X11 dpy in the wmd->display struct<br></div>
<div>---<br></div>
<div> include/vlc_opengl.h                          |  6 ++++++<br></div>
<div> modules/video_output/opengl/converter_vaapi.c | 13 +++----------<br></div>
<div> modules/video_output/opengl/egl.c             | 11 +++++++++++<br></div>
<div> 3 files changed, 20 insertions(+), 10 deletions(-)<br></div>
<div><br></div>
<div>diff --git a/include/vlc_opengl.h b/include/vlc_opengl.h<br></div>
<div>index 6642f78554..d536d271d7 100644<br></div>
<div>--- a/include/vlc_opengl.h<br></div>
<div>+++ b/include/vlc_opengl.h<br></div>
<div>@@ -50,6 +50,7 @@ struct vlc_gl_t<br></div>
<div>     void (*resize)(vlc_gl_t *, unsigned, unsigned);<br></div>
<div>     void (*swap)(vlc_gl_t *);<br></div>
<div>     void*(*getProcAddress)(vlc_gl_t *, const char *);<br></div>
<div>+    void*(*getNativeDpy)(vlc_gl_t *);<br></div>
<div> };<br></div>
<div> <br></div>
<div> enum {<br></div>
<div>@@ -86,6 +87,11 @@ static inline void *vlc_gl_GetProcAddress(vlc_gl_t *gl, const char *name)<br></div>
<div>     return (gl->getProcAddress != NULL) ? gl->getProcAddress(gl, name) : NULL;<br></div>
<div> }<br></div>
<div> <br></div>
<div>+static inline void *vlc_gl_GetNativeDpy(vlc_gl_t *gl)<br></div>
<div>+{<br></div>
<div>+    return gl->getNativeDpy != NULL ? gl->getNativeDpy(gl) : NULL;<br></div>
<div>+}<br></div>
<div>+<br></div>
<div> VLC_API vlc_gl_t *vlc_gl_surface_Create(vlc_object_t *,<br></div>
<div>                                         const struct vout_window_cfg_t *,<br></div>
<div>                                         struct vout_window_t **) VLC_USED;<br></div>
<div>diff --git a/modules/video_output/opengl/converter_vaapi.c b/modules/video_output/opengl/converter_vaapi.c<br></div>
<div>index 7c9f9947b6..4096f072dd 100644<br></div>
<div>--- a/modules/video_output/opengl/converter_vaapi.c<br></div>
<div>+++ b/modules/video_output/opengl/converter_vaapi.c<br></div>
<div>@@ -38,14 +38,6 @@<br></div>
<div> <br></div>
<div> #ifdef HAVE_VA_X11<br></div>
<div> # include <va/va_x11.h><br></div>
<div>-/* TODO ugly way to get the X11 Display via EGL. */<br></div>
<div>-struct vlc_gl_sys_t<br></div>
<div>-{<br></div>
<div>-    EGLDisplay display;<br></div>
<div>-    EGLSurface surface;<br></div>
<div>-    EGLContext context;<br></div>
<div>-    Display *x11;<br></div>
<div>-};<br></div>
<div> #endif<br></div>
<div> <br></div>
<div> struct priv<br></div>
<div>@@ -315,8 +307,9 @@ opengl_tex_converter_vaapi_init(video_format_t *fmt, opengl_tex_converter_t *tc)<br></div>
<div> #ifdef HAVE_VA_X11<br></div>
<div>         case VOUT_WINDOW_TYPE_XID:<br></div>
<div>         {<br></div>
<div>-            struct vlc_gl_sys_t *glsys = tc->gl->sys;<br></div>
<div>-            fshader = tc_vaegl_init(fmt, tc, priv, vaGetDisplay(glsys->x11));<br></div>
<div>+            void *x11_dpy = vlc_gl_GetNativeDpy(tc->gl);<br></div>
<div>+            if (x11_dpy != NULL)<br></div>
<div>+                fshader = tc_vaegl_init(fmt, tc, priv, vaGetDisplay(x11_dpy));<br></div>
<div>             break;<br></div>
<div>         }<br></div>
<div> #endif<br></div>
<div>diff --git a/modules/video_output/opengl/egl.c b/modules/video_output/opengl/egl.c<br></div>
<div>index 22cf3545c9..ccb4891640 100644<br></div>
<div>--- a/modules/video_output/opengl/egl.c<br></div>
<div>+++ b/modules/video_output/opengl/egl.c<br></div>
<div>@@ -103,6 +103,14 @@ static void *GetSymbol(vlc_gl_t *gl, const char *procname)<br></div>
<div>     return (void *)eglGetProcAddress (procname);<br></div>
<div> }<br></div>
<div> <br></div>
<div>+#if defined (USE_PLATFORM_X11)<br></div>
<div>+static void *GetNativeDpy(vlc_gl_t *gl)<br></div>
<div>+{<br></div>
<div>+    vlc_gl_sys_t *sys = gl->sys;<br></div>
<div>+    return sys->x11;<br></div>
<div>+}<br></div>
<div>+#endif<br></div>
<div>+<br></div>
<div> static bool CheckToken(const char *haystack, const char *needle)<br></div>
<div> {<br></div>
<div>     size_t len = strlen(needle);<br></div>
<div>@@ -371,6 +379,9 @@ static int Open (vlc_object_t *obj, const struct gl_api *api)<br></div>
<div>     gl->resize = Resize;<br></div>
<div>     gl->swap = SwapBuffers;<br></div>
<div>     gl->getProcAddress = GetSymbol;<br></div>
<div>+#if defined (USE_PLATFORM_X11)<br></div>
<div>+    gl->getNativeDpy = GetNativeDpy;<br></div>
<div>+#endif<br></div>
<div>     return VLC_SUCCESS;<br></div>
<div> <br></div>
<div> error:<br></div>
</pre></blockquote></div>
<div><br></div>
<div>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.<br></div>
</blockquote><div><br></div>
<div>In my first version I added an enum in vlc_gt_t:<br></div>
<div>enum {<br></div>
<div> GL_EXT_CUSTOM,<br></div>
<div> GL_EXT_EGL,<br></div>
<div> GL_EXT_GLX,<br></div>
<div>} ext;<br></div>
<div><br></div>
<div>But I think the 2nd solution is the best (call XOpenDisplay)<br></div>
<div><br></div>
<blockquote type="cite"><div> -- <br></div>
<div> Rémi Denis-Courmont<br></div>
<div> Typed on an inconvenient virtual keyboard <br></div>
<div><u>_______________________________________________</u><br></div>
<div>vlc-devel mailing list<br></div>
<div>To unsubscribe or modify your subscription options:<br></div>
<div><a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br></div>
</blockquote><div><br></div>
</body>
</html>