Mercurial > libavcodec.hg
comparison common.h @ 0:986e461dc072 libavcodec
Initial revision
author | glantau |
---|---|
date | Sun, 22 Jul 2001 14:18:56 +0000 |
parents | |
children | 2e2c46c87460 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:986e461dc072 |
---|---|
1 #ifndef COMMON_H | |
2 #define COMMON_H | |
3 | |
4 #include "../config.h" | |
5 | |
6 #ifndef USE_LIBAVCODEC | |
7 // workaround for typedef conflict in MPlayer | |
8 typedef unsigned short UINT16; | |
9 typedef signed short INT16; | |
10 #endif | |
11 | |
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; | |
18 | |
19 /* bit output */ | |
20 | |
21 struct PutBitContext; | |
22 | |
23 typedef void (*WriteDataFunc)(void *, UINT8 *, int); | |
24 | |
25 typedef struct PutBitContext { | |
26 UINT8 *buf, *buf_ptr, *buf_end; | |
27 int bit_cnt; | |
28 UINT32 bit_buf; | |
29 long long data_out_size; /* in bytes */ | |
30 void *opaque; | |
31 WriteDataFunc write_data; | |
32 } PutBitContext; | |
33 | |
34 void init_put_bits(PutBitContext *s, | |
35 UINT8 *buffer, int buffer_size, | |
36 void *opaque, | |
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); | |
42 | |
43 /* jpeg specific put_bits */ | |
44 void jput_bits(PutBitContext *s, int n, unsigned int value); | |
45 void jflush_put_bits(PutBitContext *s); | |
46 | |
47 /* bit input */ | |
48 | |
49 typedef struct GetBitContext { | |
50 UINT8 *buf, *buf_ptr, *buf_end; | |
51 int bit_cnt; | |
52 UINT32 bit_buf; | |
53 } GetBitContext; | |
54 | |
55 typedef struct VLC { | |
56 int bits; | |
57 INT16 *table_codes; | |
58 INT8 *table_bits; | |
59 int table_size, table_allocated; | |
60 } VLC; | |
61 | |
62 void init_get_bits(GetBitContext *s, | |
63 UINT8 *buffer, int buffer_size); | |
64 | |
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); | |
72 | |
73 /* macro to go faster */ | |
74 /* n must be <= 24 */ | |
75 /* XXX: optimize buffer end test */ | |
76 #define SHOW_BITS(s, val, n)\ | |
77 {\ | |
78 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\ | |
79 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\ | |
80 bit_cnt += 8;\ | |
81 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\ | |
82 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\ | |
83 bit_cnt += 8;\ | |
84 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\ | |
85 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\ | |
86 bit_cnt += 8;\ | |
87 }\ | |
88 }\ | |
89 }\ | |
90 val = bit_buf >> (32 - n);\ | |
91 } | |
92 | |
93 /* SHOW_BITS with n1 >= n must be been done before */ | |
94 #define FLUSH_BITS(n)\ | |
95 {\ | |
96 bit_buf <<= n;\ | |
97 bit_cnt -= n;\ | |
98 } | |
99 | |
100 #define SAVE_BITS(s) \ | |
101 {\ | |
102 bit_cnt = (s)->bit_cnt;\ | |
103 bit_buf = (s)->bit_buf;\ | |
104 buf_ptr = (s)->buf_ptr;\ | |
105 } | |
106 | |
107 #define RESTORE_BITS(s) \ | |
108 {\ | |
109 (s)->buf_ptr = buf_ptr;\ | |
110 (s)->bit_buf = bit_buf;\ | |
111 (s)->bit_cnt = bit_cnt;\ | |
112 } | |
113 | |
114 /* define it to include statistics code (useful only for optimizing | |
115 codec efficiency */ | |
116 //#define STATS | |
117 | |
118 #ifdef STATS | |
119 | |
120 enum { | |
121 ST_UNKNOWN, | |
122 ST_DC, | |
123 ST_INTRA_AC, | |
124 ST_INTER_AC, | |
125 ST_INTRA_MB, | |
126 ST_INTER_MB, | |
127 ST_MV, | |
128 ST_NB, | |
129 }; | |
130 | |
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]; | |
134 | |
135 void print_stats(void); | |
136 #endif | |
137 | |
138 /* misc math functions */ | |
139 | |
140 extern inline int log2(unsigned int v) | |
141 { | |
142 int n; | |
143 | |
144 n = 0; | |
145 if (v & 0xffff0000) { | |
146 v >>= 16; | |
147 n += 16; | |
148 } | |
149 if (v & 0xff00) { | |
150 v >>= 8; | |
151 n += 8; | |
152 } | |
153 if (v & 0xf0) { | |
154 v >>= 4; | |
155 n += 4; | |
156 } | |
157 if (v & 0xc) { | |
158 v >>= 2; | |
159 n += 2; | |
160 } | |
161 if (v & 0x2) { | |
162 n++; | |
163 } | |
164 return n; | |
165 } | |
166 | |
167 /* memory */ | |
168 void *av_mallocz(int size); | |
169 | |
170 #endif |