[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