hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
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
From 74279dcea3e7f047193d8bf47e809e298458d408 Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Mon, 15 Nov 2021 15:12:54 +0800
Subject: [PATCH 53/74] gl-renderer: dmabuf: Support NV12(AFBC) and
 NV12_10(AFBC)
 
Support importing DRM_FORMAT_YUV420_(8|10)BIT dmabuf.
 
Tested on RK356x with:
gst-play-1.0 video.mp4 --videosink=waylandsink
 
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
 libweston/renderer-gl/gl-renderer.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 
diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c
index a059f36..ac79edd 100644
--- a/libweston/renderer-gl/gl-renderer.c
+++ b/libweston/renderer-gl/gl-renderer.c
@@ -63,6 +63,14 @@
 
 #define BUFFER_DAMAGE_COUNT 2
 
+#ifndef DRM_FORMAT_YUV420_8BIT
+#define DRM_FORMAT_YUV420_8BIT fourcc_code('Y', 'U', '0', '8')
+#endif
+
+#ifndef DRM_FORMAT_YUV420_10BIT
+#define DRM_FORMAT_YUV420_10BIT fourcc_code('Y', 'U', '1', '0')
+#endif
+
 enum gl_border_status {
     BORDER_STATUS_CLEAN = 0,
     BORDER_TOP_DIRTY = 1 << GL_RENDERER_BORDER_TOP,
@@ -2717,6 +2725,8 @@ choose_texture_target(struct gl_renderer *gr,
         return GL_TEXTURE_EXTERNAL_OES;
 
     switch (attributes->format & ~DRM_FORMAT_BIG_ENDIAN) {
+    case DRM_FORMAT_YUV420_8BIT:
+    case DRM_FORMAT_YUV420_10BIT:
     case DRM_FORMAT_YUYV:
     case DRM_FORMAT_YVYU:
     case DRM_FORMAT_UYVY:
@@ -2909,6 +2919,10 @@ dmabuf_is_opaque(struct linux_dmabuf_buffer *dmabuf)
 {
     const struct pixel_format_info *info;
 
+    if (dmabuf->attributes.format == DRM_FORMAT_YUV420_8BIT ||
+        dmabuf->attributes.format == DRM_FORMAT_YUV420_10BIT)
+        return true;
+
     info = pixel_format_get_info(dmabuf->attributes.format &
                      ~DRM_FORMAT_BIG_ENDIAN);
     if (!info)
-- 
2.20.1