OSDN Git Service

Fix dual prime motion compensation in field pictures.
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 30 Nov 2009 02:37:03 +0000 (02:37 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 30 Nov 2009 02:37:03 +0000 (02:37 +0000)
Fixes issue1125.

Originally committed as revision 20666 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mpeg12.c

index 74b8eea..2f8928d 100644 (file)
@@ -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<<my_shift;
+                        s->last_mv[i][1][1] = my<<my_shift;
 
                         s->mv[i][0][0] = mx;
                         s->mv[i][0][1] = my;