Module: Mesa Branch: master Commit: 96f89f440b9ad5cc2765dfa12265ca756aee83ea URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=96f89f440b9ad5cc2765dfa12265ca756aee83ea
Author: Leo Liu <leo....@amd.com> Date: Fri Sep 8 12:44:47 2017 -0400 st/va/postproc: add a full NV12 deint support from buffer I to P Before it's impossible to transcode an interlaced video, becasue if in order for encoder to work, we have to force buffer to progessive, but the deint with buffer from I to P is missing. Now along With the new YUV deint full function, it works with weave and bob deint. Also this will benefit transcoding video with scaling parameters. Acked-by: Christian König <christian.koe...@amd.com> --- src/gallium/state_trackers/va/postproc.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/va/postproc.c b/src/gallium/state_trackers/va/postproc.c index 6349691f4b..4449126316 100644 --- a/src/gallium/state_trackers/va/postproc.c +++ b/src/gallium/state_trackers/va/postproc.c @@ -116,9 +116,11 @@ static VAStatus vlVaPostProcBlit(vlVaDriver *drv, vlVaContext *context, { struct pipe_surface **src_surfaces; struct pipe_surface **dst_surfaces; + struct u_rect src_rect; + struct u_rect dst_rect; unsigned i; - if (src->interlaced != dst->interlaced) + if (src->interlaced != dst->interlaced && dst->interlaced) return VA_STATUS_ERROR_INVALID_SURFACE; src_surfaces = src->get_surfaces(src); @@ -129,6 +131,24 @@ static VAStatus vlVaPostProcBlit(vlVaDriver *drv, vlVaContext *context, if (!dst_surfaces || !dst_surfaces[0]) return VA_STATUS_ERROR_INVALID_SURFACE; + src_rect.x0 = src_region->x; + src_rect.y0 = src_region->y; + src_rect.x1 = src_region->x + src_region->width; + src_rect.y1 = src_region->y + src_region->height; + + dst_rect.x0 = dst_region->x; + dst_rect.y0 = dst_region->y; + dst_rect.x1 = dst_region->x + dst_region->width; + dst_rect.y1 = dst_region->y + dst_region->height; + + if (src->interlaced != dst->interlaced) { + vl_compositor_yuv_deint_full(&drv->cstate, &drv->compositor, + src, dst, &src_rect, &dst_rect, + deinterlace); + + return VA_STATUS_SUCCESS; + } + for (i = 0; i < VL_MAX_SURFACES; ++i) { struct pipe_surface *from = src_surfaces[i]; struct pipe_blit_info blit; _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit