comparison h264.h @ 11285:613370892df2 libavcodec

Store intra4x4_pred_mode per row only. about 5 cpu cycles slower in the local code but should be overall faster due to reduced cache use. (my sample though has too few intra4x4 blocks for this to be meassureable easily either way)
author michael
date Thu, 25 Feb 2010 14:02:39 +0000
parents aaca4b58880f
children db94c9bc5694
comparison
equal deleted inserted replaced
11284:aaca4b58880f 11285:613370892df2
296 296
297 const uint8_t * left_block; 297 const uint8_t * left_block;
298 int topleft_partition; 298 int topleft_partition;
299 299
300 int8_t intra4x4_pred_mode_cache[5*8]; 300 int8_t intra4x4_pred_mode_cache[5*8];
301 int8_t (*intra4x4_pred_mode)[8]; 301 int8_t (*intra4x4_pred_mode);
302 H264PredContext hpc; 302 H264PredContext hpc;
303 unsigned int topleft_samples_available; 303 unsigned int topleft_samples_available;
304 unsigned int top_samples_available; 304 unsigned int top_samples_available;
305 unsigned int topright_samples_available; 305 unsigned int topright_samples_available;
306 unsigned int left_samples_available; 306 unsigned int left_samples_available;
884 if(!(topright_type & type_mask)) 884 if(!(topright_type & type_mask))
885 h->topright_samples_available&= 0xFBFF; 885 h->topright_samples_available&= 0xFBFF;
886 886
887 if(IS_INTRA4x4(mb_type)){ 887 if(IS_INTRA4x4(mb_type)){
888 if(IS_INTRA4x4(top_type)){ 888 if(IS_INTRA4x4(top_type)){
889 h->intra4x4_pred_mode_cache[4+8*0]= h->intra4x4_pred_mode[top_xy][4]; 889 int8_t *mode= h->intra4x4_pred_mode + h->mb2br_xy[top_xy];
890 h->intra4x4_pred_mode_cache[5+8*0]= h->intra4x4_pred_mode[top_xy][5]; 890 h->intra4x4_pred_mode_cache[4+8*0]= mode[4];
891 h->intra4x4_pred_mode_cache[6+8*0]= h->intra4x4_pred_mode[top_xy][6]; 891 h->intra4x4_pred_mode_cache[5+8*0]= mode[5];
892 h->intra4x4_pred_mode_cache[7+8*0]= h->intra4x4_pred_mode[top_xy][3]; 892 h->intra4x4_pred_mode_cache[6+8*0]= mode[6];
893 h->intra4x4_pred_mode_cache[7+8*0]= mode[3];
893 }else{ 894 }else{
894 int pred; 895 int pred;
895 if(!(top_type & type_mask)) 896 if(!(top_type & type_mask))
896 pred= -1; 897 pred= -1;
897 else{ 898 else{
902 h->intra4x4_pred_mode_cache[6+8*0]= 903 h->intra4x4_pred_mode_cache[6+8*0]=
903 h->intra4x4_pred_mode_cache[7+8*0]= pred; 904 h->intra4x4_pred_mode_cache[7+8*0]= pred;
904 } 905 }
905 for(i=0; i<2; i++){ 906 for(i=0; i<2; i++){
906 if(IS_INTRA4x4(left_type[i])){ 907 if(IS_INTRA4x4(left_type[i])){
907 h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]= h->intra4x4_pred_mode[left_xy[i]][left_block[0+2*i]]; 908 int8_t *mode= h->intra4x4_pred_mode + h->mb2br_xy[left_xy[i]];
908 h->intra4x4_pred_mode_cache[3+8*2 + 2*8*i]= h->intra4x4_pred_mode[left_xy[i]][left_block[1+2*i]]; 909 h->intra4x4_pred_mode_cache[3+8*1 + 2*8*i]= mode[left_block[0+2*i]];
910 h->intra4x4_pred_mode_cache[3+8*2 + 2*8*i]= mode[left_block[1+2*i]];
909 }else{ 911 }else{
910 int pred; 912 int pred;
911 if(!(left_type[i] & type_mask)) 913 if(!(left_type[i] & type_mask))
912 pred= -1; 914 pred= -1;
913 else{ 915 else{