diff options
author | wm4 <wm4@nowhere> | 2015-04-26 18:56:46 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-04-26 18:56:46 +0200 |
commit | a5ed6e49bf87500ed606437901f00ae9b3da138f (patch) | |
tree | 1ccbb5ce34ad8293e67d3e8acb288159b23de970 /video | |
parent | 4df8c21f8125dfe083896fda51a6bf5084b4354f (diff) | |
download | mpv-a5ed6e49bf87500ed606437901f00ae9b3da138f.tar.bz2 mpv-a5ed6e49bf87500ed606437901f00ae9b3da138f.tar.xz |
vdpau: always render to cropped size at most
vo_opengl (or gl_hwdec_vdpau.c to be specific) calls
mp_vdpau_mixer_render() with video_rect=NULL, which means to use the
full surface. This is incorrect if the surface is actually cropped, as
it can happen with h264. In this case, it was rendering the parts
outside of the image.
Fix it by making this case use the cropped size instead.
Alternative fix for PR #1863.
Diffstat (limited to 'video')
-rw-r--r-- | video/vdpau_mixer.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/video/vdpau_mixer.c b/video/vdpau_mixer.c index 3c8f3fb908..1c6211352e 100644 --- a/video/vdpau_mixer.c +++ b/video/vdpau_mixer.c @@ -220,6 +220,10 @@ int mp_vdpau_mixer_render(struct mp_vdpau_mixer *mixer, { struct vdp_functions *vdp = &mixer->ctx->vdp; VdpStatus vdp_st; + VdpRect fallback_rect = {0, 0, video->w, video->h}; + + if (!video_rect) + video_rect = &fallback_rect; if (video->imgfmt == IMGFMT_VDPAU_OUTPUT) { VdpOutputSurface surface = (uintptr_t)video->planes[3]; |