OSDN Git Service

meson: Add support for YUV formats
authorDaniel Nicoara <dnicoara@chromium.org>
Thu, 9 Jul 2020 23:15:42 +0000 (19:15 -0400)
committerCommit Bot <commit-bot@chromium.org>
Fri, 10 Jul 2020 19:29:54 +0000 (19:29 +0000)
Add support to allocate a number of YUV formats. Particularly around
NV12 which can be used in the camera and encoder. This will allow
allocating/sharing buffers across multiple devices via dmabuf.

BUG=b/159467426
TEST=Allocate NV12 buffer and composite it on the GPU.

Change-Id: I9b5dc54dae7f578f7e099a64bd67589658693534
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/2291194
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Commit-Queue: Daniel Nicoara <dnicoara@chromium.org>
Tested-by: Daniel Nicoara <dnicoara@chromium.org>
meson.c

diff --git a/meson.c b/meson.c
index f82c57a..27469e7 100644 (file)
--- a/meson.c
+++ b/meson.c
@@ -14,11 +14,22 @@ static const uint32_t scanout_render_formats[] = { DRM_FORMAT_ARGB8888, DRM_FORM
                                                   DRM_FORMAT_ABGR8888, DRM_FORMAT_XBGR8888,
                                                   DRM_FORMAT_BGR888, DRM_FORMAT_BGR565};
 
+static const uint32_t texture_only_formats[] = { DRM_FORMAT_NV12, DRM_FORMAT_NV21,
+                                                DRM_FORMAT_YVU420, DRM_FORMAT_YVU420_ANDROID};
+
 static int meson_init(struct driver *drv)
 {
        drv_add_combinations(drv, scanout_render_formats, ARRAY_SIZE(scanout_render_formats),
                             &LINEAR_METADATA, BO_USE_RENDER_MASK | BO_USE_SCANOUT);
 
+       drv_add_combinations(drv, texture_only_formats, ARRAY_SIZE(texture_only_formats),
+                            &LINEAR_METADATA, BO_USE_TEXTURE_MASK);
+
+       drv_modify_combination(drv, DRM_FORMAT_NV12, &LINEAR_METADATA,
+                              BO_USE_HW_VIDEO_ENCODER | BO_USE_HW_VIDEO_DECODER |
+                              BO_USE_CAMERA_READ | BO_USE_CAMERA_WRITE);
+       drv_modify_combination(drv, DRM_FORMAT_NV21, &LINEAR_METADATA, BO_USE_HW_VIDEO_ENCODER);
+
        return drv_modify_linear_combinations(drv);
 }