[FFmpeg-cvslog] r22161 - trunk/libavcodec/h264.h

michael subversion
Wed Mar 3 02:38:27 CET 2010


Author: michael
Date: Wed Mar  3 02:38:27 2010
New Revision: 22161

Log:
Load the whole left side of mv&ref only when needed.
30 cpu cycles faster

Modified:
   trunk/libavcodec/h264.h

Modified: trunk/libavcodec/h264.h
==============================================================================
--- trunk/libavcodec/h264.h	Wed Mar  3 01:09:57 2010	(r22160)
+++ trunk/libavcodec/h264.h	Wed Mar  3 02:38:27 2010	(r22161)
@@ -995,6 +995,7 @@ static void fill_decode_caches(H264Conte
                 AV_WN32A(&h->ref_cache[list][scan8[0] + 0 - 1*8], ((top_type ? LIST_NOT_USED : PART_NOT_AVAILABLE)&0xFF)*0x01010101);
             }
 
+            if(mb_type & (MB_TYPE_16x8|MB_TYPE_8x8)){
             for(i=0; i<2; i++){
                 int cache_idx = scan8[0] - 1 + i*2*8;
                 if(USES_LIST(left_type[i], list)){
@@ -1011,6 +1012,17 @@ static void fill_decode_caches(H264Conte
                     h->ref_cache[list][cache_idx+8]= (left_type[i]) ? LIST_NOT_USED : PART_NOT_AVAILABLE;
                 }
             }
+            }else{
+                if(USES_LIST(left_type[0], list)){
+                    const int b_xy= h->mb2b_xy[left_xy[0]] + 3;
+                    const int b8_xy= 4*left_xy[0] + 1;
+                    AV_COPY32(h->mv_cache[list][scan8[0] - 1], s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[0]]);
+                    h->ref_cache[list][scan8[0] - 1]= s->current_picture.ref_index[list][b8_xy + (left_block[0]&~1)];
+                }else{
+                    AV_ZERO32(h->mv_cache [list][scan8[0] - 1]);
+                    h->ref_cache[list][scan8[0] - 1]= left_type[0] ? LIST_NOT_USED : PART_NOT_AVAILABLE;
+                }
+            }
 
             if(USES_LIST(topright_type, list)){
                 const int b_xy= h->mb2b_xy[topright_xy] + 3*h->b_stride;



More information about the ffmpeg-cvslog mailing list