From: Michael Niedermayer Date: Mon, 30 Nov 2009 02:37:03 +0000 (+0000) Subject: Fix dual prime motion compensation in field pictures. X-Git-Tag: v0.6~2516 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=f0ec23943861c42b2633c821ddfac45c61899973;p=coroid%2Flibav_saccubus.git Fix dual prime motion compensation in field pictures. Fixes issue1125. Originally committed as revision 20666 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 74b8eea86..2f8928dee 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -448,18 +448,20 @@ static int mpeg_decode_mb(MpegEncContext *s, for(i=0;i<2;i++) { if (USES_LIST(mb_type, i)) { int dmx, dmy, mx, my, m; + const int my_shift= s->picture_structure == PICT_FRAME; + mx = mpeg_decode_motion(s, s->mpeg_f_code[i][0], s->last_mv[i][0][0]); s->last_mv[i][0][0] = mx; s->last_mv[i][1][0] = mx; dmx = get_dmv(s); my = mpeg_decode_motion(s, s->mpeg_f_code[i][1], - s->last_mv[i][0][1] >> 1); + s->last_mv[i][0][1] >> my_shift); dmy = get_dmv(s); - s->last_mv[i][0][1] = my<<1; - s->last_mv[i][1][1] = my<<1; + s->last_mv[i][0][1] = my<last_mv[i][1][1] = my<mv[i][0][0] = mx; s->mv[i][0][1] = my;