35 9,8,7,7,6,6,6,6,5,5,5,5,5,5,5,5,
36 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
37 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
38 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
39 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
40 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
41 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
42 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
43 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
44 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
45 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
46 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
47 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
48 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
49 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
50 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
51 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
52 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
53 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
54 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
58 {128,176,208,240}, {128,167,197,227}, {128,158,187,216}, {123,150,178,205},
59 {116,142,169,195}, {111,135,160,185}, {105,128,152,175}, {100,122,144,166},
60 { 95,116,137,158}, { 90,110,130,150}, { 85,104,123,142}, { 81, 99,117,135},
61 { 77, 94,111,128}, { 73, 89,105,122}, { 69, 85,100,116}, { 66, 80, 95,110},
62 { 62, 76, 90,104}, { 59, 72, 86, 99}, { 56, 69, 81, 94}, { 53, 65, 77, 89},
63 { 51, 62, 73, 85}, { 48, 59, 69, 80}, { 46, 56, 66, 76}, { 43, 53, 63, 72},
64 { 41, 50, 59, 69}, { 39, 48, 56, 65}, { 37, 45, 54, 62}, { 35, 43, 51, 59},
65 { 33, 41, 48, 56}, { 32, 39, 46, 53}, { 30, 37, 43, 50}, { 29, 35, 41, 48},
66 { 27, 33, 39, 45}, { 26, 31, 37, 43}, { 24, 30, 35, 41}, { 23, 28, 33, 39},
67 { 22, 27, 32, 37}, { 21, 26, 30, 35}, { 20, 24, 29, 33}, { 19, 23, 27, 31},
68 { 18, 22, 26, 30}, { 17, 21, 25, 28}, { 16, 20, 23, 27}, { 15, 19, 22, 25},
69 { 14, 18, 21, 24}, { 14, 17, 20, 23}, { 13, 16, 19, 22}, { 12, 15, 18, 21},
70 { 12, 14, 17, 20}, { 11, 14, 16, 19}, { 11, 13, 15, 18}, { 10, 12, 15, 17},
71 { 10, 12, 14, 16}, { 9, 11, 13, 15}, { 9, 11, 12, 14}, { 8, 10, 12, 14},
72 { 8, 9, 11, 13}, { 7, 9, 11, 12}, { 7, 9, 10, 12}, { 7, 8, 10, 11},
73 { 6, 8, 9, 11}, { 6, 7, 9, 10}, { 6, 7, 8, 9}, { 2, 2, 2, 2},
80 1, 2, 3, 4, 5, 6, 7, 8,
81 9,10,11,12,13,14,15,16,
82 17,18,19,20,21,22,23,24,
83 25,26,27,28,29,30,31,32,
84 33,34,35,36,37,38,39,40,
85 41,42,43,44,45,46,47,48,
86 49,50,51,52,53,54,55,56,
87 57,58,59,60,61,62,62,63,
91 0, 0, 1, 2, 2, 4, 4, 5,
92 6, 7, 8, 9, 9,11,11,12,
93 13,13,15,15,16,16,18,18,
94 19,19,21,21,22,22,23,24,
95 24,25,26,26,27,27,28,29,
96 29,30,30,30,31,32,32,33,
97 33,33,34,34,35,35,35,36,
98 36,36,37,37,37,38,38,63,
102 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
103 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
104 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
105 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8
167 for(i=0; i< 63; i++){
186 static inline void renorm_cabac_encoder(
CABACContext *c){
187 while(c->
range < 0x100){
191 }
else if(c->
low<0x200){
207 if(bit == ((*
state)&1)){
208 c->
range -= RangeLPS;
216 renorm_cabac_encoder(c);
231 }
else if(c->
low<0x400){
244 static int put_cabac_terminate(
CABACContext *c,
int bit){
248 renorm_cabac_encoder(c);
253 renorm_cabac_encoder(c);
256 put_cabac_bit(c, c->
low>>9);
277 for(i=0; i<
SIZE; i++){
279 else r[
i] = (i>>8)&1;
282 for(i=0; i<
SIZE; i++){
284 put_cabac_bypass(&c, r[i]&1);
288 for(i=0; i<
SIZE; i++){
290 put_cabac(&c, state, r[i]&1);
294 put_cabac_terminate(&c, 1);
298 memset(state, 0,
sizeof(state));
300 for(i=0; i<
SIZE; i++){
307 for(i=0; i<
SIZE; i++){
static const uint8_t lps_range[64][4]
const uint8_t * bytestream_end
static uint8_t *const ff_h264_lps_range
static uint8_t *const ff_h264_mlps_state
uint8_t ff_h264_cabac_tables[512+4 *2 *64+4 *64+63]
static int av_unused get_cabac(CABACContext *c, uint8_t *const state)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
const uint8_t * bytestream
static uint8_t h264_mps_state[2 *64]
static uint8_t h264_lps_state[2 *64]
bitstream reader API header.
void av_log(void *avcl, int level, const char *fmt,...)
void ff_init_cabac_states(void)
static void put_bits(J2kEncoderContext *s, int val, int n)
put n times val bit
static int put_bits_count(PutBitContext *s)
const uint8_t * bytestream_start
Context Adaptive Binary Arithmetic Coder inline functions.
void ff_init_cabac_encoder(CABACContext *c, uint8_t *buf, int buf_size)
static int av_unused get_cabac_terminate(CABACContext *c)
static const uint8_t last_coeff_flag_offset_8x8[63]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
static const uint8_t mps_state[64]
synthesis window for stochastic i
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
static const uint8_t lps_state[64]
static int av_unused get_cabac_bypass(CABACContext *c)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
common internal and external API header
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
void ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size)
static uint8_t *const ff_h264_last_coeff_flag_offset_8x8
int main(int argc, char **argv)
Context Adaptive Binary Arithmetic Coder.