comparison cabac.c @ 1290:dae280b939ca libavcodec

(truncated) unary binerization unary k-th order exp golomb binarization
author michaelni
date Fri, 30 May 2003 01:05:48 +0000
parents 9211fbd31353
children 5bc3184810dc
comparison
equal deleted inserted replaced
1289:57172377849a 1290:dae280b939ca
125 #if 0 //selftest 125 #if 0 //selftest
126 #define SIZE 10240 126 #define SIZE 10240
127 int main(){ 127 int main(){
128 CABACContext c; 128 CABACContext c;
129 uint8_t b[9*SIZE]; 129 uint8_t b[9*SIZE];
130 uint8_t bit[9*SIZE]; 130 uint8_t r[9*SIZE];
131 int i; 131 int i;
132 uint8_t state= 0; 132 uint8_t state[10]= {0};
133 133
134 ff_init_cabac_encoder(&c, b, SIZE); 134 ff_init_cabac_encoder(&c, b, SIZE);
135 ff_init_cabac_states(&c, ff_h264_lps_range, ff_h264_mps_state, ff_h264_lps_state, 64); 135 ff_init_cabac_states(&c, ff_h264_lps_range, ff_h264_mps_state, ff_h264_lps_state, 64);
136 136
137 for(i=0; i<SIZE; i++){ 137 for(i=0; i<SIZE; i++){
138 bit[i]= (random()%7)&1; 138 r[i]= random()%7;
139 } 139 }
140 140
141 for(i=0; i<SIZE; i++){ 141 for(i=0; i<SIZE; i++){
142 START_TIMER 142 START_TIMER
143 put_cabac_bypass(&c, bit[i]); 143 put_cabac_bypass(&c, r[i]&1);
144 STOP_TIMER("put_cabac_bypass") 144 STOP_TIMER("put_cabac_bypass")
145 } 145 }
146 146
147 for(i=0; i<SIZE; i++){ 147 for(i=0; i<SIZE; i++){
148 START_TIMER 148 START_TIMER
149 put_cabac(&c, &state, bit[i]); 149 put_cabac(&c, state, r[i]&1);
150 STOP_TIMER("put_cabac") 150 STOP_TIMER("put_cabac")
151 } 151 }
152 152
153 for(i=0; i<SIZE; i++){
154 START_TIMER
155 put_cabac_u(&c, state, r[i], 6, 3, i&1);
156 STOP_TIMER("put_cabac_u")
157 }
158
159 for(i=0; i<SIZE; i++){
160 START_TIMER
161 put_cabac_ueg(&c, state, r[i], 0, 3, 0, 1, 2);
162 STOP_TIMER("put_cabac_ueg")
163 }
164
153 put_cabac_terminate(&c, 1); 165 put_cabac_terminate(&c, 1);
154 166
155 ff_init_cabac_decoder(&c, b, SIZE); 167 ff_init_cabac_decoder(&c, b, SIZE);
156 168
157 state=0; 169 memset(state, 0, sizeof(state));
158 170
159 for(i=0; i<SIZE; i++){ 171 for(i=0; i<SIZE; i++){
160 START_TIMER 172 START_TIMER
161 if( bit[i] != get_cabac_bypass(&c) ) 173 if( (r[i]&1) != get_cabac_bypass(&c) )
162 printf("CABAC bypass failure at %d\n", i); 174 printf("CABAC bypass failure at %d\n", i);
163 STOP_TIMER("get_cabac_bypass") 175 STOP_TIMER("get_cabac_bypass")
164 } 176 }
165 177
166 for(i=0; i<SIZE; i++){ 178 for(i=0; i<SIZE; i++){
167 START_TIMER 179 START_TIMER
168 if( bit[i] != get_cabac(&c, &state) ) 180 if( (r[i]&1) != get_cabac(&c, state) )
169 printf("CABAC failure at %d\n", i); 181 printf("CABAC failure at %d\n", i);
170 STOP_TIMER("get_cabac") 182 STOP_TIMER("get_cabac")
171 } 183 }
172 184
185 for(i=0; i<SIZE; i++){
186 START_TIMER
187 if( r[i] != get_cabac_u(&c, state, (i&1) ? 6 : 7, 3, i&1) )
188 printf("CABAC unary (truncated) binarization failure at %d\n", i);
189 STOP_TIMER("get_cabac_u")
190 }
191
192 for(i=0; i<SIZE; i++){
193 START_TIMER
194 if( r[i] != get_cabac_ueg(&c, state, 3, 0, 1, 2))
195 printf("CABAC unary (truncated) binarization failure at %d\n", i);
196 STOP_TIMER("get_cabac_ueg")
197 }
198
173 if(!get_cabac_terminate(&c)) 199 if(!get_cabac_terminate(&c))
174 printf("where's the Terminator?\n"); 200 printf("where's the Terminator?\n");
175 201
176 return 0; 202 return 0;
177 } 203 }