7 // workaround for typedef conflict in MPlayer
8 typedef unsigned short UINT16;
9 typedef signed short INT16;
12 typedef unsigned char UINT8;
13 typedef unsigned int UINT32;
14 typedef unsigned long long UINT64;
15 typedef signed char INT8;
16 typedef signed int INT32;
17 typedef signed long long INT64;
23 typedef void (*WriteDataFunc)(void *, UINT8 *, int);
25 typedef struct PutBitContext {
26 UINT8 *buf, *buf_ptr, *buf_end;
29 long long data_out_size; /* in bytes */
31 WriteDataFunc write_data;
34 void init_put_bits(PutBitContext *s,
35 UINT8 *buffer, int buffer_size,
37 void (*write_data)(void *, UINT8 *, int));
38 void put_bits(PutBitContext *s, int n, unsigned int value);
39 long long get_bit_count(PutBitContext *s);
40 void align_put_bits(PutBitContext *s);
41 void flush_put_bits(PutBitContext *s);
43 /* jpeg specific put_bits */
44 void jput_bits(PutBitContext *s, int n, unsigned int value);
45 void jflush_put_bits(PutBitContext *s);
49 typedef struct GetBitContext {
50 UINT8 *buf, *buf_ptr, *buf_end;
59 int table_size, table_allocated;
62 void init_get_bits(GetBitContext *s,
63 UINT8 *buffer, int buffer_size);
65 unsigned int get_bits(GetBitContext *s, int n);
66 void align_get_bits(GetBitContext *s);
67 int init_vlc(VLC *vlc, int nb_bits, int nb_codes,
68 const void *bits, int bits_wrap, int bits_size,
69 const void *codes, int codes_wrap, int codes_size);
70 void free_vlc(VLC *vlc);
71 int get_vlc(GetBitContext *s, VLC *vlc);
73 /* macro to go faster */
75 /* XXX: optimize buffer end test */
76 #define SHOW_BITS(s, val, n)\
78 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
79 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
81 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
82 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
84 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
85 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
90 val = bit_buf >> (32 - n);\
93 /* SHOW_BITS with n1 >= n must be been done before */
94 #define FLUSH_BITS(n)\
100 #define SAVE_BITS(s) \
102 bit_cnt = (s)->bit_cnt;\
103 bit_buf = (s)->bit_buf;\
104 buf_ptr = (s)->buf_ptr;\
107 #define RESTORE_BITS(s) \
109 (s)->buf_ptr = buf_ptr;\
110 (s)->bit_buf = bit_buf;\
111 (s)->bit_cnt = bit_cnt;\
114 /* define it to include statistics code (useful only for optimizing
131 extern int st_current_index;
132 extern unsigned int st_bit_counts[ST_NB];
133 extern unsigned int st_out_bit_counts[ST_NB];
135 void print_stats(void);
138 /* misc math functions */
140 extern inline int log2(unsigned int v)
145 if (v & 0xffff0000) {
168 void *av_mallocz(int size);