# HG changeset patch # User michael # Date 1267107972 0 # Node ID db94c9bc5694f7fda480c376d29d99c928cd2e51 # Parent 613370892df26b53510e151b105cd03b7a0f53c3 Reorder intra4x4_pred_mode so that we can read/write 4 values at once. 3-7 cpu cycles faster diff -r 613370892df2 -r db94c9bc5694 h264.c --- a/h264.c Thu Feb 25 14:02:39 2010 +0000 +++ b/h264.c Thu Feb 25 14:26:12 2010 +0000 @@ -54,13 +54,10 @@ void ff_h264_write_back_intra_pred_mode(H264Context *h){ int8_t *mode= h->intra4x4_pred_mode + h->mb2br_xy[h->mb_xy]; - mode[0]= h->intra4x4_pred_mode_cache[7+8*1]; - mode[1]= h->intra4x4_pred_mode_cache[7+8*2]; - mode[2]= h->intra4x4_pred_mode_cache[7+8*3]; - mode[3]= h->intra4x4_pred_mode_cache[7+8*4]; - mode[4]= h->intra4x4_pred_mode_cache[4+8*4]; - mode[5]= h->intra4x4_pred_mode_cache[5+8*4]; - mode[6]= h->intra4x4_pred_mode_cache[6+8*4]; + AV_COPY32(mode, h->intra4x4_pred_mode_cache + 4 + 8*4); + mode[4]= h->intra4x4_pred_mode_cache[7+8*3]; + mode[5]= h->intra4x4_pred_mode_cache[7+8*2]; + mode[6]= h->intra4x4_pred_mode_cache[7+8*1]; } /** diff -r 613370892df2 -r db94c9bc5694 h264.h --- a/h264.h Thu Feb 25 14:02:39 2010 +0000 +++ b/h264.h Thu Feb 25 14:26:12 2010 +0000 @@ -886,11 +886,7 @@ if(IS_INTRA4x4(mb_type)){ if(IS_INTRA4x4(top_type)){ - int8_t *mode= h->intra4x4_pred_mode + h->mb2br_xy[top_xy]; - h->intra4x4_pred_mode_cache[4+8*0]= mode[4]; - h->intra4x4_pred_mode_cache[5+8*0]= mode[5]; - h->intra4x4_pred_mode_cache[6+8*0]= mode[6]; - h->intra4x4_pred_mode_cache[7+8*0]= mode[3]; + AV_COPY32(h->intra4x4_pred_mode_cache+4+8*0, h->intra4x4_pred_mode + h->mb2br_xy[top_xy]); }else{ int pred; if(!(top_type & type_mask)) @@ -906,8 +902,8 @@ for(i=0; i<2; i++){ if(IS_INTRA4x4(left_type[i])){ int8_t *mode= h->intra4x4_pred_mode + h->mb2br_xy[left_xy[i]]; - h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]= mode[left_block[0+2*i]]; - h->intra4x4_pred_mode_cache[3+8*2 + 2*8*i]= mode[left_block[1+2*i]]; + h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]= mode[6-left_block[0+2*i]]; + h->intra4x4_pred_mode_cache[3+8*2 + 2*8*i]= mode[6-left_block[1+2*i]]; }else{ int pred; if(!(left_type[i] & type_mask))