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