29 #include "libavutil/common.h"
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},
77 1, 2, 3, 4, 5, 6, 7, 8,
78 9,10,11,12,13,14,15,16,
79 17,18,19,20,21,22,23,24,
80 25,26,27,28,29,30,31,32,
81 33,34,35,36,37,38,39,40,
82 41,42,43,44,45,46,47,48,
83 49,50,51,52,53,54,55,56,
84 57,58,59,60,61,62,62,63,
88 0, 0, 1, 2, 2, 4, 4, 5,
89 6, 7, 8, 9, 9,11,11,12,
90 13,13,15,15,16,16,18,18,
91 19,19,21,21,22,22,23,24,
92 24,25,26,26,27,27,28,29,
93 29,30,30,30,31,32,32,33,
94 33,33,34,34,35,35,35,36,
95 36,36,37,37,37,38,38,63,
99 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
100 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
101 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
102 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8
140 static int initialized = 0;
161 for(i=0; i< 63; i++){
171 #include "libavutil/lfg.h"
181 static inline void renorm_cabac_encoder(
CABACContext *c){
182 while(c->
range < 0x100){
186 }
else if(c->
low<0x200){
202 if(bit == ((*state)&1)){
203 c->
range -= RangeLPS;
211 renorm_cabac_encoder(c);
226 }
else if(c->
low<0x400){
239 static int put_cabac_terminate(
CABACContext *c,
int bit){
243 renorm_cabac_encoder(c);
248 renorm_cabac_encoder(c);
251 put_cabac_bit(c, c->
low>>9);
272 for(i=0; i<
SIZE; i++){
274 else r[i] = (i>>8)&1;
277 for(i=0; i<
SIZE; i++){
279 put_cabac_bypass(&c, r[i]&1);
283 for(i=0; i<
SIZE; i++){
285 put_cabac(&c, state, r[i]&1);
289 put_cabac_terminate(&c, 1);
293 memset(state, 0,
sizeof(state));
295 for(i=0; i<
SIZE; i++){
302 for(i=0; i<
SIZE; i++){
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
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]
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level...
static int av_unused get_cabac(CABACContext *c, uint8_t *const state)
const uint8_t * bytestream
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
bitstream reader API header.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void ff_init_cabac_states(void)
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]
void av_lfg_init(AVLFG *c, unsigned int seed)
static const uint8_t mps_state[64]
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.
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
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int main(int argc, char **argv)
Context Adaptive Binary Arithmetic Coder.