1From 1a0b32f5264b96e42cb6b05782c24451551bb80f Mon Sep 17 00:00:00 2001 2From: Jeffy Chen <jeffy.chen@rock-chips.com> 3Date: Thu, 15 Sep 2022 18:18:07 +0800 4Subject: [PATCH 39/39] kmssink: Support fullscreen prop 5 6Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 7--- 8 sys/kms/gstkmssink.c | 21 +++++++++++++++++++++ 9 sys/kms/gstkmssink.h | 1 + 10 2 files changed, 22 insertions(+) 11 12diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c 13index a27f569..f07ab6f 100644 14--- a/sys/kms/gstkmssink.c 15+++ b/sys/kms/gstkmssink.c 16@@ -100,6 +100,7 @@ enum 17 PROP_PLANE_PROPS, 18 PROP_FORCE_ASPECT_RATIO, 19 PROP_SYNC_MODE, 20+ PROP_FULLSCREEN, 21 PROP_N, 22 }; 23 24@@ -1974,6 +1975,15 @@ retry_set_plane: 25 src.h = video_height; 26 } 27 28+ if (self->fullscreen) { 29+ if (self->can_scale || 30+ (src.w == self->hdisplay && src.h == self->vdisplay)) { 31+ result.x = result.y = 0; 32+ result.w = self->hdisplay; 33+ result.h = self->vdisplay; 34+ } 35+ } 36+ 37 /* handle out of screen case */ 38 if ((result.x + result.w) > self->hdisplay) 39 result.w = self->hdisplay - result.x; 40@@ -2176,6 +2186,9 @@ gst_kms_sink_set_property (GObject * object, guint prop_id, 41 case PROP_SYNC_MODE: 42 sink->sync_mode = g_value_get_enum (value); 43 break; 44+ case PROP_FULLSCREEN: 45+ sink->fullscreen = g_value_get_boolean (value); 46+ break; 47 default: 48 if (!gst_video_overlay_set_property (object, PROP_N, prop_id, value)) 49 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); 50@@ -2235,6 +2248,9 @@ gst_kms_sink_get_property (GObject * object, guint prop_id, 51 case PROP_SYNC_MODE: 52 g_value_set_enum (value, sink->sync_mode); 53 break; 54+ case PROP_FULLSCREEN: 55+ g_value_set_boolean (value, sink->fullscreen); 56+ break; 57 default: 58 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); 59 break; 60@@ -2469,6 +2485,11 @@ gst_kms_sink_class_init (GstKMSSinkClass * klass) 61 GST_TYPE_KMS_SYNC_MODE, DEFAULT_SYNC_MODE, 62 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 63 64+ g_properties[PROP_FULLSCREEN] = 65+ g_param_spec_boolean ("fullscreen", "Fullscreen", 66+ "Force showing fullscreen", FALSE, 67+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); 68+ 69 g_object_class_install_properties (gobject_class, PROP_N, g_properties); 70 71 gst_video_overlay_install_properties (gobject_class, PROP_N); 72diff --git a/sys/kms/gstkmssink.h b/sys/kms/gstkmssink.h 73index 274351e..1981036 100644 74--- a/sys/kms/gstkmssink.h 75+++ b/sys/kms/gstkmssink.h 76@@ -106,6 +106,7 @@ struct _GstKMSSink { 77 guintptr window_handle; 78 79 gboolean keep_aspect; 80+ gboolean fullscreen; 81 82 GstKMSSyncMode sync_mode; 83 }; 84-- 852.20.1 86 87