From 32918099d3f57453bce481e16b0e2cc948320258 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Thu, 15 Sep 2022 18:18:07 +0800 Subject: [PATCH 39/48] kmssink: Support fullscreen prop Signed-off-by: Jeffy Chen --- sys/kms/gstkmssink.c | 25 +++++++++++++++++++++++++ sys/kms/gstkmssink.h | 1 + 2 files changed, 26 insertions(+) diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c index c2a889d..5b2ae38 100644 --- a/sys/kms/gstkmssink.c +++ b/sys/kms/gstkmssink.c @@ -108,6 +108,7 @@ enum PROP_SKIP_VSYNC, PROP_FORCE_ASPECT_RATIO, PROP_SYNC_MODE, + PROP_FULLSCREEN, PROP_N, }; @@ -2308,6 +2309,19 @@ retry_set_plane: src.w = video_width; src.h = video_height; + if (self->fullscreen) { + if (!self->can_scale && + (src.w != self->hdisplay || src.h != self->vdisplay)) { + GST_WARNING_OBJECT (self, "unable to scale to fullscreen"); + self->fullscreen = FALSE; + goto retry_set_plane; + } + + result.x = result.y = 0; + result.w = self->hdisplay; + result.h = self->vdisplay; + } + /* handle out of screen case */ if ((result.x + result.w) > self->hdisplay) result.w = self->hdisplay - result.x; @@ -2583,6 +2597,9 @@ gst_kms_sink_set_property (GObject * object, guint prop_id, case PROP_SYNC_MODE: sink->sync_mode = g_value_get_enum (value); break; + case PROP_FULLSCREEN: + sink->fullscreen = g_value_get_boolean (value); + break; default: if (!gst_video_overlay_set_property (object, PROP_N, prop_id, value)) G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -2648,6 +2665,9 @@ gst_kms_sink_get_property (GObject * object, guint prop_id, case PROP_SYNC_MODE: g_value_set_enum (value, sink->sync_mode); break; + case PROP_FULLSCREEN: + g_value_set_boolean (value, sink->fullscreen); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -2922,6 +2942,11 @@ gst_kms_sink_class_init (GstKMSSinkClass * klass) GST_TYPE_KMS_SYNC_MODE, DEFAULT_SYNC_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_properties[PROP_FULLSCREEN] = + g_param_spec_boolean ("fullscreen", "Fullscreen", + "Force showing fullscreen", FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (gobject_class, PROP_N, g_properties); gst_video_overlay_install_properties (gobject_class, PROP_N); diff --git a/sys/kms/gstkmssink.h b/sys/kms/gstkmssink.h index 0d3374d..5c4065a 100644 --- a/sys/kms/gstkmssink.h +++ b/sys/kms/gstkmssink.h @@ -124,6 +124,7 @@ struct _GstKMSSink { guintptr window_handle; gboolean keep_aspect; + gboolean fullscreen; GstKMSSyncMode sync_mode; }; -- 2.20.1