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