hc
2023-05-26 a23f51ed7a39e452c1037343a84d7db1ca2c5bd7
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 948609a6364f0a0407b3a790b9ac7077aa65b02c 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 13/40] 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 db98343..8637a53 100644
--- a/sys/kms/gstkmssink.c
+++ b/sys/kms/gstkmssink.c
@@ -469,6 +469,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;
 
@@ -1604,7 +1607,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.17.1