27 #ifndef AVCODEC_CABAC_FUNCTIONS_H 28 #define AVCODEC_CABAC_FUNCTIONS_H 35 #ifndef UNCHECKED_BITSTREAM_READER 36 #define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER 57 #if !defined(get_cabac_bypass) || !defined(get_cabac_terminate) 65 #if !UNCHECKED_BITSTREAM_READER 72 #ifndef get_cabac_terminate 82 #ifndef get_cabac_inline 102 #if !UNCHECKED_BITSTREAM_READER 109 #ifndef get_cabac_inline 115 c->
range -= RangeLPS;
126 c->
range<<= lps_mask;
142 #ifndef get_cabac_bypass 160 #ifndef get_cabac_bypass_sign 173 return (val^mask)-
mask;
180 #ifndef get_cabac_terminate
static int shift(int a, int b)
const uint8_t * bytestream_end
static void renorm_cabac_decoder_once(CABACContext *c)
static int av_unused get_cabac(CABACContext *c, uint8_t *const state)
static const uint8_t *const ff_h264_last_coeff_flag_offset_8x8
static int av_noinline av_unused get_cabac_noinline(CABACContext *c, uint8_t *const state)
const uint8_t * bytestream
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
static av_unused const uint8_t * skip_bytes(CABACContext *c, int n)
Skip n bytes and reset the decoder.
static av_always_inline int get_cabac_inline(CABACContext *c, uint8_t *const state)
static const uint16_t mask[17]
const uint8_t * bytestream_start
#define H264_LAST_COEFF_FLAG_OFFSET_8x8_OFFSET
int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size)
static int av_unused get_cabac_terminate(CABACContext *c)
static void refill(CABACContext *c)
#define H264_MLPS_STATE_OFFSET
static av_always_inline int get_cabac_bypass_sign(CABACContext *c, int val)
static int av_unused get_cabac_bypass(CABACContext *c)
#define H264_NORM_SHIFT_OFFSET
const uint8_t ff_h264_cabac_tables[512+4 *2 *64+4 *64+63]
#define bit(string, value)
static void refill2(CABACContext *c)
static const uint8_t *const ff_h264_lps_range
static double val(void *priv, double ch)
static const uint8_t *const ff_h264_mlps_state
Context Adaptive Binary Arithmetic Coder.
static const uint8_t *const ff_h264_norm_shift
#define H264_LPS_RANGE_OFFSET