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 <daniels@collabora.com>
dev
Daniel Stone 3 years ago committed by Pekka Paalanen
parent 1654813903
commit 1a86963d51
  1. 34
      libweston/renderer-gl/gl-renderer.c

@ -119,8 +119,6 @@ struct dmabuf_format {
}; };
struct yuv_plane_descriptor { struct yuv_plane_descriptor {
int width_divisor;
int height_divisor;
uint32_t format; uint32_t format;
int plane_index; int plane_index;
}; };
@ -2291,13 +2289,9 @@ struct yuv_format_descriptor yuv_formats[] = {
.output_planes = 2, .output_planes = 2,
.shader_variant = SHADER_VARIANT_Y_XUXV, .shader_variant = SHADER_VARIANT_Y_XUXV,
{{ {{
.width_divisor = 1,
.height_divisor = 1,
.format = DRM_FORMAT_GR88, .format = DRM_FORMAT_GR88,
.plane_index = 0 .plane_index = 0
}, { }, {
.width_divisor = 2,
.height_divisor = 1,
.format = DRM_FORMAT_ARGB8888, .format = DRM_FORMAT_ARGB8888,
.plane_index = 0 .plane_index = 0
}} }}
@ -2306,13 +2300,9 @@ struct yuv_format_descriptor yuv_formats[] = {
.output_planes = 2, .output_planes = 2,
.shader_variant = SHADER_VARIANT_Y_UV, .shader_variant = SHADER_VARIANT_Y_UV,
{{ {{
.width_divisor = 1,
.height_divisor = 1,
.format = DRM_FORMAT_R8, .format = DRM_FORMAT_R8,
.plane_index = 0 .plane_index = 0
}, { }, {
.width_divisor = 2,
.height_divisor = 2,
.format = DRM_FORMAT_GR88, .format = DRM_FORMAT_GR88,
.plane_index = 1 .plane_index = 1
}} }}
@ -2321,18 +2311,12 @@ struct yuv_format_descriptor yuv_formats[] = {
.output_planes = 3, .output_planes = 3,
.shader_variant = SHADER_VARIANT_Y_U_V, .shader_variant = SHADER_VARIANT_Y_U_V,
{{ {{
.width_divisor = 1,
.height_divisor = 1,
.format = DRM_FORMAT_R8, .format = DRM_FORMAT_R8,
.plane_index = 0 .plane_index = 0
}, { }, {
.width_divisor = 2,
.height_divisor = 2,
.format = DRM_FORMAT_R8, .format = DRM_FORMAT_R8,
.plane_index = 1 .plane_index = 1
}, { }, {
.width_divisor = 2,
.height_divisor = 2,
.format = DRM_FORMAT_R8, .format = DRM_FORMAT_R8,
.plane_index = 2 .plane_index = 2
}} }}
@ -2341,18 +2325,12 @@ struct yuv_format_descriptor yuv_formats[] = {
.output_planes = 3, .output_planes = 3,
.shader_variant = SHADER_VARIANT_Y_U_V, .shader_variant = SHADER_VARIANT_Y_U_V,
{{ {{
.width_divisor = 1,
.height_divisor = 1,
.format = DRM_FORMAT_R8, .format = DRM_FORMAT_R8,
.plane_index = 0 .plane_index = 0
}, { }, {
.width_divisor = 1,
.height_divisor = 1,
.format = DRM_FORMAT_R8, .format = DRM_FORMAT_R8,
.plane_index = 1 .plane_index = 1
}, { }, {
.width_divisor = 1,
.height_divisor = 1,
.format = DRM_FORMAT_R8, .format = DRM_FORMAT_R8,
.plane_index = 2 .plane_index = 2
}} }}
@ -2361,8 +2339,6 @@ struct yuv_format_descriptor yuv_formats[] = {
.output_planes = 1, .output_planes = 1,
.shader_variant = SHADER_VARIANT_XYUV, .shader_variant = SHADER_VARIANT_XYUV,
{{ {{
.width_divisor = 1,
.height_divisor = 1,
.format = DRM_FORMAT_XBGR8888, .format = DRM_FORMAT_XBGR8888,
.plane_index = 0 .plane_index = 0
}} }}
@ -2371,15 +2347,19 @@ struct yuv_format_descriptor yuv_formats[] = {
static EGLImageKHR static EGLImageKHR
import_dmabuf_single_plane(struct gl_renderer *gr, import_dmabuf_single_plane(struct gl_renderer *gr,
const struct pixel_format_info *info,
int idx,
const struct dmabuf_attributes *attributes, const struct dmabuf_attributes *attributes,
struct yuv_plane_descriptor *descriptor) struct yuv_plane_descriptor *descriptor)
{ {
struct dmabuf_attributes plane; struct dmabuf_attributes plane;
EGLImageKHR image; EGLImageKHR image;
char fmt[4]; 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.width = attributes->width / hsub;
plane.height = attributes->height / descriptor->height_divisor; plane.height = attributes->height / vsub;
plane.format = descriptor->format; plane.format = descriptor->format;
plane.n_planes = 1; plane.n_planes = 1;
plane.fd[0] = attributes->fd[descriptor->plane_index]; 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) { 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]); &format->plane[j]);
if (gb->images[j] == EGL_NO_IMAGE_KHR) { if (gb->images[j] == EGL_NO_IMAGE_KHR) {
while (--j >= 0) { while (--j >= 0) {

Loading…
Cancel
Save