new/yocto/meta-rockchip/recipes-graphics/wayland/weston_10.0.2/0053-gl-renderer-dmabuf-Support-NV12-AFBC-and-NV12_10-AFB.patch

59 lines
1.7 KiB
Diff
Raw Normal View History

2025-05-10 21:58:58 +08:00
From d7e3f87bca25242f475a507ddbdfa37d358a7947 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/79] 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