Revision 371cf026 libavcodec/get_bits.h
libavcodec/get_bits.h | ||
---|---|---|
125 | 125 |
#ifdef ALT_BITSTREAM_READER |
126 | 126 |
# define MIN_CACHE_BITS 25 |
127 | 127 |
|
128 |
# define OPEN_READER(name, gb)\ |
|
129 |
unsigned int name##_index= (gb)->index;\
|
|
130 |
int name##_cache= 0
|
|
128 |
# define OPEN_READER(name, gb) \
|
|
129 |
unsigned int name##_index = (gb)->index; \
|
|
130 |
int name##_cache = 0
|
|
131 | 131 |
|
132 |
# define CLOSE_READER(name, gb)\ |
|
133 |
(gb)->index= name##_index |
|
132 |
# define CLOSE_READER(name, gb) (gb)->index = name##_index |
|
134 | 133 |
|
135 | 134 |
# ifdef ALT_BITSTREAM_READER_LE |
136 |
# define UPDATE_CACHE(name, gb)\ |
|
137 |
name##_cache= AV_RL32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) >> (name##_index&0x07)
|
|
135 |
# define UPDATE_CACHE(name, gb) \
|
|
136 |
name##_cache = AV_RL32(((const uint8_t *)(gb)->buffer)+(name##_index>>3)) >> (name##_index&0x07)
|
|
138 | 137 |
|
139 |
# define SKIP_CACHE(name, gb, num)\ |
|
140 |
name##_cache >>= (num) |
|
138 |
# define SKIP_CACHE(name, gb, num) name##_cache >>= (num) |
|
141 | 139 |
# else |
142 |
# define UPDATE_CACHE(name, gb)\ |
|
143 |
name##_cache= AV_RB32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07)
|
|
140 |
# define UPDATE_CACHE(name, gb) \
|
|
141 |
name##_cache = AV_RB32(((const uint8_t *)(gb)->buffer)+(name##_index>>3)) << (name##_index&0x07)
|
|
144 | 142 |
|
145 |
# define SKIP_CACHE(name, gb, num)\ |
|
146 |
name##_cache <<= (num) |
|
143 |
# define SKIP_CACHE(name, gb, num) name##_cache <<= (num) |
|
147 | 144 |
# endif |
148 | 145 |
|
149 | 146 |
// FIXME name? |
150 |
# define SKIP_COUNTER(name, gb, num)\ |
|
151 |
name##_index += (num) |
|
147 |
# define SKIP_COUNTER(name, gb, num) name##_index += (num) |
|
152 | 148 |
|
153 |
# define SKIP_BITS(name, gb, num)\ |
|
154 |
do {\ |
|
155 |
SKIP_CACHE(name, gb, num);\ |
|
156 |
SKIP_COUNTER(name, gb, num);\ |
|
157 |
} while (0) |
|
149 |
# define SKIP_BITS(name, gb, num) do { \ |
|
150 |
SKIP_CACHE(name, gb, num); \ |
|
151 |
SKIP_COUNTER(name, gb, num); \ |
|
152 |
} while (0) |
|
158 | 153 |
|
159 | 154 |
# define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) |
160 | 155 |
# define LAST_SKIP_CACHE(name, gb, num) |
161 | 156 |
|
162 | 157 |
# ifdef ALT_BITSTREAM_READER_LE |
163 |
# define SHOW_UBITS(name, gb, num)\ |
|
164 |
zero_extend(name##_cache, num) |
|
158 |
# define SHOW_UBITS(name, gb, num) zero_extend(name##_cache, num) |
|
165 | 159 |
|
166 |
# define SHOW_SBITS(name, gb, num)\ |
|
167 |
sign_extend(name##_cache, num) |
|
160 |
# define SHOW_SBITS(name, gb, num) sign_extend(name##_cache, num) |
|
168 | 161 |
# else |
169 |
# define SHOW_UBITS(name, gb, num)\ |
|
170 |
NEG_USR32(name##_cache, num) |
|
162 |
# define SHOW_UBITS(name, gb, num) NEG_USR32(name##_cache, num) |
|
171 | 163 |
|
172 |
# define SHOW_SBITS(name, gb, num)\ |
|
173 |
NEG_SSR32(name##_cache, num) |
|
164 |
# define SHOW_SBITS(name, gb, num) NEG_SSR32(name##_cache, num) |
|
174 | 165 |
# endif |
175 | 166 |
|
176 |
# define GET_CACHE(name, gb)\ |
|
177 |
((uint32_t)name##_cache) |
|
167 |
# define GET_CACHE(name, gb) ((uint32_t)name##_cache) |
|
178 | 168 |
|
179 | 169 |
static inline int get_bits_count(const GetBitContext *s){ |
180 | 170 |
return s->index; |
... | ... | |
188 | 178 |
|
189 | 179 |
# define MIN_CACHE_BITS 32 |
190 | 180 |
|
191 |
# define OPEN_READER(name, gb)\ |
|
192 |
int name##_bit_count=(gb)->bit_count;\
|
|
193 |
uint32_t name##_cache0= (gb)->cache0;\
|
|
194 |
uint32_t name##_cache1= (gb)->cache1;\
|
|
195 |
uint32_t * name##_buffer_ptr=(gb)->buffer_ptr
|
|
196 |
|
|
197 |
# define CLOSE_READER(name, gb) do {\ |
|
198 |
(gb)->bit_count= name##_bit_count;\
|
|
199 |
(gb)->cache0= name##_cache0;\
|
|
200 |
(gb)->cache1= name##_cache1;\
|
|
201 |
(gb)->buffer_ptr= name##_buffer_ptr;\
|
|
181 |
# define OPEN_READER(name, gb) \
|
|
182 |
int name##_bit_count = (gb)->bit_count; \
|
|
183 |
uint32_t name##_cache0 = (gb)->cache0; \
|
|
184 |
uint32_t name##_cache1 = (gb)->cache1; \
|
|
185 |
uint32_t *name##_buffer_ptr = (gb)->buffer_ptr
|
|
186 |
|
|
187 |
# define CLOSE_READER(name, gb) do { \
|
|
188 |
(gb)->bit_count = name##_bit_count; \
|
|
189 |
(gb)->cache0 = name##_cache0; \
|
|
190 |
(gb)->cache1 = name##_cache1; \
|
|
191 |
(gb)->buffer_ptr = name##_buffer_ptr; \
|
|
202 | 192 |
} while (0) |
203 | 193 |
|
204 |
# define UPDATE_CACHE(name, gb) do {\ |
|
205 |
if(name##_bit_count > 0){\
|
|
206 |
const uint32_t next= av_be2ne32( *name##_buffer_ptr );\
|
|
207 |
name##_cache0 |= NEG_USR32(next,name##_bit_count);\
|
|
208 |
name##_cache1 |= next<<name##_bit_count;\
|
|
209 |
name##_buffer_ptr++;\
|
|
210 |
name##_bit_count-= 32;\
|
|
211 |
}\
|
|
212 |
} while (0) |
|
194 |
# define UPDATE_CACHE(name, gb) do { \
|
|
195 |
if(name##_bit_count > 0){ \
|
|
196 |
const uint32_t next = av_be2ne32(*name##_buffer_ptr); \
|
|
197 |
name##_cache0 |= NEG_USR32(next, name##_bit_count); \
|
|
198 |
name##_cache1 |= next << name##_bit_count; \
|
|
199 |
name##_buffer_ptr++; \
|
|
200 |
name##_bit_count -= 32; \
|
|
201 |
} \
|
|
202 |
} while (0)
|
|
213 | 203 |
|
214 | 204 |
#if ARCH_X86 |
215 |
# define SKIP_CACHE(name, gb, num)\ |
|
216 |
__asm__(\ |
|
217 |
"shldl %2, %1, %0 \n\t"\ |
|
218 |
"shll %2, %1 \n\t"\ |
|
219 |
: "+r" (name##_cache0), "+r" (name##_cache1)\ |
|
220 |
: "Ic" ((uint8_t)(num))\ |
|
221 |
) |
|
205 |
# define SKIP_CACHE(name, gb, num) \ |
|
206 |
__asm__("shldl %2, %1, %0 \n\t" \ |
|
207 |
"shll %2, %1 \n\t" \ |
|
208 |
: "+r" (name##_cache0), "+r" (name##_cache1) \ |
|
209 |
: "Ic" ((uint8_t)(num))) |
|
222 | 210 |
#else |
223 |
# define SKIP_CACHE(name, gb, num) do {\ |
|
224 |
name##_cache0 <<= (num);\ |
|
225 |
name##_cache0 |= NEG_USR32(name##_cache1,num);\ |
|
226 |
name##_cache1 <<= (num);\ |
|
211 |
# define SKIP_CACHE(name, gb, num) do { \
|
|
212 |
name##_cache0 <<= (num); \
|
|
213 |
name##_cache0 |= NEG_USR32(name##_cache1,num); \
|
|
214 |
name##_cache1 <<= (num); \
|
|
227 | 215 |
} while (0) |
228 | 216 |
#endif |
229 | 217 |
|
230 |
# define SKIP_COUNTER(name, gb, num)\ |
|
231 |
name##_bit_count += (num) |
|
218 |
# define SKIP_COUNTER(name, gb, num) name##_bit_count += (num) |
|
232 | 219 |
|
233 |
# define SKIP_BITS(name, gb, num)\ |
|
234 |
do {\ |
|
235 |
SKIP_CACHE(name, gb, num);\ |
|
236 |
SKIP_COUNTER(name, gb, num);\ |
|
237 |
} while (0) |
|
220 |
# define SKIP_BITS(name, gb, num) do { \ |
|
221 |
SKIP_CACHE(name, gb, num); \ |
|
222 |
SKIP_COUNTER(name, gb, num); \ |
|
223 |
} while (0) |
|
238 | 224 |
|
239 |
# define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num) |
|
225 |
# define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
|
|
240 | 226 |
# define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num) |
241 | 227 |
|
242 |
# define SHOW_UBITS(name, gb, num)\ |
|
243 |
NEG_USR32(name##_cache0, num) |
|
228 |
# define SHOW_UBITS(name, gb, num) NEG_USR32(name##_cache0, num) |
|
244 | 229 |
|
245 |
# define SHOW_SBITS(name, gb, num)\ |
|
246 |
NEG_SSR32(name##_cache0, num) |
|
230 |
# define SHOW_SBITS(name, gb, num) NEG_SSR32(name##_cache0, num) |
|
247 | 231 |
|
248 |
# define GET_CACHE(name, gb)\ |
|
249 |
(name##_cache0) |
|
232 |
# define GET_CACHE(name, gb) name##_cache0 |
|
250 | 233 |
|
251 |
static inline int get_bits_count(const GetBitContext *s){ |
|
234 |
static inline int get_bits_count(const GetBitContext *s) {
|
|
252 | 235 |
return ((uint8_t*)s->buffer_ptr - s->buffer)*8 - 32 + s->bit_count; |
253 | 236 |
} |
254 | 237 |
|
... | ... | |
257 | 240 |
re_bit_count += n; |
258 | 241 |
re_buffer_ptr += re_bit_count>>5; |
259 | 242 |
re_bit_count &= 31; |
260 |
re_cache0 = av_be2ne32( re_buffer_ptr[-1] ) << re_bit_count;
|
|
243 |
re_cache0 = av_be2ne32(re_buffer_ptr[-1]) << re_bit_count;
|
|
261 | 244 |
re_cache1 = 0; |
262 | 245 |
UPDATE_CACHE(re, s); |
263 | 246 |
CLOSE_READER(re, s); |
... | ... | |
276 | 259 |
register int32_t cache; |
277 | 260 |
OPEN_READER(re, s); |
278 | 261 |
UPDATE_CACHE(re, s); |
279 |
cache = GET_CACHE(re,s); |
|
280 |
sign=(~cache)>>31;
|
|
262 |
cache = GET_CACHE(re, s);
|
|
263 |
sign = ~cache >> 31;
|
|
281 | 264 |
LAST_SKIP_BITS(re, s, n); |
282 | 265 |
CLOSE_READER(re, s); |
283 | 266 |
return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; |
... | ... | |
287 | 270 |
register int tmp; |
288 | 271 |
OPEN_READER(re, s); |
289 | 272 |
UPDATE_CACHE(re, s); |
290 |
tmp= SHOW_SBITS(re, s, n); |
|
273 |
tmp = SHOW_SBITS(re, s, n);
|
|
291 | 274 |
LAST_SKIP_BITS(re, s, n); |
292 | 275 |
CLOSE_READER(re, s); |
293 | 276 |
return tmp; |
... | ... | |
300 | 283 |
register int tmp; |
301 | 284 |
OPEN_READER(re, s); |
302 | 285 |
UPDATE_CACHE(re, s); |
303 |
tmp= SHOW_UBITS(re, s, n); |
|
286 |
tmp = SHOW_UBITS(re, s, n);
|
|
304 | 287 |
LAST_SKIP_BITS(re, s, n); |
305 | 288 |
CLOSE_READER(re, s); |
306 | 289 |
return tmp; |
... | ... | |
313 | 296 |
register int tmp; |
314 | 297 |
OPEN_READER(re, s); |
315 | 298 |
UPDATE_CACHE(re, s); |
316 |
tmp= SHOW_UBITS(re, s, n); |
|
317 |
// CLOSE_READER(re, s) |
|
299 |
tmp = SHOW_UBITS(re, s, n); |
|
318 | 300 |
return tmp; |
319 | 301 |
} |
320 | 302 |
|
... | ... | |
328 | 310 |
|
329 | 311 |
static inline unsigned int get_bits1(GetBitContext *s){ |
330 | 312 |
#ifdef ALT_BITSTREAM_READER |
331 |
unsigned int index= s->index; |
|
332 |
uint8_t result= s->buffer[ index>>3 ];
|
|
313 |
unsigned int index = s->index;
|
|
314 |
uint8_t result = s->buffer[index>>3];
|
|
333 | 315 |
#ifdef ALT_BITSTREAM_READER_LE |
334 |
result>>= (index&0x07);
|
|
335 |
result&= 1; |
|
316 |
result >>= index & 7;
|
|
317 |
result &= 1;
|
|
336 | 318 |
#else |
337 |
result<<= (index&0x07);
|
|
338 |
result>>= 8 - 1; |
|
319 |
result <<= index & 7;
|
|
320 |
result >>= 8 - 1;
|
|
339 | 321 |
#endif |
340 | 322 |
index++; |
341 |
s->index= index; |
|
323 |
s->index = index;
|
|
342 | 324 |
|
343 | 325 |
return result; |
344 | 326 |
#else |
... | ... | |
358 | 340 |
* reads 0-32 bits. |
359 | 341 |
*/ |
360 | 342 |
static inline unsigned int get_bits_long(GetBitContext *s, int n){ |
361 |
if(n<=MIN_CACHE_BITS) return get_bits(s, n);
|
|
362 |
else{ |
|
343 |
if (n <= MIN_CACHE_BITS) return get_bits(s, n);
|
|
344 |
else {
|
|
363 | 345 |
#ifdef ALT_BITSTREAM_READER_LE |
364 |
int ret= get_bits(s, 16); |
|
346 |
int ret = get_bits(s, 16);
|
|
365 | 347 |
return ret | (get_bits(s, n-16) << 16); |
366 | 348 |
#else |
367 |
int ret= get_bits(s, 16) << (n-16); |
|
349 |
int ret = get_bits(s, 16) << (n-16);
|
|
368 | 350 |
return ret | get_bits(s, n-16); |
369 | 351 |
#endif |
370 | 352 |
} |
... | ... | |
381 | 363 |
* shows 0-32 bits. |
382 | 364 |
*/ |
383 | 365 |
static inline unsigned int show_bits_long(GetBitContext *s, int n){ |
384 |
if(n<=MIN_CACHE_BITS) return show_bits(s, n);
|
|
385 |
else{ |
|
386 |
GetBitContext gb= *s; |
|
366 |
if (n <= MIN_CACHE_BITS) return show_bits(s, n);
|
|
367 |
else {
|
|
368 |
GetBitContext gb = *s;
|
|
387 | 369 |
return get_bits_long(&gb, n); |
388 | 370 |
} |
389 | 371 |
} |
390 | 372 |
|
391 | 373 |
static inline int check_marker(GetBitContext *s, const char *msg) |
392 | 374 |
{ |
393 |
int bit= get_bits1(s); |
|
394 |
if(!bit) |
|
375 |
int bit = get_bits1(s);
|
|
376 |
if (!bit)
|
|
395 | 377 |
av_log(NULL, AV_LOG_INFO, "Marker bit missing %s\n", msg); |
396 | 378 |
|
397 | 379 |
return bit; |
... | ... | |
409 | 391 |
static inline void init_get_bits(GetBitContext *s, |
410 | 392 |
const uint8_t *buffer, int bit_size) |
411 | 393 |
{ |
412 |
int buffer_size= (bit_size+7)>>3; |
|
413 |
if(buffer_size < 0 || bit_size < 0) { |
|
394 |
int buffer_size = (bit_size+7)>>3;
|
|
395 |
if (buffer_size < 0 || bit_size < 0) {
|
|
414 | 396 |
buffer_size = bit_size = 0; |
415 | 397 |
buffer = NULL; |
416 | 398 |
} |
417 | 399 |
|
418 |
s->buffer= buffer; |
|
419 |
s->size_in_bits= bit_size; |
|
420 |
s->buffer_end= buffer + buffer_size; |
|
400 |
s->buffer = buffer;
|
|
401 |
s->size_in_bits = bit_size;
|
|
402 |
s->buffer_end = buffer + buffer_size;
|
|
421 | 403 |
#ifdef ALT_BITSTREAM_READER |
422 |
s->index=0;
|
|
404 |
s->index = 0;
|
|
423 | 405 |
#elif defined A32_BITSTREAM_READER |
424 |
s->buffer_ptr = (uint32_t*)((intptr_t)buffer&(~3));
|
|
425 |
s->bit_count = 32 + 8*((intptr_t)buffer&3);
|
|
406 |
s->buffer_ptr = (uint32_t*)((intptr_t)buffer & ~3);
|
|
407 |
s->bit_count = 32 + 8*((intptr_t)buffer & 3);
|
|
426 | 408 |
skip_bits_long(s, 0); |
427 | 409 |
#endif |
428 | 410 |
} |
429 | 411 |
|
430 | 412 |
static inline void align_get_bits(GetBitContext *s) |
431 | 413 |
{ |
432 |
int n= (-get_bits_count(s)) & 7;
|
|
433 |
if(n) skip_bits(s, n); |
|
414 |
int n = -get_bits_count(s) & 7;
|
|
415 |
if (n) skip_bits(s, n);
|
|
434 | 416 |
} |
435 | 417 |
|
436 |
#define init_vlc(vlc, nb_bits, nb_codes,\ |
|
437 |
bits, bits_wrap, bits_size,\ |
|
438 |
codes, codes_wrap, codes_size,\ |
|
439 |
flags)\ |
|
440 |
init_vlc_sparse(vlc, nb_bits, nb_codes,\ |
|
441 |
bits, bits_wrap, bits_size,\
|
|
442 |
codes, codes_wrap, codes_size,\
|
|
443 |
NULL, 0, 0, flags) |
|
418 |
#define init_vlc(vlc, nb_bits, nb_codes, \
|
|
419 |
bits, bits_wrap, bits_size, \
|
|
420 |
codes, codes_wrap, codes_size, \
|
|
421 |
flags) \
|
|
422 |
init_vlc_sparse(vlc, nb_bits, nb_codes, \
|
|
423 |
bits, bits_wrap, bits_size, \
|
|
424 |
codes, codes_wrap, codes_size, \
|
|
425 |
NULL, 0, 0, flags)
|
|
444 | 426 |
|
445 | 427 |
int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, |
446 | 428 |
const void *bits, int bits_wrap, int bits_size, |
... | ... | |
451 | 433 |
#define INIT_VLC_USE_NEW_STATIC 4 |
452 | 434 |
void free_vlc(VLC *vlc); |
453 | 435 |
|
454 |
#define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size)\ |
|
455 |
do {\ |
|
456 |
static VLC_TYPE table[static_size][2];\ |
|
457 |
(vlc)->table= table;\ |
|
458 |
(vlc)->table_allocated= static_size;\ |
|
459 |
init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC);\ |
|
460 |
} while (0) |
|
436 |
#define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size) do { \ |
|
437 |
static VLC_TYPE table[static_size][2]; \ |
|
438 |
(vlc)->table = table; \ |
|
439 |
(vlc)->table_allocated = static_size; \ |
|
440 |
init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC); \ |
|
441 |
} while (0) |
|
461 | 442 |
|
462 | 443 |
|
463 | 444 |
/** |
... | ... | |
466 | 447 |
* If the vlc code is invalid and max_depth>1, then the number of bits removed |
467 | 448 |
* is undefined. |
468 | 449 |
*/ |
469 |
#define GET_VLC(code, name, gb, table, bits, max_depth)\ |
|
470 |
do {\ |
|
471 |
int n, nb_bits;\ |
|
472 |
unsigned int index;\ |
|
473 |
\ |
|
474 |
index= SHOW_UBITS(name, gb, bits);\ |
|
475 |
code = table[index][0];\ |
|
476 |
n = table[index][1];\ |
|
477 |
\ |
|
478 |
if(max_depth > 1 && n < 0){\ |
|
479 |
LAST_SKIP_BITS(name, gb, bits);\ |
|
480 |
UPDATE_CACHE(name, gb);\ |
|
481 |
\ |
|
482 |
nb_bits = -n;\ |
|
483 |
\ |
|
484 |
index= SHOW_UBITS(name, gb, nb_bits) + code;\ |
|
485 |
code = table[index][0];\ |
|
486 |
n = table[index][1];\ |
|
487 |
if(max_depth > 2 && n < 0){\ |
|
488 |
LAST_SKIP_BITS(name, gb, nb_bits);\ |
|
489 |
UPDATE_CACHE(name, gb);\ |
|
490 |
\ |
|
491 |
nb_bits = -n;\ |
|
492 |
\ |
|
493 |
index= SHOW_UBITS(name, gb, nb_bits) + code;\ |
|
494 |
code = table[index][0];\ |
|
495 |
n = table[index][1];\ |
|
496 |
}\ |
|
497 |
}\ |
|
498 |
SKIP_BITS(name, gb, n);\ |
|
499 |
} while (0) |
|
500 |
|
|
501 |
#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ |
|
502 |
do {\ |
|
503 |
int n, nb_bits;\ |
|
504 |
unsigned int index;\ |
|
505 |
\ |
|
506 |
index= SHOW_UBITS(name, gb, bits);\ |
|
507 |
level = table[index].level;\ |
|
508 |
n = table[index].len;\ |
|
509 |
\ |
|
510 |
if(max_depth > 1 && n < 0){\ |
|
511 |
SKIP_BITS(name, gb, bits);\ |
|
512 |
if(need_update){\ |
|
513 |
UPDATE_CACHE(name, gb);\ |
|
514 |
}\ |
|
515 |
\ |
|
516 |
nb_bits = -n;\ |
|
517 |
\ |
|
518 |
index= SHOW_UBITS(name, gb, nb_bits) + level;\ |
|
519 |
level = table[index].level;\ |
|
520 |
n = table[index].len;\ |
|
521 |
}\ |
|
522 |
run= table[index].run;\ |
|
523 |
SKIP_BITS(name, gb, n);\ |
|
524 |
} while (0) |
|
450 |
#define GET_VLC(code, name, gb, table, bits, max_depth) do { \ |
|
451 |
int n, nb_bits; \ |
|
452 |
unsigned int index; \ |
|
453 |
\ |
|
454 |
index = SHOW_UBITS(name, gb, bits); \ |
|
455 |
code = table[index][0]; \ |
|
456 |
n = table[index][1]; \ |
|
457 |
\ |
|
458 |
if (max_depth > 1 && n < 0) { \ |
|
459 |
LAST_SKIP_BITS(name, gb, bits); \ |
|
460 |
UPDATE_CACHE(name, gb); \ |
|
461 |
\ |
|
462 |
nb_bits = -n; \ |
|
463 |
\ |
|
464 |
index = SHOW_UBITS(name, gb, nb_bits) + code; \ |
|
465 |
code = table[index][0]; \ |
|
466 |
n = table[index][1]; \ |
|
467 |
if (max_depth > 2 && n < 0) { \ |
|
468 |
LAST_SKIP_BITS(name, gb, nb_bits); \ |
|
469 |
UPDATE_CACHE(name, gb); \ |
|
470 |
\ |
|
471 |
nb_bits = -n; \ |
|
472 |
\ |
|
473 |
index = SHOW_UBITS(name, gb, nb_bits) + code; \ |
|
474 |
code = table[index][0]; \ |
|
475 |
n = table[index][1]; \ |
|
476 |
} \ |
|
477 |
} \ |
|
478 |
SKIP_BITS(name, gb, n); \ |
|
479 |
} while (0) |
|
480 |
|
|
481 |
#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update) do { \ |
|
482 |
int n, nb_bits; \ |
|
483 |
unsigned int index; \ |
|
484 |
\ |
|
485 |
index = SHOW_UBITS(name, gb, bits); \ |
|
486 |
level = table[index].level; \ |
|
487 |
n = table[index].len; \ |
|
488 |
\ |
|
489 |
if (max_depth > 1 && n < 0) { \ |
|
490 |
SKIP_BITS(name, gb, bits); \ |
|
491 |
if (need_update) { \ |
|
492 |
UPDATE_CACHE(name, gb); \ |
|
493 |
} \ |
|
494 |
\ |
|
495 |
nb_bits = -n; \ |
|
496 |
\ |
|
497 |
index = SHOW_UBITS(name, gb, nb_bits) + level; \ |
|
498 |
level = table[index].level; \ |
|
499 |
n = table[index].len; \ |
|
500 |
} \ |
|
501 |
run = table[index].run; \ |
|
502 |
SKIP_BITS(name, gb, n); \ |
|
503 |
} while (0) |
|
525 | 504 |
|
526 | 505 |
|
527 | 506 |
/** |
... | ... | |
552 | 531 |
static inline void print_bin(int bits, int n){ |
553 | 532 |
int i; |
554 | 533 |
|
555 |
for(i=n-1; i>=0; i--){
|
|
534 |
for (i = n-1; i >= 0; i--) {
|
|
556 | 535 |
av_log(NULL, AV_LOG_DEBUG, "%d", (bits>>i)&1); |
557 | 536 |
} |
558 |
for(i=n; i<24; i++)
|
|
537 |
for (i = n; i < 24; i++)
|
|
559 | 538 |
av_log(NULL, AV_LOG_DEBUG, " "); |
560 | 539 |
} |
561 | 540 |
|
562 |
static inline int get_bits_trace(GetBitContext *s, int n, char *file, const char *func, int line){ |
|
563 |
int r= get_bits(s, n); |
|
541 |
static inline int get_bits_trace(GetBitContext *s, int n, char *file, |
|
542 |
const char *func, int line){ |
|
543 |
int r = get_bits(s, n); |
|
564 | 544 |
|
565 | 545 |
print_bin(r, n); |
566 |
av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d bit @%5d in %s %s:%d\n", r, n, r, get_bits_count(s)-n, file, func, line); |
|
546 |
av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d bit @%5d in %s %s:%d\n", |
|
547 |
r, n, r, get_bits_count(s)-n, file, func, line); |
|
567 | 548 |
return r; |
568 | 549 |
} |
569 |
static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth, char *file, const char *func, int line){ |
|
570 |
int show= show_bits(s, 24); |
|
571 |
int pos= get_bits_count(s); |
|
572 |
int r= get_vlc2(s, table, bits, max_depth); |
|
573 |
int len= get_bits_count(s) - pos; |
|
574 |
int bits2= show>>(24-len); |
|
550 |
static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], |
|
551 |
int bits, int max_depth, char *file, |
|
552 |
const char *func, int line){ |
|
553 |
int show = show_bits(s, 24); |
|
554 |
int pos = get_bits_count(s); |
|
555 |
int r = get_vlc2(s, table, bits, max_depth); |
|
556 |
int len = get_bits_count(s) - pos; |
|
557 |
int bits2 = show >> (24-len); |
|
575 | 558 |
|
576 | 559 |
print_bin(bits2, len); |
577 | 560 |
|
578 |
av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d vlc @%5d in %s %s:%d\n", bits2, len, r, pos, file, func, line); |
|
561 |
av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d vlc @%5d in %s %s:%d\n", |
|
562 |
bits2, len, r, pos, file, func, line); |
|
579 | 563 |
return r; |
580 | 564 |
} |
581 |
static inline int get_xbits_trace(GetBitContext *s, int n, char *file, const char *func, int line){ |
|
582 |
int show= show_bits(s, n); |
|
583 |
int r= get_xbits(s, n); |
|
565 |
static inline int get_xbits_trace(GetBitContext *s, int n, char *file, |
|
566 |
const char *func, int line){ |
|
567 |
int show = show_bits(s, n); |
|
568 |
int r = get_xbits(s, n); |
|
584 | 569 |
|
585 | 570 |
print_bin(show, n); |
586 |
av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d xbt @%5d in %s %s:%d\n", show, n, r, get_bits_count(s)-n, file, func, line); |
|
571 |
av_log(NULL, AV_LOG_DEBUG, "%5d %2d %3d xbt @%5d in %s %s:%d\n", |
|
572 |
show, n, r, get_bits_count(s)-n, file, func, line); |
|
587 | 573 |
return r; |
588 | 574 |
} |
589 | 575 |
|
Also available in: Unified diff