OSDN Git Service

minigbm: vc4: add YUV support
authorGurchetan Singh <gurchetansingh@chromium.org>
Mon, 23 Mar 2020 16:46:09 +0000 (09:46 -0700)
committerCommit Bot <commit-bot@chromium.org>
Fri, 23 Oct 2020 22:32:17 +0000 (22:32 +0000)
Ozone should work with VC4's MMAL in V4L2.

Change-Id: Ife783f7005628c49756f251692b0cc42e8b47d8c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/2115562
Reviewed-by: Ewan Roycroft <ewan.roycroft@bbc.co.uk>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Ewan Roycroft <ewan.roycroft@bbc.co.uk>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org>

vc4.c

diff --git a/vc4.c b/vc4.c
index 739016b..5ea4bc3 100644 (file)
--- a/vc4.c
+++ b/vc4.c
 static const uint32_t render_target_formats[] = { DRM_FORMAT_ARGB8888, DRM_FORMAT_RGB565,
                                                  DRM_FORMAT_XRGB8888 };
 
 static const uint32_t render_target_formats[] = { DRM_FORMAT_ARGB8888, DRM_FORMAT_RGB565,
                                                  DRM_FORMAT_XRGB8888 };
 
+static const uint32_t texture_only_formats[] = { DRM_FORMAT_NV12, DRM_FORMAT_YVU420 };
+
 static int vc4_init(struct driver *drv)
 {
        drv_add_combinations(drv, render_target_formats, ARRAY_SIZE(render_target_formats),
                             &LINEAR_METADATA, BO_USE_RENDER_MASK);
 
 static int vc4_init(struct driver *drv)
 {
        drv_add_combinations(drv, render_target_formats, ARRAY_SIZE(render_target_formats),
                             &LINEAR_METADATA, BO_USE_RENDER_MASK);
 
+       drv_add_combinations(drv, texture_only_formats, ARRAY_SIZE(texture_only_formats),
+                            &LINEAR_METADATA, BO_USE_TEXTURE_MASK);
+       /*
+        * Chrome uses DMA-buf mmap to write to YV12 buffers, which are then accessed by the
+        * Video Encoder Accelerator (VEA). It could also support NV12 potentially in the future.
+        */
+       drv_modify_combination(drv, DRM_FORMAT_YVU420, &LINEAR_METADATA, BO_USE_HW_VIDEO_ENCODER);
+       drv_modify_combination(drv, DRM_FORMAT_NV12, &LINEAR_METADATA,
+                              BO_USE_HW_VIDEO_DECODER | BO_USE_SCANOUT | BO_USE_HW_VIDEO_ENCODER);
+
        return drv_modify_linear_combinations(drv);
 }
 
        return drv_modify_linear_combinations(drv);
 }