comparison cabac.c @ 3993:8b7c59b7af01 libavcodec

make state transition tables global as they are constant and the code is slightly faster that way
author michael
date Wed, 11 Oct 2006 14:44:17 +0000
parents 72bae00a317f
children b2582438effe
comparison
equal deleted inserted replaced
3992:a09b5b667229 3993:8b7c59b7af01
49 { 8, 9, 11, 13}, { 7, 9, 11, 12}, { 7, 9, 10, 12}, { 7, 8, 10, 11}, 49 { 8, 9, 11, 13}, { 7, 9, 11, 12}, { 7, 9, 10, 12}, { 7, 8, 10, 11},
50 { 6, 8, 9, 11}, { 6, 7, 9, 10}, { 6, 7, 8, 9}, { 2, 2, 2, 2}, 50 { 6, 8, 9, 11}, { 6, 7, 9, 10}, { 6, 7, 8, 9}, { 2, 2, 2, 2},
51 }; 51 };
52 52
53 uint8_t ff_h264_lps_range[2*65][4]; 53 uint8_t ff_h264_lps_range[2*65][4];
54 54 uint8_t ff_h264_lps_state[2*64];
55 const uint8_t ff_h264_mps_state[64]= { 55 uint8_t ff_h264_mps_state[2*64];
56
57 static const uint8_t mps_state[64]= {
56 1, 2, 3, 4, 5, 6, 7, 8, 58 1, 2, 3, 4, 5, 6, 7, 8,
57 9,10,11,12,13,14,15,16, 59 9,10,11,12,13,14,15,16,
58 17,18,19,20,21,22,23,24, 60 17,18,19,20,21,22,23,24,
59 25,26,27,28,29,30,31,32, 61 25,26,27,28,29,30,31,32,
60 33,34,35,36,37,38,39,40, 62 33,34,35,36,37,38,39,40,
61 41,42,43,44,45,46,47,48, 63 41,42,43,44,45,46,47,48,
62 49,50,51,52,53,54,55,56, 64 49,50,51,52,53,54,55,56,
63 57,58,59,60,61,62,62,63, 65 57,58,59,60,61,62,62,63,
64 }; 66 };
65 67
66 const uint8_t ff_h264_lps_state[64]= { 68 static const uint8_t lps_state[64]= {
67 0, 0, 1, 2, 2, 4, 4, 5, 69 0, 0, 1, 2, 2, 4, 4, 5,
68 6, 7, 8, 9, 9,11,11,12, 70 6, 7, 8, 9, 9,11,11,12,
69 13,13,15,15,16,16,18,18, 71 13,13,15,15,16,16,18,18,
70 19,19,21,21,22,22,23,24, 72 19,19,21,21,22,22,23,24,
71 24,25,26,26,27,27,28,29, 73 24,25,26,26,27,27,28,29,
119 #endif 121 #endif
120 c->low+= ((*c->bytestream++)<<2) + 2; 122 c->low+= ((*c->bytestream++)<<2) + 2;
121 c->range= 0x1FE<<(CABAC_BITS + 1); 123 c->range= 0x1FE<<(CABAC_BITS + 1);
122 } 124 }
123 125
124 void ff_init_cabac_states(CABACContext *c, 126 void ff_init_cabac_states(CABACContext *c){
125 uint8_t const *mps_state, uint8_t const *lps_state, int state_count){
126 int i, j; 127 int i, j;
127 128
128 for(i=0; i<state_count; i++){ 129 for(i=0; i<64; i++){
129 for(j=0; j<4; j++){ //FIXME check if this is worth the 1 shift we save 130 for(j=0; j<4; j++){ //FIXME check if this is worth the 1 shift we save
130 ff_h264_lps_range[2*i+0][j+4]= 131 ff_h264_lps_range[2*i+0][j+4]=
131 ff_h264_lps_range[2*i+1][j+4]= lps_range[i][j]; 132 ff_h264_lps_range[2*i+1][j+4]= lps_range[i][j];
132 } 133 }
133 134
134 c->mps_state[2*i+0]= 2*mps_state[i]+0; 135 ff_h264_mps_state[2*i+0]= 2*mps_state[i]+0;
135 c->mps_state[2*i+1]= 2*mps_state[i]+1; 136 ff_h264_mps_state[2*i+1]= 2*mps_state[i]+1;
136 137
137 if( i ){ 138 if( i ){
138 #ifdef BRANCHLESS_CABAC_DECODER 139 #ifdef BRANCHLESS_CABAC_DECODER
139 c->mps_state[-2*i-1]= 2*lps_state[i]+0; //FIXME yes this is not valid C but iam lazy, cleanup welcome 140 ff_h264_mps_state[-2*i-1]= 2*lps_state[i]+0; //FIXME yes this is not valid C but iam lazy, cleanup welcome
140 c->mps_state[-2*i-2]= 2*lps_state[i]+1; 141 ff_h264_mps_state[-2*i-2]= 2*lps_state[i]+1;
141 }else{ 142 }else{
142 c->mps_state[-2*i-1]= 1; 143 ff_h264_mps_state[-2*i-1]= 1;
143 c->mps_state[-2*i-2]= 0; 144 ff_h264_mps_state[-2*i-2]= 0;
144 #else 145 #else
145 c->lps_state[2*i+0]= 2*lps_state[i]+0; 146 ff_h264_lps_state[2*i+0]= 2*lps_state[i]+0;
146 c->lps_state[2*i+1]= 2*lps_state[i]+1; 147 ff_h264_lps_state[2*i+1]= 2*lps_state[i]+1;
147 }else{ 148 }else{
148 c->lps_state[2*i+0]= 1; 149 ff_h264_lps_state[2*i+0]= 1;
149 c->lps_state[2*i+1]= 0; 150 ff_h264_lps_state[2*i+1]= 0;
150 #endif 151 #endif
151 } 152 }
152 } 153 }
153 } 154 }
154 155