fixed config for direct mplayer build compatibility
[libav.git] / libavcodec / common.h
CommitLineData
de6d9b64
FB
1#ifndef COMMON_H
2#define COMMON_H
3
4#include "../config.h"
5
980fc7b8
FB
6#ifndef __WINE_WINDEF16_H
7/* workaround for typedef conflict in MPlayer (wine typedefs) */
de6d9b64
FB
8typedef unsigned short UINT16;
9typedef signed short INT16;
10#endif
11
12typedef unsigned char UINT8;
13typedef unsigned int UINT32;
14typedef unsigned long long UINT64;
15typedef signed char INT8;
16typedef signed int INT32;
17typedef signed long long INT64;
18
19/* bit output */
20
21struct PutBitContext;
22
23typedef void (*WriteDataFunc)(void *, UINT8 *, int);
24
25typedef 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
34void init_put_bits(PutBitContext *s,
35 UINT8 *buffer, int buffer_size,
36 void *opaque,
37 void (*write_data)(void *, UINT8 *, int));
38void put_bits(PutBitContext *s, int n, unsigned int value);
39long long get_bit_count(PutBitContext *s);
40void align_put_bits(PutBitContext *s);
41void flush_put_bits(PutBitContext *s);
42
43/* jpeg specific put_bits */
44void jput_bits(PutBitContext *s, int n, unsigned int value);
45void jflush_put_bits(PutBitContext *s);
46
47/* bit input */
48
49typedef struct GetBitContext {
50 UINT8 *buf, *buf_ptr, *buf_end;
51 int bit_cnt;
52 UINT32 bit_buf;
53} GetBitContext;
54
55typedef struct VLC {
56 int bits;
57 INT16 *table_codes;
58 INT8 *table_bits;
59 int table_size, table_allocated;
60} VLC;
61
62void init_get_bits(GetBitContext *s,
63 UINT8 *buffer, int buffer_size);
64
65unsigned int get_bits(GetBitContext *s, int n);
66void align_get_bits(GetBitContext *s);
67int 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);
70void free_vlc(VLC *vlc);
71int 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
120enum {
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
131extern int st_current_index;
132extern unsigned int st_bit_counts[ST_NB];
133extern unsigned int st_out_bit_counts[ST_NB];
134
135void print_stats(void);
136#endif
137
138/* misc math functions */
139
140extern 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 */
168void *av_mallocz(int size);
169
170#endif