[Mesa-dev] [PATCH] st/va: Fix forward/backward referencing for deinterlacing

Christian König deathsimple at vodafone.de
Thu Mar 2 10:49:46 UTC 2017


Am 01.03.2017 um 21:07 schrieb Mark Thompson:
> The VAAPI documentation is not very clear here, but the intent
> appears to be that a forward reference is forward from a frame in the
> past, not forward to a frame in the future (that is, forward as in
> forward prediction, not as in a forward reference in source code).
> This interpretation is derived from other implementations, in
> particular the i965 driver and the gstreamer client.
>
> In order to match those other implementations, this patch swaps the
> meaning of forward and backward references as they currently appear
> for motion-adaptive deinterlacing.
>
> Signed-off-by: Mark Thompson <sw at jkqxz.net>

That explains a couple of things, thanks for looking into it.

Patch is Reviewed-by: Christian König <christian.koenig at amd.com>.

Regards,
Christian.

> ---
>   src/gallium/state_trackers/va/postproc.c | 10 +++++-----
>   src/gallium/state_trackers/va/surface.c  |  4 ++--
>   2 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/state_trackers/va/postproc.c b/src/gallium/state_trackers/va/postproc.c
> index 01e240f016..fbec69aec3 100644
> --- a/src/gallium/state_trackers/va/postproc.c
> +++ b/src/gallium/state_trackers/va/postproc.c
> @@ -184,13 +184,13 @@ vlVaApplyDeint(vlVaDriver *drv, vlVaContext *context,
>   {
>      vlVaSurface *prevprev, *prev, *next;
>   
> -   if (param->num_forward_references < 1 ||
> -       param->num_backward_references < 2)
> +   if (param->num_forward_references < 2 ||
> +       param->num_backward_references < 1)
>         return current;
>   
> -   prevprev = handle_table_get(drv->htab, param->backward_references[1]);
> -   prev = handle_table_get(drv->htab, param->backward_references[0]);
> -   next = handle_table_get(drv->htab, param->forward_references[0]);
> +   prevprev = handle_table_get(drv->htab, param->forward_references[1]);
> +   prev = handle_table_get(drv->htab, param->forward_references[0]);
> +   next = handle_table_get(drv->htab, param->backward_references[0]);
>   
>      if (!prevprev || !prev || !next)
>         return current;
> diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c
> index 0e1dbe0b10..b129e6c74f 100644
> --- a/src/gallium/state_trackers/va/surface.c
> +++ b/src/gallium/state_trackers/va/surface.c
> @@ -845,8 +845,8 @@ vlVaQueryVideoProcPipelineCaps(VADriverContextP ctx, VAContextID context,
>         case VAProcFilterDeinterlacing: {
>            VAProcFilterParameterBufferDeinterlacing *deint = buf->data;
>            if (deint->algorithm == VAProcDeinterlacingMotionAdaptive) {
> -            pipeline_cap->num_forward_references = 1;
> -            pipeline_cap->num_backward_references = 2;
> +            pipeline_cap->num_forward_references = 2;
> +            pipeline_cap->num_backward_references = 1;
>            }
>            break;
>         }




More information about the mesa-dev mailing list