From 2ed9370bd69806685ae18897831dac6ab90f5ea5 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 23 Sep 2015 14:13:32 +0200 Subject: vf_vavpp: allocate output surfaces with the same size as input This can happen if the hw decoder allocates padded surfaces (e.g. mod16), but the VPP output surface was allocated with the exact size. Apparently VPP requires matching input and output sizes, or it will add artifacts. In this case, it added mirrored pixels to the bottom few pixels. Note that the previous commit should have fixed this. But it didn't work, while this commit does. Fixes #2320. --- video/vaapi.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'video/vaapi.c') diff --git a/video/vaapi.c b/video/vaapi.c index 9bc5953ad0..7a8210be6a 100644 --- a/video/vaapi.c +++ b/video/vaapi.c @@ -210,6 +210,15 @@ int va_surface_rt_format(struct mp_image *mpi) return surface ? surface->rt_format : 0; } +// Return the real size of the underlying surface. (HW decoding might allocate +// padded surfaces for example.) +void va_surface_get_uncropped_size(struct mp_image *mpi, int *out_w, int *out_h) +{ + struct va_surface *s = va_surface_in_mp_image(mpi); + *out_w = s ? s->w : 0; + *out_h = s ? s->h : 0; +} + static void release_va_surface(void *arg) { struct va_surface *surface = arg; -- cgit v1.2.3