Go to the documentation of this file.
   26 #ifndef AVCODEC_GET_BITS_H 
   27 #define AVCODEC_GET_BITS_H 
   52 #ifndef UNCHECKED_BITSTREAM_READER 
   53 #define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER 
   56 #ifndef CACHED_BITSTREAM_READER 
   57 #define CACHED_BITSTREAM_READER 0 
   60 #if CACHED_BITSTREAM_READER 
   65 #ifndef BITSTREAM_READER_LE 
   67 # define BITSTREAM_DEFAULT_BE 
   74 #undef BITSTREAM_DEFAULT_BE 
   78 #define get_bits_count      bits_tell 
   79 #define get_bits_left       bits_left 
   80 #define skip_bits_long      bits_skip 
   81 #define skip_bits           bits_skip 
   82 #define get_bits            bits_read_nz 
   83 #define get_bitsz           bits_read 
   84 #define get_bits_long       bits_read 
   85 #define get_bits1           bits_read_bit 
   86 #define get_bits64          bits_read_64 
   87 #define get_xbits           bits_read_xbits 
   88 #define get_sbits           bits_read_signed_nz 
   89 #define get_sbits_long      bits_read_signed 
   90 #define show_bits           bits_peek 
   91 #define show_bits_long      bits_peek 
   92 #define init_get_bits       bits_init 
   93 #define init_get_bits8      bits_init8 
   94 #define align_get_bits      bits_align 
   95 #define get_vlc2            bits_read_vlc 
   97 #define init_get_bits8_le(s, buffer, byte_size) bits_init8_le((BitstreamContextLE*)s, buffer, byte_size) 
   98 #define get_bits_le(s, n)                       bits_read_le((BitstreamContextLE*)s, n) 
  100 #define show_bits1(s)       bits_peek(s, 1) 
  101 #define skip_bits1(s)       bits_skip(s, 1) 
  103 #define skip_1stop_8data_bits bits_skip_1stop_8data 
  105 #else   // CACHED_BITSTREAM_READER 
  165 #if defined LONG_BITSTREAM_READER 
  166 #   define MIN_CACHE_BITS 32 
  168 #   define MIN_CACHE_BITS 25 
  171 #define OPEN_READER_NOSIZE(name, gb)            \ 
  172     unsigned int name ## _index = (gb)->index;  \ 
  173     unsigned int av_unused name ## _cache 
  175 #if UNCHECKED_BITSTREAM_READER 
  176 #define OPEN_READER(name, gb) OPEN_READER_NOSIZE(name, gb) 
  178 #define BITS_AVAILABLE(name, gb) 1 
  180 #define OPEN_READER(name, gb)                   \ 
  181     OPEN_READER_NOSIZE(name, gb);               \ 
  182     unsigned int name ## _size_plus8 = (gb)->size_in_bits_plus8 
  184 #define BITS_AVAILABLE(name, gb) name ## _index < name ## _size_plus8 
  187 #define CLOSE_READER(name, gb) (gb)->index = name ## _index 
  189 # ifdef LONG_BITSTREAM_READER 
  191 # define UPDATE_CACHE_LE(name, gb) name ## _cache = \ 
  192       AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) 
  194 # define UPDATE_CACHE_BE(name, gb) name ## _cache = \ 
  195       AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7)) 
  199 # define UPDATE_CACHE_LE(name, gb) name ## _cache = \ 
  200       AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) 
  202 # define UPDATE_CACHE_BE(name, gb) name ## _cache = \ 
  203       AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7) 
  208 #ifdef BITSTREAM_READER_LE 
  210 # define UPDATE_CACHE(name, gb) UPDATE_CACHE_LE(name, gb) 
  212 # define SKIP_CACHE(name, gb, num) name ## _cache >>= (num) 
  216 # define UPDATE_CACHE(name, gb) UPDATE_CACHE_BE(name, gb) 
  218 # define SKIP_CACHE(name, gb, num) name ## _cache <<= (num) 
  222 #if UNCHECKED_BITSTREAM_READER 
  223 #   define SKIP_COUNTER(name, gb, num) name ## _index += (num) 
  225 #   define SKIP_COUNTER(name, gb, num) \ 
  226     name ## _index = FFMIN(name ## _size_plus8, name ## _index + (num)) 
  229 #define BITS_LEFT(name, gb) ((int)((gb)->size_in_bits - name ## _index)) 
  231 #define SKIP_BITS(name, gb, num)                \ 
  233         SKIP_CACHE(name, gb, num);              \ 
  234         SKIP_COUNTER(name, gb, num);            \ 
  237 #define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) 
  239 #define SHOW_UBITS_LE(name, gb, num) zero_extend(name ## _cache, num) 
  240 #define SHOW_SBITS_LE(name, gb, num) sign_extend(name ## _cache, num) 
  242 #define SHOW_UBITS_BE(name, gb, num) NEG_USR32(name ## _cache, num) 
  243 #define SHOW_SBITS_BE(name, gb, num) NEG_SSR32(name ## _cache, num) 
  245 #ifdef BITSTREAM_READER_LE 
  246 #   define SHOW_UBITS(name, gb, num) SHOW_UBITS_LE(name, gb, num) 
  247 #   define SHOW_SBITS(name, gb, num) SHOW_SBITS_LE(name, gb, num) 
  249 #   define SHOW_UBITS(name, gb, num) SHOW_UBITS_BE(name, gb, num) 
  250 #   define SHOW_SBITS(name, gb, num) SHOW_SBITS_BE(name, gb, num) 
  253 #define GET_CACHE(name, gb) ((uint32_t) name ## _cache) 
  270 #if UNCHECKED_BITSTREAM_READER 
  273     s->index += 
av_clip(n, -
s->index, 
s->size_in_bits_plus8 - 
s->index);
 
  293     return (
NEG_USR32(sign ^ cache, n) ^ sign) - sign;
 
  307     return (
zero_extend(sign ^ cache, n) ^ sign) - sign;
 
  327     register unsigned int tmp;
 
  363     register unsigned int tmp;
 
  380     unsigned int index = 
s->index;
 
  382 #ifdef BITSTREAM_READER_LE 
  389 #if !UNCHECKED_BITSTREAM_READER 
  390     if (
s->index < 
s->size_in_bits_plus8)
 
  419 #ifdef BITSTREAM_READER_LE 
  437 #ifdef BITSTREAM_READER_LE 
  505     buffer_size = (bit_size + 7) >> 3;
 
  508     s->size_in_bits       = bit_size;
 
  509     s->size_in_bits_plus8 = bit_size + 8;
 
  510     s->buffer_end         = 
buffer + buffer_size;
 
  527     if (byte_size > INT_MAX / 8 || byte_size < 0)
 
  535     if (byte_size > INT_MAX / 8 || byte_size < 0)
 
  545     return s->buffer + (
s->index >> 3);
 
  553 #define GET_VLC(code, name, gb, table, bits, max_depth)         \ 
  556         unsigned int index;                                     \ 
  558         index = SHOW_UBITS(name, gb, bits);                     \ 
  559         code  = table[index].sym;                               \ 
  560         n     = table[index].len;                               \ 
  562         if (max_depth > 1 && n < 0) {                           \ 
  563             LAST_SKIP_BITS(name, gb, bits);                     \ 
  564             UPDATE_CACHE(name, gb);                             \ 
  568             index = SHOW_UBITS(name, gb, nb_bits) + code;       \ 
  569             code  = table[index].sym;                           \ 
  570             n     = table[index].len;                           \ 
  571             if (max_depth > 2 && n < 0) {                       \ 
  572                 LAST_SKIP_BITS(name, gb, nb_bits);              \ 
  573                 UPDATE_CACHE(name, gb);                         \ 
  577                 index = SHOW_UBITS(name, gb, nb_bits) + code;   \ 
  578                 code  = table[index].sym;                       \ 
  579                 n     = table[index].len;                       \ 
  582         SKIP_BITS(name, gb, n);                                 \ 
  585 #define GET_RL_VLC(level, run, name, gb, table, bits,  \ 
  586                    max_depth, need_update)                      \ 
  589         unsigned int index;                                     \ 
  591         index = SHOW_UBITS(name, gb, bits);                     \ 
  592         level = table[index].level;                             \ 
  593         n     = table[index].len;                               \ 
  595         if (max_depth > 1 && n < 0) {                           \ 
  596             SKIP_BITS(name, gb, bits);                          \ 
  598                 UPDATE_CACHE(name, gb);                         \ 
  603             index = SHOW_UBITS(name, gb, nb_bits) + level;      \ 
  604             level = table[index].level;                         \ 
  605             n     = table[index].len;                           \ 
  606             if (max_depth > 2 && n < 0) {                       \ 
  607                 LAST_SKIP_BITS(name, gb, nb_bits);              \ 
  609                     UPDATE_CACHE(name, gb);                     \ 
  613                 index = SHOW_UBITS(name, gb, nb_bits) + level;  \ 
  614                 level = table[index].level;                     \ 
  615                 n     = table[index].len;                       \ 
  618         run = table[index].run;                                 \ 
  619         SKIP_BITS(name, gb, n);                                 \ 
  632                                      int bits, 
int max_depth)
 
  683 #endif // CACHED_BITSTREAM_READER 
  
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
 
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
 
static unsigned int show_bits1(GetBitContext *s)
 
static int get_bits_left(GetBitContext *gb)
 
#define GET_VLC(code, name, gb, table, bits, max_depth)
If the vlc code is invalid and max_depth=1, then no bits will be removed.
 
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
 
static int get_bits_count(const GetBitContext *s)
 
static const uint16_t table[]
 
static av_const unsigned zero_extend(unsigned val, unsigned bits)
 
#define UPDATE_CACHE(name, gb)
 
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
 
#define OPEN_READER_NOSIZE(name, gb)
 
#define GET_CACHE(name, gb)
 
static void skip_bits(GetBitContext *s, int n)
 
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
 
static int64_t get_sbits64(GetBitContext *s, int n)
Read 0-64 bits as a signed integer.
 
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
 
#define CLOSE_READER(name, gb)
 
#define SHOW_SBITS(name, gb, num)
 
static av_const int64_t sign_extend64(int64_t val, unsigned bits)
 
static unsigned int get_bits_le(GetBitContext *s, int n)
 
static int get_sbits(GetBitContext *s, int n)
 
static int decode012(GetBitContext *gb)
 
#define SHOW_UBITS_LE(name, gb, num)
 
and forward the result(frame or status change) to the corresponding input. If nothing is possible
 
static unsigned int get_bits1(GetBitContext *s)
 
#define LAST_SKIP_BITS(name, gb, num)
 
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
 
#define OPEN_READER(name, gb)
 
static int get_xbits(GetBitContext *s, int n)
Read MPEG-1 dc-style VLC (sign bit + mantissa with no MSB).
 
static void skip_bits1(GetBitContext *s)
 
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
 
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
 
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
 
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
 
const uint8_t * buffer_end
 
static int get_xbits_le(GetBitContext *s, int n)
 
static const uint8_t * align_get_bits(GetBitContext *s)
 
#define AV_INPUT_BUFFER_PADDING_SIZE
 
static int skip_1stop_8data_bits(GetBitContext *gb)
 
#define SHOW_UBITS(name, gb, num)
 
#define UPDATE_CACHE_LE(name, gb)
 
the frame and frame reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFrame structures Several references can point to the same frame buffer
 
static av_const int sign_extend(int val, unsigned bits)
 
static int decode210(GetBitContext *gb)
 
static av_always_inline int get_bitsz(GetBitContext *s, int n)
Read 0-25 bits.
 
static int init_get_bits8_le(GetBitContext *s, const uint8_t *buffer, int byte_size)
 
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
 
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.