diff --git a/configure.ac b/configure.ac index ed837d50d1..3e9735062f 100644 --- a/configure.ac +++ b/configure.ac @@ -1588,38 +1588,90 @@ AG_GST_CHECK_FEATURE(RSVG, [rsvg decoder], rsvg, [ ]) dnl *** eglgles *** +AC_ARG_WITH([egl-window-system], + AS_HELP_STRING([--with-egl-window-system],[EGL window system to use (x11, mali-fb, none)]), + [EGL_WINDOW_SYSTEM="$withval"], + [EGL_WINDOW_SYSTEM="none"]) + translit(dnm, m, l) AM_CONDITIONAL(USE_EGLGLES, true) AG_GST_CHECK_FEATURE(EGLGLES, [eglgles sink], eglgles, [ HAVE_EGLGLES="no" - PKG_CHECK_MODULES(EGLGLES, egl glesv2, HAVE_EGLGLES="yes", [ - HAVE_EGLGLES="no" - old_LIBS=$LIBS - old_CFLAGS=$CFLAGS - AC_CHECK_LIB([GLESv2], [glEnable], - [ - AC_CHECK_HEADER([GLES2/gl2.h], + + case "$EGL_WINDOW_SYSTEM" in + x11|none) + PKG_CHECK_MODULES(EGLGLES, egl glesv2, HAVE_EGLGLES="yes", [ + HAVE_EGLGLES="no" + old_LIBS=$LIBS + old_CFLAGS=$CFLAGS + AC_CHECK_LIB([GLESv2], [glEnable], [ - AC_CHECK_LIB([EGL], [eglGetProcAddress], + AC_CHECK_HEADER([GLES2/gl2.h], [ - AC_CHECK_HEADER([EGL/egl.h], + AC_CHECK_LIB([EGL], [eglGetProcAddress], [ - HAVE_EGLGLES="yes" - EGLGLES_LIBS="-lGLESv2 -lEGL" - EGLGLES_CFLAGS="" + AC_CHECK_HEADER([EGL/egl.h], + [ + HAVE_EGLGLES="yes" + EGLGLES_LIBS="-lGLESv2 -lEGL" + EGLGLES_CFLAGS="" + ]) ]) ]) ]) + LIBS=$old_LIBS + CFLAGS=$old_CFLAGS ]) - LIBS=$old_LIBS - CFLAGS=$old_CFLAGS - ]) + + if test x"$HAVE_EGLGLES" = x"yes" -a x"$EGL_WINDOW_SYSTEM" = x"x11"; then + if test x"$HAVE_X11" != x"yes"; then + AC_MSG_ERROR([libX11 not found and is required for EGL X11 window system]) + else + AC_DEFINE(USE_EGL_X11, [1], [Use X11 EGL window system]) + EGLGLES_CFLAGS="$EGLGLES_CFLAGS $X11_CFLAGS" + EGLGLES_LIBS="$EGLGLES_LIBS $X11_LIBS" + fi + fi + ;; + mali-fb) + HAVE_EGLGLES="no" + AC_CHECK_HEADER([EGL/fbdev_window.h], + [ + old_LIBS=$LIBS + old_CFLAGS=$CFLAGS + + LIBS="$LIBS -lUMP" + AC_CHECK_LIB([Mali], [mali_image_create], + [ + LIBS="$LIBS -lMali" + AC_CHECK_LIB([GLESv2], [glEnable], + [ + AC_CHECK_HEADER([GLES2/gl2.h], + [ + AC_CHECK_LIB([EGL], [eglGetProcAddress], + [ + AC_CHECK_HEADER([EGL/egl.h], + [ + HAVE_EGLGLES="yes" + EGLGLES_LIBS="-lGLESv2 -lEGL -lMali -lUMP" + EGLGLES_CFLAGS="" + AC_DEFINE(USE_EGL_MALI_FB, [1], [Use Mali FB EGL window system]) + ]) + ]) + ]) + ]) + ]) + + LIBS=$old_LIBS + CFLAGS=$old_CFLAGS + ]) + ;; + *) + AC_MSG_ERROR([invalid EGL window system specified]) + ;; + esac + AC_SUBST(EGLGLES_CFLAGS) AC_SUBST(EGLGLES_LIBS) - - AC_CHECK_HEADER([EGL/fbdev_window.h], HAVE_FBDEV_EGL="yes", HAVE_FBDEV_EGL="no") - if test x"$HAVE_FBDEV_EGL" = "xyes"; then - AC_DEFINE(HAVE_FBDEV_EGL, [1], [Have EGL/fbdev_window.h]) - fi ]) dnl *** timidity *** diff --git a/ext/eglgles/Makefile.am b/ext/eglgles/Makefile.am index b3b61c2f07..dc1e8b82ed 100644 --- a/ext/eglgles/Makefile.am +++ b/ext/eglgles/Makefile.am @@ -5,11 +5,10 @@ libgsteglglessink_la_SOURCES = gsteglglessink.c video_platform_wrapper.c libgsteglglessink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) \ $(GST_CFLAGS) \ - $(EGLGLES_CFLAGS) \ - $(X11_CFLAGS) + $(EGLGLES_CFLAGS) libgsteglglessink_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \ - $(GST_PLUGINS_BASE_LIBS) $(EGLGLES_LIBS) $(X11_LIBS) \ + $(GST_PLUGINS_BASE_LIBS) $(EGLGLES_LIBS) \ -lgstvideo-$(GST_API_VERSION) libgsteglglessink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) diff --git a/ext/eglgles/video_platform_wrapper.c b/ext/eglgles/video_platform_wrapper.c index 43f3b13a8c..7ceae787ed 100644 --- a/ext/eglgles/video_platform_wrapper.c +++ b/ext/eglgles/video_platform_wrapper.c @@ -55,14 +55,6 @@ #include #include "video_platform_wrapper.h" -#ifdef HAVE_X11 -#include -#endif - -#ifdef HAVE_FBDEV_EGL -#include -#endif - GST_DEBUG_CATEGORY_STATIC (eglgles_platform_wrapper); #define GST_CAT_DEFAULT eglgles_platform_wrapper @@ -76,7 +68,9 @@ platform_wrapper_init (void) return TRUE; } -#ifdef HAVE_X11 +#ifdef USE_EGL_X11 +#include + typedef struct { Display *display; @@ -126,7 +120,9 @@ platform_destroy_native_window (EGLNativeDisplayType display, } #endif -#if defined(HAVE_FBDEV_EGL) && !defined(HAVE_X11) +#ifdef USE_EGL_MALI_FB +#include + EGLNativeWindowType platform_create_native_window (gint width, gint height, gpointer * window_data) { @@ -148,7 +144,7 @@ platform_destroy_native_window (EGLNativeDisplayType display, } #endif -#if !defined(HAVE_X11) && !defined(HAVE_FBDEV_EGL) +#if !defined(USE_EGL_X11) && !defined(USE_EGL_MALI_FB) /* Dummy functions for creating a native Window */ EGLNativeWindowType platform_create_native_window (gint width, gint height, gpointer * window_data)