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