From 74279dcea3e7f047193d8bf47e809e298458d408 Mon Sep 17 00:00:00 2001 From: Jeffy Chen 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 --- 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