--- /dev/null
+From 8272d5c9e32d2ae26ce28dcbf9a7962bc18f2338 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Thu, 10 Aug 2017 11:29:41 +0200
+Subject: [PATCH] qmlglsink: Retain the previous frame to avoid flickering
+ artifacts
+
+With some GstGL uploaders - especially the ones based on DMABUF - it is
+possible that flickering artifacts can occur with qmlglsink. This happens
+because upstream writes into the dmabuf at the same time when the frame
+in that dmabuf is being painted on screen. By retaining the gstbuffer for
+one more frame, this is avoided, since the gstbuffer is not released back
+into the upstream dmabuf buffer pool until the frame is drawn.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=786133
+---
+ ext/qt/gstqsgtexture.cc | 7 +++++++
+ ext/qt/gstqsgtexture.h | 1 +
+ 2 files changed, 8 insertions(+)
+
+diff --git a/ext/qt/gstqsgtexture.cc b/ext/qt/gstqsgtexture.cc
+index 7391806..46d73bb 100644
+--- a/ext/qt/gstqsgtexture.cc
++++ b/ext/qt/gstqsgtexture.cc
+@@ -46,6 +46,7 @@ GstQSGTexture::GstQSGTexture ()
+
+ gst_video_info_init (&this->v_info);
+ this->buffer_ = NULL;
++ this->previous_buffer_ = NULL;
+ this->qt_context_ = NULL;
+ this->sync_buffer_ = gst_buffer_new ();
+ this->dummy_tex_id_ = 0;
+@@ -54,6 +55,7 @@ GstQSGTexture::GstQSGTexture ()
+ GstQSGTexture::~GstQSGTexture ()
+ {
+ gst_buffer_replace (&this->buffer_, NULL);
++ gst_buffer_replace (&this->previous_buffer_, NULL);
+ gst_buffer_replace (&this->sync_buffer_, NULL);
+ if (this->dummy_tex_id_ && QOpenGLContext::currentContext ()) {
+ QOpenGLContext::currentContext ()->functions ()->glDeleteTextures (1,
+@@ -75,6 +77,11 @@ gboolean
+ GstQSGTexture::setBuffer (GstBuffer * buffer)
+ {
+ GST_LOG ("%p setBuffer %" GST_PTR_FORMAT, this, buffer);
++
++ /* Retain the current buffer for one frame to prevent
++ * releasing the buffer while it is being drawn */
++ gst_buffer_replace (&this->previous_buffer_, this->buffer_);
++
+ /* FIXME: update more state here */
+ if (!gst_buffer_replace (&this->buffer_, buffer))
+ return FALSE;
+diff --git a/ext/qt/gstqsgtexture.h b/ext/qt/gstqsgtexture.h
+index fdabe93..d2685f8 100644
+--- a/ext/qt/gstqsgtexture.h
++++ b/ext/qt/gstqsgtexture.h
+@@ -48,6 +48,7 @@ public:
+
+ private:
+ GstBuffer * buffer_;
++ GstBuffer * previous_buffer_;
+ GstBuffer * sync_buffer_;
+ GstGLContext * qt_context_;
+ GstMemory * mem_;
+--
+2.7.4
+
+++ /dev/null
-From a1d44ee3fbc517b6515f41e98871b01a7608623c Mon Sep 17 00:00:00 2001
-From: Carlos Rafael Giani <dv@pseudoterminal.org>
-Date: Tue, 9 May 2017 23:59:04 +0200
-Subject: [PATCH 2/5] gl/viv-fb: Fix user-choice string comparisons
-
-https://bugzilla.gnome.org/show_bug.cgi?id=782921
----
- gst-libs/gst/gl/gstgldisplay.c | 2 +-
- gst-libs/gst/gl/gstglwindow.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
-index b456b1f..6408f0c 100644
---- a/gst-libs/gst/gl/gstgldisplay.c
-+++ b/gst-libs/gst/gl/gstgldisplay.c
-@@ -301,7 +301,7 @@ gst_gl_display_new (void)
- display = GST_GL_DISPLAY (gst_gl_display_wayland_new (NULL));
- #endif
- #if GST_GL_HAVE_WINDOW_VIV_FB
-- if (!display && (!user_choice || g_strstr_len (user_choice, 2, "viv-fb"))) {
-+ if (!display && (!user_choice || g_strstr_len (user_choice, 6, "viv-fb"))) {
- const gchar *disp_idx_str = NULL;
- gint disp_idx = 0;
- disp_idx_str = g_getenv ("GST_GL_VIV_FB");
-diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
-index c1dae2d..d279b22 100644
---- a/gst-libs/gst/gl/gstglwindow.c
-+++ b/gst-libs/gst/gl/gstglwindow.c
-@@ -275,7 +275,7 @@ gst_gl_window_new (GstGLDisplay * display)
- window = GST_GL_WINDOW (gst_gl_window_eagl_new (display));
- #endif
- #if GST_GL_HAVE_WINDOW_VIV_FB
-- if (!window && (!user_choice || g_strstr_len (user_choice, 2, "viv-fb")))
-+ if (!window && (!user_choice || g_strstr_len (user_choice, 6, "viv-fb")))
- window = GST_GL_WINDOW (gst_gl_window_viv_fb_egl_new (display));
- #endif
-
---
-2.7.4
-
--- /dev/null
+From 322be5a7a927765dd9b122280b0c09b50a4bea07 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Thu, 10 Aug 2017 13:48:31 +0200
+Subject: [PATCH] qt: Add support for GBM backend
+
+https://bugzilla.gnome.org/show_bug.cgi?id=783521
+---
+ ext/qt/gstqtglutility.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/ext/qt/gstqtglutility.cc b/ext/qt/gstqtglutility.cc
+index 22aae60..b925d1c 100644
+--- a/ext/qt/gstqtglutility.cc
++++ b/ext/qt/gstqtglutility.cc
+@@ -40,6 +40,9 @@
+ #if GST_GL_HAVE_WINDOW_VIV_FB
+ #include <qpa/qplatformnativeinterface.h>
+ #include <gst/gl/viv-fb/gstgldisplay_viv_fb.h>
++#elif GST_GL_HAVE_WINDOW_GBM
++#include <qpa/qplatformnativeinterface.h>
++#include <gst/gl/gbm/gstgldisplay_gbm.h>
+ #else
+ #include <gst/gl/egl/gstgldisplay_egl.h>
+ #endif
+@@ -113,6 +116,12 @@ gst_qt_get_gl_display ()
+ }
+
+ display = (GstGLDisplay *) gst_gl_display_viv_fb_new (disp_idx);
++#elif GST_GL_HAVE_WINDOW_GBM
++ QPlatformNativeInterface *native =
++ QGuiApplication::platformNativeInterface();
++ EGLDisplay egl_display = (EGLDisplay)
++ native->nativeResourceForWindow("egldisplay", NULL);
++ display = (GstGLDisplay *) gst_gl_display_egl_new_with_egl_display (egl_display);
+ #else
+ display = (GstGLDisplay *) gst_gl_display_egl_new_with_egl_display (eglGetDisplay(EGL_DEFAULT_DISPLAY));
+ #endif
+--
+2.7.4
+
SRC_URI_append = " \
file://mesa3d-gbm/0001-qmlglsink-Add-dummy-texture-that-is-shown-as-placeho.patch \
- file://mesa3d-gbm/0002-gl-viv-fb-Fix-user-choice-string-comparisons.patch \
file://mesa3d-gbm/0003-configure-Factor-out-libdrm-to-make-the-configuratio.patch \
file://mesa3d-gbm/0004-configure-Factor-out-gudev-checks.patch \
file://mesa3d-gbm/0005-gl-Add-Mesa3D-GBM-backend.patch \
+ file://mesa3d-gbm/0006-qt-Add-support-for-GBM-backend.patch \
file://direct-dmabuf-uploader/0001-gstgl-Fix-sanity-check-in-gst_gl_memory_setup_buffer.patch \
file://direct-dmabuf-uploader/0002-gl-egl-Add-gst_egl_image_from_dmabuf_direct-function.patch \
file://direct-dmabuf-uploader/0003-gstgl-Add-direct-DMABUF-uploader-WIP.patch \
+ file://0008-qmlglsink-Retain-the-previous-frame-to-avoid-flicker.patch \
"