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:
parent
01df6700de
commit
84da7d44ef
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user