annotate common.h @ 20:907b67420d84 libavcodec

inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
author arpi_esp
date Fri, 03 Aug 2001 23:09:15 +0000
parents f439e6867cac
children 20e680e7a490
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 #ifndef COMMON_H
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 #define COMMON_H
986e461dc072 Initial revision
glantau
parents:
diff changeset
3
10
f439e6867cac added HAVE_AV_CONFIG_H
glantau
parents: 2
diff changeset
4 #ifdef HAVE_AV_CONFIG_H
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
5 #include "../config.h"
10
f439e6867cac added HAVE_AV_CONFIG_H
glantau
parents: 2
diff changeset
6 #endif
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
7
2
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
8 #ifndef __WINE_WINDEF16_H
2e2c46c87460 fixed config for direct mplayer build compatibility
glantau
parents: 0
diff changeset
9 /* workaround for typedef conflict in MPlayer (wine typedefs) */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
10 typedef unsigned short UINT16;
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 typedef signed short INT16;
986e461dc072 Initial revision
glantau
parents:
diff changeset
12 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
13
986e461dc072 Initial revision
glantau
parents:
diff changeset
14 typedef unsigned char UINT8;
986e461dc072 Initial revision
glantau
parents:
diff changeset
15 typedef unsigned int UINT32;
986e461dc072 Initial revision
glantau
parents:
diff changeset
16 typedef unsigned long long UINT64;
986e461dc072 Initial revision
glantau
parents:
diff changeset
17 typedef signed char INT8;
986e461dc072 Initial revision
glantau
parents:
diff changeset
18 typedef signed int INT32;
986e461dc072 Initial revision
glantau
parents:
diff changeset
19 typedef signed long long INT64;
986e461dc072 Initial revision
glantau
parents:
diff changeset
20
986e461dc072 Initial revision
glantau
parents:
diff changeset
21 /* bit output */
986e461dc072 Initial revision
glantau
parents:
diff changeset
22
986e461dc072 Initial revision
glantau
parents:
diff changeset
23 struct PutBitContext;
986e461dc072 Initial revision
glantau
parents:
diff changeset
24
986e461dc072 Initial revision
glantau
parents:
diff changeset
25 typedef void (*WriteDataFunc)(void *, UINT8 *, int);
986e461dc072 Initial revision
glantau
parents:
diff changeset
26
986e461dc072 Initial revision
glantau
parents:
diff changeset
27 typedef struct PutBitContext {
20
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
28 UINT32 bit_buf;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
29 int bit_cnt;
20
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
30 UINT8 *buf, *buf_ptr, *buf_end;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
31 long long data_out_size; /* in bytes */
986e461dc072 Initial revision
glantau
parents:
diff changeset
32 void *opaque;
986e461dc072 Initial revision
glantau
parents:
diff changeset
33 WriteDataFunc write_data;
986e461dc072 Initial revision
glantau
parents:
diff changeset
34 } PutBitContext;
986e461dc072 Initial revision
glantau
parents:
diff changeset
35
986e461dc072 Initial revision
glantau
parents:
diff changeset
36 void init_put_bits(PutBitContext *s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
37 UINT8 *buffer, int buffer_size,
986e461dc072 Initial revision
glantau
parents:
diff changeset
38 void *opaque,
986e461dc072 Initial revision
glantau
parents:
diff changeset
39 void (*write_data)(void *, UINT8 *, int));
986e461dc072 Initial revision
glantau
parents:
diff changeset
40 void put_bits(PutBitContext *s, int n, unsigned int value);
986e461dc072 Initial revision
glantau
parents:
diff changeset
41 long long get_bit_count(PutBitContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
42 void align_put_bits(PutBitContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
43 void flush_put_bits(PutBitContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
44
986e461dc072 Initial revision
glantau
parents:
diff changeset
45 /* jpeg specific put_bits */
986e461dc072 Initial revision
glantau
parents:
diff changeset
46 void jput_bits(PutBitContext *s, int n, unsigned int value);
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 void jflush_put_bits(PutBitContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
48
986e461dc072 Initial revision
glantau
parents:
diff changeset
49 /* bit input */
986e461dc072 Initial revision
glantau
parents:
diff changeset
50
986e461dc072 Initial revision
glantau
parents:
diff changeset
51 typedef struct GetBitContext {
20
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
52 UINT32 bit_buf;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
53 int bit_cnt;
20
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
54 UINT8 *buf, *buf_ptr, *buf_end;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
55 } GetBitContext;
986e461dc072 Initial revision
glantau
parents:
diff changeset
56
986e461dc072 Initial revision
glantau
parents:
diff changeset
57 typedef struct VLC {
986e461dc072 Initial revision
glantau
parents:
diff changeset
58 int bits;
986e461dc072 Initial revision
glantau
parents:
diff changeset
59 INT16 *table_codes;
986e461dc072 Initial revision
glantau
parents:
diff changeset
60 INT8 *table_bits;
986e461dc072 Initial revision
glantau
parents:
diff changeset
61 int table_size, table_allocated;
986e461dc072 Initial revision
glantau
parents:
diff changeset
62 } VLC;
986e461dc072 Initial revision
glantau
parents:
diff changeset
63
986e461dc072 Initial revision
glantau
parents:
diff changeset
64 void init_get_bits(GetBitContext *s,
986e461dc072 Initial revision
glantau
parents:
diff changeset
65 UINT8 *buffer, int buffer_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
66
20
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
67 unsigned int get_bits_long(GetBitContext *s, int n);
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
68
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
69 static inline unsigned int get_bits(GetBitContext *s, int n){
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
70 if(s->bit_cnt>=n){
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
71 /* most common case here */
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
72 unsigned int val = s->bit_buf >> (32 - n);
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
73 s->bit_buf <<= n;
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
74 s->bit_cnt -= n;
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
75 #ifdef STATS
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
76 st_bit_counts[st_current_index] += n;
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
77 #endif
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
78 return val;
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
79 }
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
80 return get_bits_long(s,n);
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
81 }
907b67420d84 inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
arpi_esp
parents: 10
diff changeset
82
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
83 void align_get_bits(GetBitContext *s);
986e461dc072 Initial revision
glantau
parents:
diff changeset
84 int init_vlc(VLC *vlc, int nb_bits, int nb_codes,
986e461dc072 Initial revision
glantau
parents:
diff changeset
85 const void *bits, int bits_wrap, int bits_size,
986e461dc072 Initial revision
glantau
parents:
diff changeset
86 const void *codes, int codes_wrap, int codes_size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
87 void free_vlc(VLC *vlc);
986e461dc072 Initial revision
glantau
parents:
diff changeset
88 int get_vlc(GetBitContext *s, VLC *vlc);
986e461dc072 Initial revision
glantau
parents:
diff changeset
89
986e461dc072 Initial revision
glantau
parents:
diff changeset
90 /* macro to go faster */
986e461dc072 Initial revision
glantau
parents:
diff changeset
91 /* n must be <= 24 */
986e461dc072 Initial revision
glantau
parents:
diff changeset
92 /* XXX: optimize buffer end test */
986e461dc072 Initial revision
glantau
parents:
diff changeset
93 #define SHOW_BITS(s, val, n)\
986e461dc072 Initial revision
glantau
parents:
diff changeset
94 {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
95 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
96 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
97 bit_cnt += 8;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
98 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
99 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
100 bit_cnt += 8;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
101 if (bit_cnt < n && buf_ptr < (s)->buf_end) {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
102 bit_buf |= *buf_ptr++ << (24 - bit_cnt);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
103 bit_cnt += 8;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
104 }\
986e461dc072 Initial revision
glantau
parents:
diff changeset
105 }\
986e461dc072 Initial revision
glantau
parents:
diff changeset
106 }\
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 val = bit_buf >> (32 - n);\
986e461dc072 Initial revision
glantau
parents:
diff changeset
108 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
109
986e461dc072 Initial revision
glantau
parents:
diff changeset
110 /* SHOW_BITS with n1 >= n must be been done before */
986e461dc072 Initial revision
glantau
parents:
diff changeset
111 #define FLUSH_BITS(n)\
986e461dc072 Initial revision
glantau
parents:
diff changeset
112 {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
113 bit_buf <<= n;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
114 bit_cnt -= n;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
115 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
116
986e461dc072 Initial revision
glantau
parents:
diff changeset
117 #define SAVE_BITS(s) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
118 {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
119 bit_cnt = (s)->bit_cnt;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
120 bit_buf = (s)->bit_buf;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
121 buf_ptr = (s)->buf_ptr;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
122 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
123
986e461dc072 Initial revision
glantau
parents:
diff changeset
124 #define RESTORE_BITS(s) \
986e461dc072 Initial revision
glantau
parents:
diff changeset
125 {\
986e461dc072 Initial revision
glantau
parents:
diff changeset
126 (s)->buf_ptr = buf_ptr;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
127 (s)->bit_buf = bit_buf;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
128 (s)->bit_cnt = bit_cnt;\
986e461dc072 Initial revision
glantau
parents:
diff changeset
129 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
130
986e461dc072 Initial revision
glantau
parents:
diff changeset
131 /* define it to include statistics code (useful only for optimizing
986e461dc072 Initial revision
glantau
parents:
diff changeset
132 codec efficiency */
986e461dc072 Initial revision
glantau
parents:
diff changeset
133 //#define STATS
986e461dc072 Initial revision
glantau
parents:
diff changeset
134
986e461dc072 Initial revision
glantau
parents:
diff changeset
135 #ifdef STATS
986e461dc072 Initial revision
glantau
parents:
diff changeset
136
986e461dc072 Initial revision
glantau
parents:
diff changeset
137 enum {
986e461dc072 Initial revision
glantau
parents:
diff changeset
138 ST_UNKNOWN,
986e461dc072 Initial revision
glantau
parents:
diff changeset
139 ST_DC,
986e461dc072 Initial revision
glantau
parents:
diff changeset
140 ST_INTRA_AC,
986e461dc072 Initial revision
glantau
parents:
diff changeset
141 ST_INTER_AC,
986e461dc072 Initial revision
glantau
parents:
diff changeset
142 ST_INTRA_MB,
986e461dc072 Initial revision
glantau
parents:
diff changeset
143 ST_INTER_MB,
986e461dc072 Initial revision
glantau
parents:
diff changeset
144 ST_MV,
986e461dc072 Initial revision
glantau
parents:
diff changeset
145 ST_NB,
986e461dc072 Initial revision
glantau
parents:
diff changeset
146 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
147
986e461dc072 Initial revision
glantau
parents:
diff changeset
148 extern int st_current_index;
986e461dc072 Initial revision
glantau
parents:
diff changeset
149 extern unsigned int st_bit_counts[ST_NB];
986e461dc072 Initial revision
glantau
parents:
diff changeset
150 extern unsigned int st_out_bit_counts[ST_NB];
986e461dc072 Initial revision
glantau
parents:
diff changeset
151
986e461dc072 Initial revision
glantau
parents:
diff changeset
152 void print_stats(void);
986e461dc072 Initial revision
glantau
parents:
diff changeset
153 #endif
986e461dc072 Initial revision
glantau
parents:
diff changeset
154
986e461dc072 Initial revision
glantau
parents:
diff changeset
155 /* misc math functions */
986e461dc072 Initial revision
glantau
parents:
diff changeset
156
986e461dc072 Initial revision
glantau
parents:
diff changeset
157 extern inline int log2(unsigned int v)
986e461dc072 Initial revision
glantau
parents:
diff changeset
158 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
159 int n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
160
986e461dc072 Initial revision
glantau
parents:
diff changeset
161 n = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
162 if (v & 0xffff0000) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
163 v >>= 16;
986e461dc072 Initial revision
glantau
parents:
diff changeset
164 n += 16;
986e461dc072 Initial revision
glantau
parents:
diff changeset
165 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
166 if (v & 0xff00) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
167 v >>= 8;
986e461dc072 Initial revision
glantau
parents:
diff changeset
168 n += 8;
986e461dc072 Initial revision
glantau
parents:
diff changeset
169 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
170 if (v & 0xf0) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
171 v >>= 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
172 n += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
173 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
174 if (v & 0xc) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
175 v >>= 2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
176 n += 2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
177 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
178 if (v & 0x2) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
179 n++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
180 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
181 return n;
986e461dc072 Initial revision
glantau
parents:
diff changeset
182 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
183
986e461dc072 Initial revision
glantau
parents:
diff changeset
184 /* memory */
986e461dc072 Initial revision
glantau
parents:
diff changeset
185 void *av_mallocz(int size);
986e461dc072 Initial revision
glantau
parents:
diff changeset
186
986e461dc072 Initial revision
glantau
parents:
diff changeset
187 #endif