exchange for() and if() order in the MT_FRAME case
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 1 Aug 2007 21:05:58 +0000 (21:05 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 1 Aug 2007 21:05:58 +0000 (21:05 +0000)
safes 24 cpu cycles

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

libavcodec/mpeg12.c

index 22659e3..76af2c4 100644 (file)
@@ -378,13 +378,13 @@ static int mpeg_decode_mb(MpegEncContext *s,
             dprintf(s->avctx, "motion_type=%d\n", motion_type);
             switch(motion_type) {
             case MT_FRAME: /* or MT_16X8 */
-                for(i=0;i<2;i++) {
-                    if (USES_LIST(mb_type, i)) {
-                        s->mv_dir |= (MV_DIR_FORWARD >> i);
-                        if (s->picture_structure == PICT_FRAME) {
+                if (s->picture_structure == PICT_FRAME) {
+                    mb_type |= MB_TYPE_16x16;
+                    s->mv_type = MV_TYPE_16X16;
+                    for(i=0;i<2;i++) {
+                        if (USES_LIST(mb_type, i)) {
+                            s->mv_dir |= (MV_DIR_FORWARD >> i);
                             /* MT_FRAME */
-                            mb_type |= MB_TYPE_16x16;
-                            s->mv_type = MV_TYPE_16X16;
                             s->mv[i][0][0]= s->last_mv[i][0][0]= s->last_mv[i][1][0] =
                                 mpeg_decode_motion(s, s->mpeg_f_code[i][0], s->last_mv[i][0][0]);
                             s->mv[i][0][1]= s->last_mv[i][0][1]= s->last_mv[i][1][1] =
@@ -394,10 +394,15 @@ static int mpeg_decode_mb(MpegEncContext *s,
                                 s->mv[i][0][0] <<= 1;
                                 s->mv[i][0][1] <<= 1;
                             }
-                        } else {
+                        }
+                    }
+                } else {
+                    mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
+                    s->mv_type = MV_TYPE_16X8;
+                    for(i=0;i<2;i++) {
+                        if (USES_LIST(mb_type, i)) {
+                            s->mv_dir |= (MV_DIR_FORWARD >> i);
                             /* MT_16X8 */
-                            mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
-                            s->mv_type = MV_TYPE_16X8;
                             for(j=0;j<2;j++) {
                                 s->field_select[i][j] = get_bits1(&s->gb);
                                 for(k=0;k<2;k++) {