1From e53fb661f705b96eefe16954df9e6437a2fd9555 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 40/41] 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 4538459..48d3f5b 100644
14--- a/sys/kms/gstkmssink.c
15+++ b/sys/kms/gstkmssink.c
16@@ -108,6 +108,7 @@ enum
17   PROP_SKIP_VSYNC,
18   PROP_FORCE_ASPECT_RATIO,
19   PROP_SYNC_MODE,
20+  PROP_FULLSCREEN,
21   PROP_N,
22 };
23
24@@ -2288,6 +2289,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@@ -2546,6 +2556,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@@ -2611,6 +2624,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@@ -2885,6 +2901,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 3e25665..d001ac8 100644
74--- a/sys/kms/gstkmssink.h
75+++ b/sys/kms/gstkmssink.h
76@@ -122,6 +122,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