vlc | branch: master | Romain Vimont <ro...@videolabs.io> | Mon Mar 22 16:06:21 2021 +0100| [20ee4afcb489af4d155b3b70e2ae328432a82695] | committer: Alexandre Janniaux
egl_pbuffer: use a default EGL display module Add a default EGL display module which just calls eglGetDisplay(EGL_DEFAULT_DISPLAY). Signed-off-by: Alexandre Janniaux <aja...@videolabs.io> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=20ee4afcb489af4d155b3b70e2ae328432a82695 --- modules/video_filter/egl_pbuffer.c | 16 +++++++- modules/video_output/opengl/Makefile.am | 10 ++++- modules/video_output/opengl/egl_display_generic.c | 50 +++++++++++++++++++++++ 3 files changed, 73 insertions(+), 3 deletions(-) diff --git a/modules/video_filter/egl_pbuffer.c b/modules/video_filter/egl_pbuffer.c index 3774cf3a0b..64bee6b403 100644 --- a/modules/video_filter/egl_pbuffer.c +++ b/modules/video_filter/egl_pbuffer.c @@ -34,6 +34,7 @@ #include "../video_output/opengl/gl_api.h" #include "../video_output/opengl/gl_common.h" #include "../video_output/opengl/interop.h" +#include "../video_output/opengl/egl_display.h" #include <EGL/egl.h> #include <EGL/eglext.h> @@ -64,6 +65,8 @@ struct vlc_gl_pbuffer GLuint textures[BUFFER_COUNT]; struct pbo_picture_context picture_contexts[BUFFER_COUNT]; + struct vlc_egl_display *vlc_display; + EGLDisplay display; EGLSurface surface; EGLContext context; @@ -131,14 +134,20 @@ static int InitEGL(vlc_gl_t *gl, unsigned width, unsigned height) { struct vlc_gl_pbuffer *sys = gl->sys; - sys->display = eglGetDisplay(EGL_DEFAULT_DISPLAY); - if (sys->display == EGL_NO_DISPLAY) + sys->vlc_display = vlc_egl_display_New(VLC_OBJECT(gl), NULL); + if (!sys->vlc_display) return VLC_EGENERIC; + sys->display = sys->vlc_display->display; + assert(sys->display != EGL_NO_DISPLAY); + /* Initialize EGL display */ EGLint major, minor; if (eglInitialize(sys->display, &major, &minor) != EGL_TRUE) + { + vlc_egl_display_Delete(sys->display); return VLC_EGENERIC; + } msg_Dbg(gl, "EGL version %s by %s, API %s", eglQueryString(sys->display, EGL_VERSION), eglQueryString(sys->display, EGL_VENDOR), @@ -224,6 +233,7 @@ static int InitEGL(vlc_gl_t *gl, unsigned width, unsigned height) return VLC_SUCCESS; error: eglTerminate(sys->display); + vlc_egl_display_Delete(sys->display); return VLC_EGENERIC; } @@ -355,6 +365,7 @@ static void Close( vlc_gl_t *gl ) vlc_gl_ReleaseCurrent(sys->gl); eglTerminate(sys->display); + vlc_egl_display_Delete(sys->vlc_display); } static int Open(vlc_gl_t *gl, unsigned width, unsigned height) @@ -450,6 +461,7 @@ static int Open(vlc_gl_t *gl, unsigned width, unsigned height) error2: eglTerminate(sys->display); + vlc_egl_display_Delete(sys->vlc_display); error1: vlc_obj_free(&gl->obj, sys); diff --git a/modules/video_output/opengl/Makefile.am b/modules/video_output/opengl/Makefile.am index 4235607abc..364acbe87c 100644 --- a/modules/video_output/opengl/Makefile.am +++ b/modules/video_output/opengl/Makefile.am @@ -89,7 +89,15 @@ if HAVE_GL vout_LTLIBRARIES += libgl_plugin.la endif # HAVE_GL -libegl_pbuffer_filter_plugin_la_SOURCES = video_filter/egl_pbuffer.c +libegl_display_generic_plugin_la_SOURCES = video_output/opengl/egl_display_generic.c +libegl_display_generic_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(EGL_FLAGS) +libegl_display_generic_plugin_la_LIBADD = $(EGL_LIBS) +if HAVE_ANDROID +vout_LTLIBRARIES += libegl_display_generic_plugin.la +endif + +libegl_pbuffer_filter_plugin_la_SOURCES = video_filter/egl_pbuffer.c \ + video_output/opengl/egl_display.c libegl_pbuffer_filter_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) $(EGL_FLAGS) libegl_pbuffer_filter_plugin_la_LIBADD = $(EGL_LIBS) diff --git a/modules/video_output/opengl/egl_display_generic.c b/modules/video_output/opengl/egl_display_generic.c new file mode 100644 index 0000000000..dfa68125c4 --- /dev/null +++ b/modules/video_output/opengl/egl_display_generic.c @@ -0,0 +1,50 @@ +/***************************************************************************** + * egl_display_generic.c + ***************************************************************************** + * Copyright (C) 2021 Videolabs + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <vlc_common.h> +#include <vlc_plugin.h> +#include <vlc_opengl.h> + +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#include "egl_display.h" + +static vlc_egl_display_open_fn Open; +static int +Open(struct vlc_egl_display *display) +{ + display->display = eglGetDisplay(EGL_DEFAULT_DISPLAY); + if (display->display == EGL_NO_DISPLAY) + return VLC_EGENERIC; + + return VLC_SUCCESS; +} + +vlc_module_begin() + set_description("EGL generic display") + set_capability("egl display", 1) + set_callback(Open) + add_shortcut("egl_display_generic") +vlc_module_end() _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits