28 #include "config-adpcm.h"
29 #include "intreadwrite.h"
32 namespace adpcm_ffmpeg {
47 #ifndef UNCHECKED_BITSTREAM_READER
48 #define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER
51 #ifndef CACHED_BITSTREAM_READER
52 #define CACHED_BITSTREAM_READER 0
55 #if CACHED_BITSTREAM_READER
60 #ifndef BITSTREAM_READER_LE
62 # define BITSTREAM_DEFAULT_BE
65 #include "bitstream.h"
69 #undef BITSTREAM_DEFAULT_BE
71 #define get_bits_count bits_tell
72 #define get_bits_left bits_left
73 #define skip_bits_long bits_skip
74 #define skip_bits bits_skip
75 #define get_bits bits_read_nz
76 #define get_bitsz bits_read
77 #define get_bits_long bits_read
78 #define get_bits1 bits_read_bit
79 #define get_bits64 bits_read_64
80 #define get_xbits bits_read_xbits
81 #define get_sbits bits_read_signed_nz
82 #define get_sbits_long bits_read_signed
83 #define show_bits bits_peek
84 #define show_bits_long bits_peek
85 #define init_get_bits bits_init
86 #define init_get_bits8 bits_init8
87 #define align_get_bits bits_align
88 #define get_vlc2 bits_read_vlc
90 #define init_get_bits8_le(s, buffer, byte_size) bits_init8_le((BitstreamContextLE*)s, buffer, byte_size)
91 #define get_bits_le(s, n) bits_read_le((BitstreamContextLE*)s, n)
93 #define show_bits1(s) bits_peek(s, 1)
94 #define skip_bits1(s) bits_skip(s, 1)
96 #define skip_1stop_8data_bits bits_skip_1stop_8data
101 const uint8_t *buffer, *buffer_end;
104 int size_in_bits_plus8;
155 #if defined LONG_BITSTREAM_READER
156 # define MIN_CACHE_BITS 32
158 # define MIN_CACHE_BITS 25
161 #define OPEN_READER_NOSIZE(name, gb) \
162 unsigned int name ## _index = (gb)->index; \
163 unsigned int av_unused name ## _cache
165 #if UNCHECKED_BITSTREAM_READER
166 #define OPEN_READER(name, gb) OPEN_READER_NOSIZE(name, gb)
168 #define BITS_AVAILABLE(name, gb) 1
170 #define OPEN_READER(name, gb) \
171 OPEN_READER_NOSIZE(name, gb); \
172 unsigned int name ## _size_plus8 = (gb)->size_in_bits_plus8
174 #define BITS_AVAILABLE(name, gb) name ## _index < name ## _size_plus8
177 #define CLOSE_READER(name, gb) (gb)->index = name ## _index
179 # ifdef LONG_BITSTREAM_READER
181 # define UPDATE_CACHE_LE(name, gb) name ## _cache = \
182 AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
184 # define UPDATE_CACHE_BE(name, gb) name ## _cache = \
185 AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7))
189 # define UPDATE_CACHE_LE(name, gb) name ## _cache = \
190 AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)
192 # define UPDATE_CACHE_BE(name, gb) name ## _cache = \
193 AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7)
198 #ifdef BITSTREAM_READER_LE
200 # define UPDATE_CACHE(name, gb) UPDATE_CACHE_LE(name, gb)
202 # define SKIP_CACHE(name, gb, num) name ## _cache >>= (num)
206 # define UPDATE_CACHE(name, gb) UPDATE_CACHE_BE(name, gb)
208 # define SKIP_CACHE(name, gb, num) name ## _cache <<= (num)
212 #if UNCHECKED_BITSTREAM_READER
213 # define SKIP_COUNTER(name, gb, num) name ## _index += (num)
215 # define SKIP_COUNTER(name, gb, num) \
216 name ## _index = FFMIN(name ## _size_plus8, name ## _index + (num))
219 #define BITS_LEFT(name, gb) ((int)((gb)->size_in_bits - name ## _index))
221 #define SKIP_BITS(name, gb, num) \
223 SKIP_CACHE(name, gb, num); \
224 SKIP_COUNTER(name, gb, num); \
227 #define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
229 #define SHOW_UBITS_LE(name, gb, num) zero_extend(name ## _cache, num)
230 #define SHOW_SBITS_LE(name, gb, num) sign_extend(name ## _cache, num)
232 #define SHOW_UBITS_BE(name, gb, num) NEG_USR32(name ## _cache, num)
233 #define SHOW_SBITS_BE(name, gb, num) NEG_SSR32(name ## _cache, num)
235 #ifdef BITSTREAM_READER_LE
236 # define SHOW_UBITS(name, gb, num) SHOW_UBITS_LE(name, gb, num)
237 # define SHOW_SBITS(name, gb, num) SHOW_SBITS_LE(name, gb, num)
239 # define SHOW_UBITS(name, gb, num) SHOW_UBITS_BE(name, gb, num)
240 # define SHOW_SBITS(name, gb, num) SHOW_SBITS_BE(name, gb, num)
243 #define GET_CACHE(name, gb) ((uint32_t) name ## _cache)
258 static inline void skip_bits_long(GetBitContext *s,
int n)
260 #if UNCHECKED_BITSTREAM_READER
263 s->index += av_clip(n, -s->index, s->size_in_bits_plus8 - s->index);
272 static inline int get_xbits(GetBitContext *s,
int n)
277 av_assert(n>0 && n<=25);
279 cache = GET_CACHE(re, s);
281 LAST_SKIP_BITS(re, s, n);
283 return (NEG_USR32(sign ^ cache, n) ^ sign) - sign;
286 static inline int get_xbits_le(GetBitContext *s,
int n)
291 av_assert(n>0 && n<=25);
292 UPDATE_CACHE_LE(re, s);
293 cache = GET_CACHE(re, s);
294 sign = sign_extend(~cache, n) >> 31;
295 LAST_SKIP_BITS(re, s, n);
297 return (zero_extend(sign ^ cache, n) ^ sign) - sign;
300 static inline int get_sbits(GetBitContext *s,
int n)
304 av_assert(n>0 && n<=25);
306 tmp = SHOW_SBITS(re, s, n);
307 LAST_SKIP_BITS(re, s, n);
315 static unsigned int get_bits(GetBitContext *s,
int n)
319 av_assert(n>0 && n<=25);
321 tmp = SHOW_UBITS(re, s, n);
322 LAST_SKIP_BITS(re, s, n);
324 av_assert(tmp < UINT64_C(1) << n);
331 static av_always_inline
int get_bitsz(GetBitContext *s,
int n)
333 return n ? get_bits(s, n) : 0;
336 static inline unsigned int get_bits_le(GetBitContext *s,
int n)
340 av_assert(n>0 && n<=25);
341 UPDATE_CACHE_LE(re, s);
342 tmp = SHOW_UBITS_LE(re, s, n);
343 LAST_SKIP_BITS(re, s, n);
351 static inline unsigned int show_bits(GetBitContext *s,
int n)
354 OPEN_READER_NOSIZE(re, s);
355 av_assert(n>0 && n<=25);
357 tmp = SHOW_UBITS(re, s, n);
361 static inline void skip_bits(GetBitContext *s,
int n)
364 LAST_SKIP_BITS(re, s, n);
368 static inline unsigned int get_bits1(GetBitContext *s)
370 unsigned int index = s->index;
371 uint8_t result = s->buffer[index >> 3];
372 #ifdef BITSTREAM_READER_LE
373 result >>= index & 7;
376 result <<= index & 7;
379 #if !UNCHECKED_BITSTREAM_READER
380 if (s->index < s->size_in_bits_plus8)
388 static inline unsigned int show_bits1(GetBitContext *s)
390 return show_bits(s, 1);
393 static inline void skip_bits1(GetBitContext *s)
401 static inline unsigned int get_bits_long(GetBitContext *s,
int n)
403 av_assert(n>=0 && n<=32);
406 }
else if (n <= MIN_CACHE_BITS) {
407 return get_bits(s, n);
409 #ifdef BITSTREAM_READER_LE
410 unsigned ret = get_bits(s, 16);
411 return ret | (get_bits(s, n - 16) << 16);
413 unsigned ret = get_bits(s, 16) << (n - 16);
414 return ret | get_bits(s, n - 16);
422 static inline uint64_t get_bits64(GetBitContext *s,
int n)
425 return get_bits_long(s, n);
427 #ifdef BITSTREAM_READER_LE
428 uint64_t ret = get_bits_long(s, 32);
429 return ret | (uint64_t) get_bits_long(s, n - 32) << 32;
431 uint64_t ret = (uint64_t) get_bits_long(s, n - 32) << 32;
432 return ret | get_bits_long(s, 32);
440 static inline int get_sbits_long(GetBitContext *s,
int n)
446 return sign_extend(get_bits_long(s, n), n);
452 static inline int64_t get_sbits64(GetBitContext *s,
int n)
458 return sign_extend64(get_bits64(s, n), n);
464 static inline unsigned int show_bits_long(GetBitContext *s,
int n)
466 if (n <= MIN_CACHE_BITS) {
467 return show_bits(s, n);
469 GetBitContext gb = *s;
470 return get_bits_long(&gb, n);
483 static inline int init_get_bits(GetBitContext *s,
const uint8_t *buffer,
489 if (bit_size >= INT_MAX - FFMAX(7, AV_INPUT_BUFFER_PADDING_SIZE*8) || bit_size < 0 || !buffer) {
492 ret = AVERROR_INVALIDDATA;
495 buffer_size = (bit_size + 7) >> 3;
498 s->size_in_bits = bit_size;
499 s->size_in_bits_plus8 = bit_size + 8;
500 s->buffer_end = buffer + buffer_size;
514 static inline int init_get_bits8(GetBitContext *s,
const uint8_t *buffer,
517 if (byte_size > INT_MAX / 8 || byte_size < 0)
519 return init_get_bits(s, buffer, byte_size * 8);
522 static inline int init_get_bits8_le(GetBitContext *s,
const uint8_t *buffer,
525 if (byte_size > INT_MAX / 8 || byte_size < 0)
527 return init_get_bits(s, buffer, byte_size * 8);
530 static inline const uint8_t *align_get_bits(GetBitContext *s)
532 int n = -get_bits_count(s) & 7;
535 return s->buffer + (s->index >> 3);
543 #define GET_VLC(code, name, gb, table, bits, max_depth) \
546 unsigned int index; \
548 index = SHOW_UBITS(name, gb, bits); \
549 code = table[index].sym; \
550 n = table[index].len; \
552 if (max_depth > 1 && n < 0) { \
553 LAST_SKIP_BITS(name, gb, bits); \
554 UPDATE_CACHE(name, gb); \
558 index = SHOW_UBITS(name, gb, nb_bits) + code; \
559 code = table[index].sym; \
560 n = table[index].len; \
561 if (max_depth > 2 && n < 0) { \
562 LAST_SKIP_BITS(name, gb, nb_bits); \
563 UPDATE_CACHE(name, gb); \
567 index = SHOW_UBITS(name, gb, nb_bits) + code; \
568 code = table[index].sym; \
569 n = table[index].len; \
572 SKIP_BITS(name, gb, n); \
575 #define GET_RL_VLC(level, run, name, gb, table, bits, \
576 max_depth, need_update) \
579 unsigned int index; \
581 index = SHOW_UBITS(name, gb, bits); \
582 level = table[index].level; \
583 n = table[index].len; \
585 if (max_depth > 1 && n < 0) { \
586 SKIP_BITS(name, gb, bits); \
588 UPDATE_CACHE(name, gb); \
593 index = SHOW_UBITS(name, gb, nb_bits) + level; \
594 level = table[index].level; \
595 n = table[index].len; \
596 if (max_depth > 2 && n < 0) { \
597 LAST_SKIP_BITS(name, gb, nb_bits); \
599 UPDATE_CACHE(name, gb); \
603 index = SHOW_UBITS(name, gb, nb_bits) + level; \
604 level = table[index].level; \
605 n = table[index].len; \
608 run = table[index].run; \
609 SKIP_BITS(name, gb, n); \
636 static inline int decode012(GetBitContext *gb)
643 return get_bits1(gb) + 1;
646 static inline int decode210(GetBitContext *gb)
651 return 2 - get_bits1(gb);
654 static inline int get_bits_left(GetBitContext *gb)
656 return gb->size_in_bits - get_bits_count(gb);
659 static inline int skip_1stop_8data_bits(GetBitContext *gb)
661 if (get_bits_left(gb) <= 0)
662 return AVERROR_INVALIDDATA;
664 while (get_bits1(gb)) {
666 if (get_bits_left(gb) <= 0)
667 return AVERROR_INVALIDDATA;
Definition: get_bits.h:100