From 85dcabcee0e577547fd0a102a7322edba6d5e41a Mon Sep 17 00:00:00 2001 From: Sergey Borovkov Date: Thu, 14 Apr 2016 18:14:32 +0300 Subject: qml: Enable qmlglsink for eglfs https://bugzilla.gnome.org/show_bug.cgi?id=763044 --- configure.ac | 41 +++++++++++++++++++++++------------------ ext/qt/qtitem.cc | 12 +++++++++--- gst-libs/gst/gl/egl/gstegl.h | 2 ++ 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/configure.ac b/configure.ac index a7ddae1d2..dd621b556 100644 --- a/configure.ac +++ b/configure.ac @@ -2862,24 +2862,29 @@ AG_GST_CHECK_FEATURE(QT, [Qt elements], qt, [ HAVE_QT_WINDOWING="yes" ], [AC_MSG_NOTICE([Could not find Qt Wayland integration])]) fi - if test "x$GST_GL_HAVE_WINDOW_ANDROID" = "x1" -a "x$GST_GL_HAVE_PLATFORM_EGL" = "x1"; then - PKG_CHECK_MODULES(QT_ANDROID, Qt5AndroidExtras, [ - # c++ on android requires a standard library and there are multiple - # choices. cerbero provides a pkg-config file the describes a choice - # so try to use that. Outside cerbero one has to pass these flags - # manually for the library one is using - PKG_CHECK_MODULES(GNUSTL, gnustl, [ - QT_CFLAGS="$QT_CFLAGS $GNUSTL_CFLAGS" - QT_LIBS="$QT_LIBS $GNUSTL_LIBS" - ], [ - AC_MSG_NOTICE([Could not find Standard C++ library])]) - - AC_DEFINE([HAVE_QT_ANDROID], [], - [Define if Qt Android integration is installed]) - QT_CFLAGS="$QT_CFLAGS $QT_ANDROID_CFLAGS" - QT_LIBS="$QT_LIBS $QT_ANDROID_LIBS" - HAVE_QT_WINDOWING="yes" - ], [AC_MSG_NOTICE([Could not find Qt Android integration])]) + if test "x$GST_GL_HAVE_PLATFORM_EGL" = "x1"; then + if test "x$GST_GL_HAVE_WINDOW_ANDROID" = "x1"; then + PKG_CHECK_MODULES(QT_ANDROID, Qt5AndroidExtras, [ + # c++ on android requires a standard library and there are multiple + # choices. cerbero provides a pkg-config file the describes a choice + # so try to use that. Outside cerbero one has to pass these flags + # manually for the library one is using + PKG_CHECK_MODULES(GNUSTL, gnustl, [ + QT_CFLAGS="$QT_CFLAGS $GNUSTL_CFLAGS" + QT_LIBS="$QT_LIBS $GNUSTL_LIBS" + ], [ + AC_MSG_NOTICE([Could not find Standard C++ library])]) + AC_DEFINE([HAVE_QT_EGLFS], [], + [Define if Qt eglfs integration is installed]) + QT_CFLAGS="$QT_CFLAGS $QT_ANDROID_CFLAGS" + QT_LIBS="$QT_LIBS $QT_ANDROID_LIBS" + HAVE_QT_WINDOWING="yes" + ], [AC_MSG_NOTICE([Could not find Qt Android integration])]) + else + AC_DEFINE([HAVE_QT_EGLFS], [], + [Define if Qt eglfs integration is installed]) + HAVE_QT_WINDOWING="yes" + fi fi if test "x$GST_GL_HAVE_WINDOW_COCOA" = "x1" -a "x$GST_GL_HAVE_PLATFORM_CGL" = "x1"; then PKG_CHECK_MODULES(QT_MAC, Qt5MacExtras, [ diff --git a/ext/qt/qtitem.cc b/ext/qt/qtitem.cc index 9c359f85d..505ed03f2 100644 --- a/ext/qt/qtitem.cc +++ b/ext/qt/qtitem.cc @@ -44,7 +44,7 @@ #include #endif -#if GST_GL_HAVE_WINDOW_ANDROID && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_ANDROID) +#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS) #include #include #endif @@ -162,10 +162,14 @@ QtGLVideoItem::QtGLVideoItem() gst_gl_display_wayland_new_with_display (wayland_display); } #endif -#if GST_GL_HAVE_WINDOW_ANDROID && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_ANDROID) +#if GST_GL_HAVE_PLATFORM_EGL && GST_GL_HAVE_WINDOW_ANDROID if (QString::fromUtf8 ("android") == app->platformName()) this->priv->display = (GstGLDisplay *) gst_gl_display_egl_new (); +#elif GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS) + if (QString::fromUtf8("eglfs") == app->platformName()) + this->priv->display = (GstGLDisplay *) gst_gl_display_egl_new (); #endif + #if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC) if (QString::fromUtf8 ("cocoa") == app->platformName()) this->priv->display = (GstGLDisplay *) gst_gl_display_cocoa_new (); @@ -348,7 +352,8 @@ QtGLVideoItem::onSceneGraphInitialized () platform, gl_api); } #endif -#if GST_GL_HAVE_WINDOW_ANDROID && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_ANDROID) + +#if GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_EGLFS) if (GST_IS_GL_DISPLAY_EGL (this->priv->display)) { platform = GST_GL_PLATFORM_EGL; gl_api = gst_gl_context_get_current_gl_api (platform, NULL, NULL); @@ -359,6 +364,7 @@ QtGLVideoItem::onSceneGraphInitialized () platform, gl_api); } #endif + #if GST_GL_HAVE_WINDOW_COCOA && GST_GL_HAVE_PLATFORM_COCOA && defined (HAVE_QT_MAC) if (this->priv->display) { platform = GST_GL_PLATFORM_CGL; diff --git a/gst-libs/gst/gl/egl/gstegl.h b/gst-libs/gst/gl/egl/gstegl.h index 4fc2f3d4f..82d4953dd 100644 --- a/gst-libs/gst/gl/egl/gstegl.h +++ b/gst-libs/gst/gl/egl/gstegl.h @@ -30,8 +30,10 @@ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wredundant-decls" +#if !defined(__cplusplus) #pragma GCC optimize ("gnu89-inline") #endif +#endif #ifndef EGL_EGLEXT_PROTOTYPES #define EGL_EGLEXT_PROTOTYPES 1 -- cgit v1.2.1