1From 7a61361b5ff151ad36de04ca77a86944f14a2ab8 Mon Sep 17 00:00:00 2001
2From: Jeffy Chen <jeffy.chen@rock-chips.com>
3Date: Fri, 15 Jan 2021 16:27:59 +0800
4Subject: [PATCH 11/17] quicktools: Prefer VideoWindowBackend when using gst
5 sink
6
7Prefer VideoWindowBackend for video overlay.
8
9Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
10---
11 .../qdeclarativevideooutput.cpp                   | 15 +++++++++++----
12 1 file changed, 11 insertions(+), 4 deletions(-)
13
14diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
15index ca3a4b2..d2f735b 100644
16--- a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
17+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
18@@ -245,6 +245,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, videoBackendFactoryLoader,
19 bool QDeclarativeVideoOutput::createBackend(QMediaService *service)
20 {
21     bool backendAvailable = false;
22+    bool preferWindowBackend = !qgetenv( "QT_GSTREAMER_WINDOW_VIDEOSINK" ).isEmpty();
23
24     const auto instances = videoBackendFactoryLoader()->instances(QLatin1String("declarativevideobackend"));
25     for (QObject *instance : instances) {
26@@ -257,10 +258,11 @@ bool QDeclarativeVideoOutput::createBackend(QMediaService *service)
27             }
28         }
29     }
30+
31+retry:
32 #if QT_CONFIG(opengl)
33-    if (!backendAvailable) {
34-        if (!m_backend)
35-            m_backend.reset(new QDeclarativeVideoRendererBackend(this));
36+    if (!backendAvailable && !preferWindowBackend) {
37+        m_backend.reset(new QDeclarativeVideoRendererBackend(this));
38         if (m_backend->init(service))
39             backendAvailable = true;
40     }
41@@ -268,13 +270,18 @@ bool QDeclarativeVideoOutput::createBackend(QMediaService *service)
42
43     // QDeclarativeVideoWindowBackend only works when there is a service with a QVideoWindowControl.
44     // Without service, the QDeclarativeVideoRendererBackend should always work.
45-    if (!backendAvailable) {
46+    if (!backendAvailable && service) {
47         Q_ASSERT(service);
48         m_backend.reset(new QDeclarativeVideoWindowBackend(this));
49         if (m_backend->init(service))
50             backendAvailable = true;
51     }
52
53+    if (!backendAvailable && preferWindowBackend) {
54+        preferWindowBackend = false;
55+        goto retry;
56+    }
57+
58     if (backendAvailable) {
59         // Since new backend has been created needs to update its geometry.
60         m_geometryDirty = true;
61--
622.20.1
63
64