From 08cff938b76b6fe146334e44dc97b6be8274a281 Mon Sep 17 00:00:00 2001 From: Thong Thai Date: Thu, 13 Feb 2020 11:03:12 -0500 Subject: [PATCH 1/1] Revert "st/va: Convert interlaced NV12 to progressive" This reverts commit 2add63060b51ea2ae432d10e1bd52d6cc0a4dcbb. Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2454 Fixes: 2add63060b51 "st/va: Convert interlaced NV12 to progressive" Signed-off-by: Thong Thai Acked-by: Leo Liu Tested-by: Marge Bot Part-of: --- src/gallium/state_trackers/va/image.c | 55 ++------------------------- 1 file changed, 4 insertions(+), 51 deletions(-) diff --git a/src/gallium/state_trackers/va/image.c b/src/gallium/state_trackers/va/image.c index 0a54a90cb4c..b0e32da3e8b 100644 --- a/src/gallium/state_trackers/va/image.c +++ b/src/gallium/state_trackers/va/image.c @@ -223,8 +223,7 @@ vlVaDeriveImage(VADriverContextP ctx, VASurfaceID surface, VAImage *image) if (!surf || !surf->buffer) return VA_STATUS_ERROR_INVALID_SURFACE; - if (surf->buffer->interlaced && - surf->buffer->buffer_format != PIPE_FORMAT_NV12) + if (surf->buffer->interlaced) return VA_STATUS_ERROR_OPERATION_FAILED; surfaces = surf->buffer->get_surfaces(surf->buffer); @@ -261,10 +260,6 @@ vlVaDeriveImage(VADriverContextP ctx, VASurfaceID surface, VAImage *image) offset = 0; } - img->num_planes = 1; - img->offsets[0] = offset; - img->data_size = img->pitches[0] * h; - switch (img->format.fourcc) { case VA_FOURCC('U','Y','V','Y'): case VA_FOURCC('Y','U','Y','V'): @@ -280,51 +275,6 @@ vlVaDeriveImage(VADriverContextP ctx, VASurfaceID surface, VAImage *image) assert(img->pitches[0] >= (w * 4)); break; - case VA_FOURCC('P','0','1','0'): - case VA_FOURCC('P','0','1','6'): - case VA_FOURCC('N','V','1','2'): - if (surf->buffer->interlaced) { - struct pipe_video_buffer *new_buffer; - struct u_rect src_rect, dst_rect; - - surf->templat.interlaced = false; - new_buffer = drv->pipe->create_video_buffer(drv->pipe, &surf->templat); - - /* convert the interlaced to the progressive */ - src_rect.x0 = dst_rect.x0 = 0; - src_rect.x1 = dst_rect.x1 = surf->templat.width; - src_rect.y0 = dst_rect.y0 = 0; - src_rect.y1 = dst_rect.y1 = surf->templat.height; - - vl_compositor_yuv_deint_full(&drv->cstate, &drv->compositor, - surf->buffer, new_buffer, - &src_rect, &dst_rect, - VL_COMPOSITOR_WEAVE); - - surf->buffer->destroy(surf->buffer); - surf->buffer = new_buffer; - - /* recalculate the values now that we have a new surface */ - surfaces = surf->buffer->get_surfaces(surf->buffer); - if (screen->resource_get_info) { - screen->resource_get_info(screen, surfaces[0]->texture, &stride, - &offset); - if (!stride) - offset = 0; - } - - w = align(surf->buffer->width, 2); - h = align(surf->buffer->height, 2); - } - - img->num_planes = 2; - img->pitches[0] = stride > 0 ? stride : w; - img->offsets[0] = 0; - img->pitches[1] = stride > 0 ? stride : w; - img->offsets[1] = (stride > 0 ? stride : w) * h; - img->data_size = (stride > 0 ? stride : w) * h * 3 / 2; - break; - default: /* VaDeriveImage only supports contiguous planes. But there is now a more generic api vlVaExportSurfaceHandle. */ @@ -333,6 +283,9 @@ vlVaDeriveImage(VADriverContextP ctx, VASurfaceID surface, VAImage *image) return VA_STATUS_ERROR_OPERATION_FAILED; } + img->num_planes = 1; + img->offsets[0] = offset; + img->data_size = img->pitches[0] * h; img_buf = CALLOC(1, sizeof(vlVaBuffer)); if (!img_buf) { -- 2.30.2