From 1a86963d5150aa4a8315dc806b8621e115d90dd8 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Thu, 28 Apr 2022 01:53:05 +0100 Subject: [PATCH] gl-renderer: Get YUV subsampling from pixel-formats We already have the subsampling levels in pixel-formats - no need to type it out again here. Signed-off-by: Daniel Stone --- libweston/renderer-gl/gl-renderer.c | 34 ++++++----------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index 85edd7db..35aec3b0 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -119,8 +119,6 @@ struct dmabuf_format { }; struct yuv_plane_descriptor { - int width_divisor; - int height_divisor; uint32_t format; int plane_index; }; @@ -2291,13 +2289,9 @@ struct yuv_format_descriptor yuv_formats[] = { .output_planes = 2, .shader_variant = SHADER_VARIANT_Y_XUXV, {{ - .width_divisor = 1, - .height_divisor = 1, .format = DRM_FORMAT_GR88, .plane_index = 0 }, { - .width_divisor = 2, - .height_divisor = 1, .format = DRM_FORMAT_ARGB8888, .plane_index = 0 }} @@ -2306,13 +2300,9 @@ struct yuv_format_descriptor yuv_formats[] = { .output_planes = 2, .shader_variant = SHADER_VARIANT_Y_UV, {{ - .width_divisor = 1, - .height_divisor = 1, .format = DRM_FORMAT_R8, .plane_index = 0 }, { - .width_divisor = 2, - .height_divisor = 2, .format = DRM_FORMAT_GR88, .plane_index = 1 }} @@ -2321,18 +2311,12 @@ struct yuv_format_descriptor yuv_formats[] = { .output_planes = 3, .shader_variant = SHADER_VARIANT_Y_U_V, {{ - .width_divisor = 1, - .height_divisor = 1, .format = DRM_FORMAT_R8, .plane_index = 0 }, { - .width_divisor = 2, - .height_divisor = 2, .format = DRM_FORMAT_R8, .plane_index = 1 }, { - .width_divisor = 2, - .height_divisor = 2, .format = DRM_FORMAT_R8, .plane_index = 2 }} @@ -2341,18 +2325,12 @@ struct yuv_format_descriptor yuv_formats[] = { .output_planes = 3, .shader_variant = SHADER_VARIANT_Y_U_V, {{ - .width_divisor = 1, - .height_divisor = 1, .format = DRM_FORMAT_R8, .plane_index = 0 }, { - .width_divisor = 1, - .height_divisor = 1, .format = DRM_FORMAT_R8, .plane_index = 1 }, { - .width_divisor = 1, - .height_divisor = 1, .format = DRM_FORMAT_R8, .plane_index = 2 }} @@ -2361,8 +2339,6 @@ struct yuv_format_descriptor yuv_formats[] = { .output_planes = 1, .shader_variant = SHADER_VARIANT_XYUV, {{ - .width_divisor = 1, - .height_divisor = 1, .format = DRM_FORMAT_XBGR8888, .plane_index = 0 }} @@ -2371,15 +2347,19 @@ struct yuv_format_descriptor yuv_formats[] = { static EGLImageKHR import_dmabuf_single_plane(struct gl_renderer *gr, + const struct pixel_format_info *info, + int idx, const struct dmabuf_attributes *attributes, struct yuv_plane_descriptor *descriptor) { struct dmabuf_attributes plane; EGLImageKHR image; char fmt[4]; + int hsub = pixel_format_hsub(info, idx); + int vsub = pixel_format_vsub(info, idx); - plane.width = attributes->width / descriptor->width_divisor; - plane.height = attributes->height / descriptor->height_divisor; + plane.width = attributes->width / hsub; + plane.height = attributes->height / vsub; plane.format = descriptor->format; plane.n_planes = 1; plane.fd[0] = attributes->fd[descriptor->plane_index]; @@ -2438,7 +2418,7 @@ import_yuv_dmabuf(struct gl_renderer *gr, struct gl_buffer_state *gb, } for (j = 0; j < format->output_planes; ++j) { - gb->images[j] = import_dmabuf_single_plane(gr, attributes, + gb->images[j] = import_dmabuf_single_plane(gr, info, j, attributes, &format->plane[j]); if (gb->images[j] == EGL_NO_IMAGE_KHR) { while (--j >= 0) {