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