OSDN Git Service

Branchless calculation of ref_offset.
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 8 Feb 2010 03:22:17 +0000 (03:22 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 8 Feb 2010 03:22:17 +0000 (03:22 +0000)
7 cpu cycles faster.

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

libavcodec/h264_direct.c

index 5a27f85..8da890d 100644 (file)
@@ -361,15 +361,14 @@ single_col:
     }else{ /* direct temporal mv pred */
         const int *map_col_to_list0[2] = {h->map_col_to_list0[0], h->map_col_to_list0[1]};
         const int *dist_scale_factor = h->dist_scale_factor;
-        int ref_offset= 0;
+        int ref_offset;
 
         if(FRAME_MBAFF && IS_INTERLACED(*mb_type)){
             map_col_to_list0[0] = h->map_col_to_list0_field[s->mb_y&1][0];
             map_col_to_list0[1] = h->map_col_to_list0_field[s->mb_y&1][1];
             dist_scale_factor   =h->dist_scale_factor_field[s->mb_y&1];
         }
-        if(h->ref_list[1][0].mbaff && IS_INTERLACED(mb_type_col[0]))
-            ref_offset += 16;
+        ref_offset = (h->ref_list[1][0].mbaff<<4) & (mb_type_col[0]>>3); //if(h->ref_list[1][0].mbaff && IS_INTERLACED(mb_type_col[0])) ref_offset=16 else 0
 
         if(IS_INTERLACED(*mb_type) != IS_INTERLACED(mb_type_col[0])){
             int y_shift  = 2*!IS_INTERLACED(*mb_type);