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.
---
 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 489d40f..63e2c3b 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;
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to