1
0
mirror of https://github.com/mpv-player/mpv synced 2025-01-31 20:21:49 +00:00

Handle negative height in draw_slice from FFmpeg in vd_ffmpeg.c, since at

least vo_xv and vo_sdl can not handle it and the scale filter seems
to work fine either way.
The FFmpeg vp3/Theora decoder produces such slices.
Fixes bug #1646.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30630 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2010-02-17 23:46:57 +00:00
parent 01df6700de
commit 84da7d44ef

View File

@ -480,6 +480,7 @@ static void draw_slice(struct AVCodecContext *s,
int y, int type, int height){
sh_video_t *sh = s->opaque;
uint8_t *source[MP_MAX_PLANES]= {src->data[0] + offset[0], src->data[1] + offset[1], src->data[2] + offset[2]};
int strides[MP_MAX_PLANES] = {src->linesize[0], src->linesize[1], src->linesize[2]};
#if 0
int start=0, i;
int width= s->width;
@ -502,8 +503,19 @@ static void draw_slice(struct AVCodecContext *s,
}
}else
#endif
if (height < 0)
{
int i;
height = -height;
y -= height;
for (i = 0; i < MP_MAX_PLANES; i++)
{
strides[i] = -strides[i];
source[i] -= strides[i];
}
}
if (y < sh->disp_h) {
mpcodecs_draw_slice (sh, source, src->linesize, sh->disp_w, (y+height)<=sh->disp_h?height:sh->disp_h-y, 0, y);
mpcodecs_draw_slice (sh, source, strides, sh->disp_w, (y+height)<=sh->disp_h?height:sh->disp_h-y, 0, y);
}
}