qmlglsink: Add Wayland support
authorHaihua Hu <jared.hu@nxp.com>
Sun, 12 Jun 2016 07:35:28 +0000 (15:35 +0800)
committerMatthew Waters <matthew@centricular.com>
Wed, 15 Jun 2016 15:49:16 +0000 (01:49 +1000)
Don't use gstgldisplay to get wayland display. Should use QPA on wayland
to get wayland display for QT.

https://bugzilla.gnome.org/show_bug.cgi?id=767553

ext/qt/Makefile.am
ext/qt/qtitem.cc

index 5fdd90a..eab3e97 100644 (file)
@@ -26,6 +26,7 @@ libgstqtsink_la_SOURCES = \
 libgstqtsink_la_CXXFLAGS = \
        -I$(top_srcdir)/gst-libs \
        -I$(top_builddir)/gst-libs \
+       -I$(QPA_INCLUDE_PATH) \
        $(GST_CXXFLAGS) \
        $(GST_BASE_CFLAGS) \
        $(GST_PLUGINS_BASE_CFLAGS) \
index e1f91e7..2df087e 100644 (file)
@@ -32,6 +32,7 @@
 #include <QtGui/QGuiApplication>
 #include <QtQuick/QQuickWindow>
 #include <QtQuick/QSGSimpleTextureNode>
+#include <qpa/qplatformnativeinterface.h>
 
 #if GST_GL_HAVE_WINDOW_X11 && GST_GL_HAVE_PLATFORM_GLX && defined (HAVE_QT_X11)
 #include <QX11Info>
@@ -147,6 +148,17 @@ QtGLVideoItem::QtGLVideoItem()
     this->priv->display = (GstGLDisplay *)
         gst_gl_display_x11_new_with_display (QX11Info::display ());
 #endif
+#if GST_GL_HAVE_WINDOW_WAYLAND && GST_GL_HAVE_PLATFORM_EGL && defined (HAVE_QT_WAYLAND)
+  if (QString::fromUtf8 ("wayland") == app->platformName()){
+    struct wl_display * wayland_display;
+    QPlatformNativeInterface *native =
+        QGuiApplication::platformNativeInterface();
+    wayland_display = (struct wl_display *)
+        native->nativeResourceForWindow("display", NULL);
+    this->priv->display = (GstGLDisplay *)
+        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 (QString::fromUtf8 ("android") == app->platformName())
     this->priv->display = (GstGLDisplay *) gst_gl_display_egl_new ();