27 #ifndef AVCODEC_CABAC_FUNCTIONS_H 28 #define AVCODEC_CABAC_FUNCTIONS_H 36 #ifndef UNCHECKED_BITSTREAM_READER 37 #define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER 58 #if !defined(get_cabac_bypass) || !defined(get_cabac_terminate) 66 #if !UNCHECKED_BITSTREAM_READER 73 #ifndef get_cabac_terminate 83 #ifndef get_cabac_inline 103 #if !UNCHECKED_BITSTREAM_READER 110 #ifndef get_cabac_inline 116 c->
range -= RangeLPS;
127 c->
range<<= lps_mask;
143 #ifndef get_cabac_bypass 161 #ifndef get_cabac_bypass_sign 174 return (val^mask)-
mask;
181 #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