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
|