1From 60a5f650497fa6c58e89d3c13b0ac25c030146f0 Mon Sep 17 00:00:00 2001
2From: Jeffy Chen <jeffy.chen@rock-chips.com>
3Date: Tue, 30 Mar 2021 07:52:42 +0800
4Subject: [PATCH 13/17] HACK: gstreamer: Support fill mode
5
6Depends on gstreamer-sink property.
7
8Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
9---
10 src/gsttools/qgstreamervideooverlay.cpp | 12 ++++++++++++
11 1 file changed, 12 insertions(+)
12
13diff --git a/src/gsttools/qgstreamervideooverlay.cpp b/src/gsttools/qgstreamervideooverlay.cpp
14index 1ca82da..431d8cc 100644
15--- a/src/gsttools/qgstreamervideooverlay.cpp
16+++ b/src/gsttools/qgstreamervideooverlay.cpp
17@@ -111,6 +111,7 @@ public:
18         m_hasHue = g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "hue");
19         m_hasSaturation = g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "saturation");
20         m_hasShowPrerollFrame = g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "show-preroll-frame");
21+        m_hasFillMode = g_object_class_find_property(G_OBJECT_GET_CLASS(m_videoSink), "fill-mode");
22     }
23
24     bool hasShowPrerollFrame() const override
25@@ -221,12 +222,23 @@ public:
26                          (mode == Qt::KeepAspectRatio),
27                          nullptr);
28         }
29+        if (m_hasFillMode) {
30+            // HACK: Match the gst-sink properties
31+            int modes[] = {
32+                [Qt::IgnoreAspectRatio] = 0,
33+                [Qt::KeepAspectRatio] = 1,
34+                [Qt::KeepAspectRatioByExpanding] = 2,
35+            };
36+            g_object_set(G_OBJECT(m_videoSink),
37+                         "fill-mode", modes[mode], nullptr);
38+        }
39     }
40
41 protected:
42
43     GstElement *m_videoSink = nullptr;
44     bool m_hasForceAspectRatio = false;
45+    bool m_hasFillMode = false;
46     bool m_hasBrightness = false;
47     bool m_hasContrast = false;
48     bool m_hasHue = false;
49--
502.20.1
51
52