summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Borovkov <sergey.borovkov@wireload.net>2016-04-14 18:14:32 +0300
committerMatthew Waters <matthew@centricular.com>2016-06-16 01:49:16 +1000
commit180405714c88c0fe1081f3ec5ca4838c1c127bd0 (patch)
tree1b6e08eb169c3394fe67a8dc3edf3b0978e70934
parent14c6fece0972183053f23874d0b5fd7b072e40d5 (diff)
downloadgstreamer-plugins-bad-180405714c88c0fe1081f3ec5ca4838c1c127bd0.tar.gz
qml: Enable qmlglsink for eglfs
https://bugzilla.gnome.org/show_bug.cgi?id=763044
-rw-r--r--configure.ac41
-rw-r--r--ext/qt/qtitem.cc12
-rw-r--r--gst-libs/gst/gl/egl/gstegl.h2
3 files changed, 34 insertions, 21 deletions
diff --git a/configure.ac b/configure.ac
index 8b9ca6c1e..88918a898 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2886,24 +2886,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 <gst/gl/wayland/gstgldisplay_wayland.h>
#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 <gst/gl/egl/gstgldisplay_egl.h>
#include <gst/gl/egl/gstglcontext_egl.h>
#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