summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Borovkov <sergey.borovkov@wireload.net>2016-04-14 18:14:32 +0300
committerJan Schmidt <jan@centricular.com>2016-08-16 02:32:10 +1000
commit85dcabcee0e577547fd0a102a7322edba6d5e41a (patch)
tree2c5ef22ee938c20d6b11ab3b35dff1b5be2b52c4
parent27a3bc73c02ec2cd6ed204050c6627268a499ff5 (diff)
downloadgstreamer-plugins-bad-85dcabcee0e577547fd0a102a7322edba6d5e41a.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 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 <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