From ed925c70c93af2e98239b5c2cdc3d0adfab44a39 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 29 May 2015 23:06:22 +0200 Subject: 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 does this too, but it's most likely an error. (Additionally, not even bob deinterlacing worked correctly in my test, sigh.) --- video/filter/vf_vavpp.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'video') diff --git a/video/filter/vf_vavpp.c b/video/filter/vf_vavpp.c index f62788f98a..c41afe1955 100644 --- a/video/filter/vf_vavpp.c +++ b/video/filter/vf_vavpp.c @@ -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; -- cgit v1.2.3