hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
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
From fe448bfac30eb1519bdf9340cb0c62a0cf163958 Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Tue, 20 Nov 2018 17:33:22 +0800
Subject: [PATCH 04/31] kmssink: Support render rectangle for plane
 
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
 sys/kms/gstkmssink.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
 
diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
index 788cefc..53bf4a1 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -471,6 +471,9 @@ configure_mode_setting (GstKMSSink * self, GstVideoInfo * vinfo)
   if (err)
     goto modesetting_failed;
 
+  self->hdisplay = mode->hdisplay;
+  self->vdisplay = mode->vdisplay;
+
   g_clear_pointer (&self->tmp_kmsmem, gst_memory_unref);
   self->tmp_kmsmem = (GstMemory *) kmsmem;
 
@@ -1606,7 +1609,14 @@ gst_kms_sink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
   GST_OBJECT_LOCK (self);
   if (self->modesetting_enabled) {
     self->buffer_id = fb_id;
-    goto sync_frame;
+
+    if (!self->render_rect.w || !self->render_rect.h)
+      goto sync_frame;
+
+    if (!self->render_rect.x && !self->render_rect.y &&
+        self->render_rect.w == self->hdisplay &&
+        self->render_rect.h == self->vdisplay)
+      goto sync_frame;
   }
 
   if ((crop = gst_buffer_get_video_crop_meta (buffer))) {
-- 
2.20.1