Mercurial > libavcodec.hg
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 |