[vlc-devel] [PATCH 1/2] egl_pbuffer: improve support detection
Romain Vimont
rom1v at videolabs.io
Tue Mar 2 20:28:12 UTC 2021
On Tue, Mar 02, 2021 at 07:31:59PM +0200, Rémi Denis-Courmont wrote:
> Le tiistaina 2. maaliskuuta 2021, 15.51.38 EET Romain Vimont a écrit :
> > The video filter egl_pbuffer may be used only if the display is
> > refcounted, because we don't know if other modules are using EGL.
> >
> > This is always the case on Android, so egl_pbuffer was initially only
> > enabled on Android:
> > https://android.googlesource.com/platform/frameworks/native/+/master/opengl/
> > libs/EGL/egl_display.cpp
> >
> > But this may also be the case on other platforms which support
> > EGL_KHR_display_reference:
> > https://www.khronos.org/registry/EGL/extensions/KHR/EGL_KHR_display_referenc
> > e.txt
> >
> > Co-authored-by: Alexandre Janniaux <ajanni at videolabs.io>
> > ---
> > modules/video_filter/egl_pbuffer.c | 53 ++++++++++++++++++++++++-
> > modules/video_output/opengl/Makefile.am | 7 ++++
> > 2 files changed, 58 insertions(+), 2 deletions(-)
> >
> > diff --git a/modules/video_filter/egl_pbuffer.c
> > b/modules/video_filter/egl_pbuffer.c index 0ecc2562d0..78cd48b3fd 100644
> > --- a/modules/video_filter/egl_pbuffer.c
> > +++ b/modules/video_filter/egl_pbuffer.c
> > @@ -127,12 +127,61 @@ static bool DestroyImageKHR(vlc_gl_t *gl, void *image)
> > return sys->eglDestroyImageKHR(sys->display, image);
> > }
> >
> > -static int InitEGL(vlc_gl_t *gl, unsigned width, unsigned height)
> > +static bool GetPlatform(const char *extensions, EGLenum *out)
> > +{
> > +#ifdef EGL_KHR_platform_x11
> > + if (vlc_gl_StrHasToken(extensions, "EGL_EXT_platform_x11"))
> > + {
> > + *out = EGL_PLATFORM_X11_KHR;
> > + return true;
> > + }
> > +#endif
> > +
> > +#ifdef EGL_KHR_platform_wayland
> > + if (vlc_gl_StrHasToken(extensions, "EGL_EXT_platform_wayland"))
> > + {
> > + *out = EGL_PLATFORM_WAYLAND_KHR;
> > + return true;
> > + }
> > +#endif
> > +
> > + return false;
> > +}
> > +
> > +static bool InitDefaultEGLDisplay(vlc_gl_t *gl)
> > {
> > struct vlc_gl_pbuffer *sys = gl->sys;
> >
> > +#ifdef __ANDROID__
> > + /* The default display is refcounted on Android */
> > sys->display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
> > - if (sys->display == EGL_NO_DISPLAY)
> > +#elif defined(EGL_KHR_display_reference)
> > + const char *extensions = eglQueryString(EGL_NO_DISPLAY,
> > EGL_EXTENSIONS); +
> > + if (!vlc_gl_StrHasToken(extensions, "EGL_KHR_display_reference"))
> > + return false;
> > +
> > + EGLenum platform;
> > + if (!GetPlatform(extensions, &platform))
> > + return false;
> > +
> > + const EGLAttrib attribs[] = {
> > + EGL_TRACK_REFERENCES_KHR, EGL_TRUE,
> > + EGL_NONE,
> > + };
> > +
> > + sys->display =
> > + eglGetPlatformDisplay(platform, EGL_DEFAULT_DISPLAY, attribs);
> > +#endif
> > +
> > + return sys->display != EGL_NO_DISPLAY;
> > +}
> > +
> > +static int InitEGL(vlc_gl_t *gl, unsigned width, unsigned height)
> > +{
> > + struct vlc_gl_pbuffer *sys = gl->sys;
> > +
> > + if (!InitDefaultEGLDisplay(gl))
> > return VLC_EGENERIC;
> >
> > /* Initialize EGL display */
> > diff --git a/modules/video_output/opengl/Makefile.am
> > b/modules/video_output/opengl/Makefile.am index dcb8ace5c6..d3170d9ac7
> > 100644
> > --- a/modules/video_output/opengl/Makefile.am
> > +++ b/modules/video_output/opengl/Makefile.am
> > @@ -93,6 +93,13 @@ libegl_pbuffer_filter_plugin_la_SOURCES =
> > video_filter/egl_pbuffer.c libegl_pbuffer_filter_plugin_la_CPPFLAGS =
> > $(AM_CPPFLAGS) $(EGL_FLAGS) libegl_pbuffer_filter_plugin_la_LIBADD =
> > $(LIBM) $(EGL_LIBS)
> >
> > +if HAVE_LINUX
> > +if HAVE_GL
> > +libegl_pbuffer_filter_plugin_la_LIBADD += libvlc_opengl.la $(GL_LIBS)
> > +vout_LTLIBRARIES += libegl_pbuffer_filter_plugin.la
> > +endif
> > +endif
> > +
>
> That does not look right.
With HAVE_EGL instead:
--------8<-------------------------------------------------------------
diff --git a/modules/video_output/opengl/Makefile.am b/modules/video_output/opengl/Makefile.am
index dcb8ace5c6..b1f6e745ee 100644
--- a/modules/video_output/opengl/Makefile.am
+++ b/modules/video_output/opengl/Makefile.am
@@ -93,8 +93,15 @@ libegl_pbuffer_filter_plugin_la_SOURCES = video_filter/egl_pbuffer.c
libegl_pbuffer_filter_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(EGL_FLAGS)
libegl_pbuffer_filter_plugin_la_LIBADD = $(LIBM) $(EGL_LIBS)
+if HAVE_EGL
+if HAVE_GL
+libegl_pbuffer_filter_plugin_la_LIBADD += libvlc_opengl.la $(GL_LIBS)
+vout_LTLIBRARIES += libegl_pbuffer_filter_plugin.la
+endif
+
if HAVE_ANDROID
libegl_pbuffer_filter_plugin_la_LIBADD += libvlc_opengles.la $(GLES2_LIBS)
libegl_pbuffer_filter_plugin_la_CPPFLAGS += -DUSE_OPENGL_ES2=1
vout_LTLIBRARIES += libegl_pbuffer_filter_plugin.la
endif
+endif
--------8<-------------------------------------------------------------
Regards
More information about the vlc-devel
mailing list