vf_vavpp: do not pretend to support references

We do not fill them, so we would pass random IDs to the driver. The code
was originally written to handle bob deinterlacing only, so I guess it
originally passed always 0 anyway, despite having code for reference
surface list allocation.

Also, move down the vaUnmapBuffer() call. This call actually "unmaps"
the param pointer, so accessing it after the unmap call would be
undefined behavior. The "example" in <va/vavpp.h> does this too, but
it's most likely an error.

(Additionally, not even bob deinterlacing worked correctly in my test,
sigh.)
This commit is contained in:
wm4 2015-05-29 23:06:22 +02:00
parent ad85203d63
commit ed925c70c9
1 changed files with 5 additions and 3 deletions

View File

@ -168,11 +168,13 @@ static struct mp_image *render(struct vf_instance *vf, struct mp_image *in,
param->filter_flags = flags;
param->filters = p->pipe.filters;
param->num_filters = p->pipe.num_filters;
vaUnmapBuffer(p->display, buffer);
param->forward_references = p->pipe.forward.surfaces;
param->backward_references = p->pipe.backward.surfaces;
param->num_forward_references = p->pipe.forward.num_required;
param->num_backward_references = p->pipe.backward.num_required;
param->num_forward_references = 0;
param->num_backward_references = 0;
vaUnmapBuffer(p->display, buffer);
status = vaRenderPicture(p->display, p->context, &buffer, 1);
if (!check_error(vf, status, "vaRenderPicture()"))
break;