hc
2023-02-14 0cc9b7c44253c93447ddf73e206fbdbb3d9f16b1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
From 1a0b32f5264b96e42cb6b05782c24451551bb80f Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Thu, 15 Sep 2022 18:18:07 +0800
Subject: [PATCH 39/39] kmssink: Support fullscreen prop
 
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
 sys/kms/gstkmssink.c | 21 +++++++++++++++++++++
 sys/kms/gstkmssink.h |  1 +
 2 files changed, 22 insertions(+)
 
diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index a27f569..f07ab6f 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -100,6 +100,7 @@ enum
   PROP_PLANE_PROPS,
   PROP_FORCE_ASPECT_RATIO,
   PROP_SYNC_MODE,
+  PROP_FULLSCREEN,
   PROP_N,
 };
 
@@ -1974,6 +1975,15 @@ retry_set_plane:
     src.h = video_height;
   }
 
+  if (self->fullscreen) {
+    if (self->can_scale ||
+        (src.w == self->hdisplay && src.h == self->vdisplay)) {
+      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;
@@ -2176,6 +2186,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);
@@ -2235,6 +2248,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;
@@ -2469,6 +2485,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 274351e..1981036 100644
--- a/sys/kms/gstkmssink.h
+++ b/sys/kms/gstkmssink.h
@@ -106,6 +106,7 @@ struct _GstKMSSink {
   guintptr window_handle;
 
   gboolean keep_aspect;
+  gboolean fullscreen;
 
   GstKMSSyncMode sync_mode;
 };
-- 
2.20.1