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