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