26 #ifndef AVCODEC_GET_BITS_H 27 #define AVCODEC_GET_BITS_H 50 #ifndef UNCHECKED_BITSTREAM_READER 51 #define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER 61 #define VLC_TYPE int16_t 119 #ifdef LONG_BITSTREAM_READER 120 # define MIN_CACHE_BITS 32 122 # define MIN_CACHE_BITS 25 125 #if UNCHECKED_BITSTREAM_READER 126 #define OPEN_READER(name, gb) \ 127 unsigned int name ## _index = (gb)->index; \ 128 unsigned int av_unused name ## _cache 130 #define HAVE_BITS_REMAINING(name, gb) 1 132 #define OPEN_READER(name, gb) \ 133 unsigned int name ## _index = (gb)->index; \ 134 unsigned int av_unused name ## _cache = 0; \ 135 unsigned int av_unused name ## _size_plus8 = (gb)->size_in_bits_plus8 137 #define HAVE_BITS_REMAINING(name, gb) name ## _index < name ## _size_plus8 140 #define CLOSE_READER(name, gb) (gb)->index = name ## _index 142 #ifdef BITSTREAM_READER_LE 144 # ifdef LONG_BITSTREAM_READER 145 # define UPDATE_CACHE(name, gb) name ## _cache = \ 146 AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) 148 # define UPDATE_CACHE(name, gb) name ## _cache = \ 149 AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) 152 # define SKIP_CACHE(name, gb, num) name ## _cache >>= (num) 156 # ifdef LONG_BITSTREAM_READER 157 # define UPDATE_CACHE(name, gb) name ## _cache = \ 158 AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7)) 160 # define UPDATE_CACHE(name, gb) name ## _cache = \ 161 AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7) 164 # define SKIP_CACHE(name, gb, num) name ## _cache <<= (num) 168 #if UNCHECKED_BITSTREAM_READER 169 # define SKIP_COUNTER(name, gb, num) name ## _index += (num) 171 # define SKIP_COUNTER(name, gb, num) \ 172 name ## _index = FFMIN(name ## _size_plus8, name ## _index + (num)) 175 #define SKIP_BITS(name, gb, num) \ 177 SKIP_CACHE(name, gb, num); \ 178 SKIP_COUNTER(name, gb, num); \ 181 #define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) 183 #ifdef BITSTREAM_READER_LE 184 # define SHOW_UBITS(name, gb, num) zero_extend(name ## _cache, num) 185 # define SHOW_SBITS(name, gb, num) sign_extend(name ## _cache, num) 187 # define SHOW_UBITS(name, gb, num) NEG_USR32(name ## _cache, num) 188 # define SHOW_SBITS(name, gb, num) NEG_SSR32(name ## _cache, num) 191 #define GET_CACHE(name, gb) ((uint32_t) name ## _cache) 200 #if UNCHECKED_BITSTREAM_READER 222 return (
NEG_USR32(sign ^ cache, n) ^ sign) - sign;
277 #ifdef BITSTREAM_READER_LE 278 result >>= index & 7;
281 result <<= index & 7;
284 #if !UNCHECKED_BITSTREAM_READER 313 #ifdef BITSTREAM_READER_LE 315 return ret | (
get_bits(s, n - 16) << 16);
317 unsigned ret =
get_bits(s, 16) << (n - 16);
331 #ifdef BITSTREAM_READER_LE 385 if (bit_size >= INT_MAX - 7 || bit_size < 0 || !buffer) {
386 buffer_size = bit_size = 0;
391 buffer_size = (bit_size + 7) >> 3;
413 if (byte_size > INT_MAX / 8 || byte_size < 0)
426 #define init_vlc(vlc, nb_bits, nb_codes, \ 427 bits, bits_wrap, bits_size, \ 428 codes, codes_wrap, codes_size, \ 430 ff_init_vlc_sparse(vlc, nb_bits, nb_codes, \ 431 bits, bits_wrap, bits_size, \ 432 codes, codes_wrap, codes_size, \ 436 const void *
bits,
int bits_wrap,
int bits_size,
437 const void *codes,
int codes_wrap,
int codes_size,
438 const void *symbols,
int symbols_wrap,
int symbols_size,
442 #define INIT_VLC_LE 2 443 #define INIT_VLC_USE_NEW_STATIC 4 445 #define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \ 447 static VLC_TYPE table[static_size][2]; \ 448 (vlc)->table = table; \ 449 (vlc)->table_allocated = static_size; \ 450 init_vlc(vlc, bits, a, b, c, d, e, f, g, INIT_VLC_USE_NEW_STATIC); \ 458 #define GET_VLC(code, name, gb, table, bits, max_depth) \ 461 unsigned int index; \ 463 index = SHOW_UBITS(name, gb, bits); \ 464 code = table[index][0]; \ 465 n = table[index][1]; \ 467 if (max_depth > 1 && n < 0) { \ 468 LAST_SKIP_BITS(name, gb, bits); \ 469 UPDATE_CACHE(name, gb); \ 473 index = SHOW_UBITS(name, gb, nb_bits) + code; \ 474 code = table[index][0]; \ 475 n = table[index][1]; \ 476 if (max_depth > 2 && n < 0) { \ 477 LAST_SKIP_BITS(name, gb, nb_bits); \ 478 UPDATE_CACHE(name, gb); \ 482 index = SHOW_UBITS(name, gb, nb_bits) + code; \ 483 code = table[index][0]; \ 484 n = table[index][1]; \ 487 SKIP_BITS(name, gb, n); \ 490 #define GET_RL_VLC(level, run, name, gb, table, bits, \ 491 max_depth, need_update) \ 494 unsigned int index; \ 496 index = SHOW_UBITS(name, gb, bits); \ 497 level = table[index].level; \ 498 n = table[index].len; \ 500 if (max_depth > 1 && n < 0) { \ 501 SKIP_BITS(name, gb, bits); \ 503 UPDATE_CACHE(name, gb); \ 508 index = SHOW_UBITS(name, gb, nb_bits) + level; \ 509 level = table[index].level; \ 510 n = table[index].len; \ 512 run = table[index].run; \ 513 SKIP_BITS(name, gb, n); \ 525 int bits,
int max_depth)
565 static inline void print_bin(
int bits,
int n)
569 for (i = n - 1; i >= 0; i--)
571 for (i = n; i < 24; i++)
588 int bits,
int max_depth,
const char *file,
589 const char *func,
int line)
597 print_bin(bits2, len);
600 bits2, len, r, pos, file, func, line);
605 static inline int get_xbits_trace(
GetBitContext *s,
int n,
const char *file,
606 const char *func,
int line)
618 #define get_bits(s, n) get_bits_trace(s , n, __FILE__, __PRETTY_FUNCTION__, __LINE__) 619 #define get_bits1(s) get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__) 620 #define get_xbits(s, n) get_xbits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) 622 #define get_vlc(s, vlc) get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__) 623 #define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__) 625 #define tprintf(p, ...) av_log(p, AV_LOG_DEBUG, __VA_ARGS__) 628 #define tprintf(p, ...) { } static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
static unsigned int show_bits1(GetBitContext *s)
struct GetBitContext GetBitContext
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void skip_bits_long(GetBitContext *s, int n)
static int get_sbits(GetBitContext *s, int n)
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
static int get_bits_count(const GetBitContext *s)
static const uint8_t bits2[81]
static int get_bits_left(GetBitContext *gb)
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
struct RL_VLC_ELEM RL_VLC_ELEM
#define UPDATE_CACHE(name, gb)
void ff_free_vlc(VLC *vlc)
static const struct endianess table[]
simple assert() macros that are a bit more flexible than ISO C assert().
void av_log(void *avcl, int level, const char *fmt,...)
#define CLOSE_READER(name, gb)
static int check_marker(GetBitContext *s, const char *msg)
int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
FFmpeg Automated Testing Environment ************************************Table of Contents *****************FFmpeg Automated Testing Environment Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass target exec to configure or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script tests fate sh from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at doc fate_config sh template Create a configuration that suits your based on the configuration template The slot configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern< arch >< os >< compiler >< compiler version > The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the fate_recv variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration file
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#define LAST_SKIP_BITS(name, gb, num)
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#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.
#define SHOW_UBITS(name, gb, num)
static int decode210(GetBitContext *gb)
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static int get_xbits(GetBitContext *s, int n)
read mpeg1 dc style vlc (sign bit + mantisse with no MSB).
#define OPEN_READER(name, gb)
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits1(GetBitContext *s)
int(* func)(AVBPrint *dst, const char *in, const char *arg)
static void skip_bits(GetBitContext *s, int n)
synthesis window for stochastic i
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define GET_CACHE(name, gb)
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static av_const int sign_extend(int val, unsigned bits)
#define SHOW_SBITS(name, gb, num)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
common internal and external API header
const uint8_t * buffer_end
static int decode012(GetBitContext *gb)
static const uint8_t * align_get_bits(GetBitContext *s)