ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/trunk/vfw/src/xvid.h
Revision: 235
Committed: Sun Jun 23 03:59:49 2002 UTC (22 years, 3 months ago) by suxen_drol
Content type: text/plain
File size: 10565 byte(s)
Log Message:
XVID_GLOBAL_*, XVID_CPU_CHKONLY

File Contents

# Content
1 /*****************************************************************************
2 *
3 * XVID MPEG-4 VIDEO CODEC
4 * - XviD Main header file -
5 *
6 * This program is an implementation of a part of one or more MPEG-4
7 * Video tools as specified in ISO/IEC 14496-2 standard. Those intending
8 * to use this software module in hardware or software products are
9 * advised that its use may infringe existing patents or copyrights, and
10 * any such use would be at such party's own risk. The original
11 * developer of this software module and his/her company, and subsequent
12 * editors and their companies, will have no liability for use of this
13 * software or modifications or derivatives thereof.
14 *
15 * This program is free software ; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation ; either version 2 of the License, or
18 * (at your option) any later version.
19 *
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY ; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with this program ; if not, write to the Free Software
27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 *
29 *****************************************************************************/
30 /*****************************************************************************
31 *
32 * History
33 *
34 * - 2002/06/13 Added legal header, ANSI C comment style (only for this header
35 * as it can be included in a ANSI C project).
36 *
37 * ToDo ? : when BFRAMES is defined, the API_VERSION should not
38 * be the same (3.0 ?)
39 *
40 * $Id: xvid.h,v 1.5 2002-06-23 03:59:49 suxen_drol Exp $
41 *
42 *****************************************************************************/
43
44
45 #ifndef _XVID_H_
46 #define _XVID_H_
47
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51
52 /*****************************************************************************
53 * Global constants
54 ****************************************************************************/
55
56 /* API Version : 2.1 */
57 #define API_VERSION ((2 << 16) | (1))
58
59
60 /* Error codes */
61 #define XVID_ERR_FAIL -1
62 #define XVID_ERR_OK 0
63 #define XVID_ERR_MEMORY 1
64 #define XVID_ERR_FORMAT 2
65
66
67 /* Colorspaces */
68 #define XVID_CSP_RGB24 0
69 #define XVID_CSP_YV12 1
70 #define XVID_CSP_YUY2 2
71 #define XVID_CSP_UYVY 3
72 #define XVID_CSP_I420 4
73 #define XVID_CSP_RGB555 10
74 #define XVID_CSP_RGB565 11
75 #define XVID_CSP_USER 12
76 #define XVID_CSP_YVYU 1002
77 #define XVID_CSP_RGB32 1000
78 #define XVID_CSP_NULL 9999
79
80 #define XVID_CSP_VFLIP 0x80000000 // flip mask
81
82
83 /*****************************************************************************
84 * Initialization constants
85 ****************************************************************************/
86
87 /* CPU flags for XVID_INIT_PARAM.cpu_flags */
88
89 #define XVID_CPU_MMX 0x00000001
90 #define XVID_CPU_MMXEXT 0x00000002
91 #define XVID_CPU_SSE 0x00000004
92 #define XVID_CPU_SSE2 0x00000008
93 #define XVID_CPU_3DNOW 0x00000010
94 #define XVID_CPU_3DNOWEXT 0x00000020
95
96 #define XVID_CPU_TSC 0x00000040
97
98 #define XVID_CPU_IA64 0x00000080
99
100 #define XVID_CPU_CHKONLY 0x40000000 /* check cpu only; dont init globals */
101 #define XVID_CPU_FORCE 0x80000000
102
103
104 /*****************************************************************************
105 * Initialization structures
106 ****************************************************************************/
107
108 typedef struct
109 {
110 int cpu_flags;
111 int api_version;
112 int core_build;
113 }
114 XVID_INIT_PARAM;
115
116 /*****************************************************************************
117 * Initialization entry point
118 ****************************************************************************/
119
120 int xvid_init(void *handle,
121 int opt,
122 void *param1,
123 void *param2);
124
125
126 /*****************************************************************************
127 * Decoder constants
128 ****************************************************************************/
129
130 /* Flags for XVID_DEC_FRAME.general */
131 #define XVID_QUICK_DECODE 0x00000010
132
133 /*****************************************************************************
134 * Decoder structures
135 ****************************************************************************/
136
137 typedef struct
138 {
139 int width;
140 int height;
141 void *handle;
142 }
143 XVID_DEC_PARAM;
144
145
146 typedef struct
147 {
148 int general;
149 void *bitstream;
150 int length;
151
152 void *image;
153 int stride;
154 int colorspace;
155 }
156 XVID_DEC_FRAME;
157
158
159 /*****************************************************************************
160 * Decoder entry point
161 ****************************************************************************/
162
163 /* decoder options */
164 #define XVID_DEC_DECODE 0
165 #define XVID_DEC_CREATE 1
166 #define XVID_DEC_DESTROY 2
167
168 int xvid_decore(void *handle,
169 int opt,
170 void *param1,
171 void *param2);
172
173
174 /*****************************************************************************
175 * Encoder constants
176 ****************************************************************************/
177
178 /* Flags for XVID_ENC_PARAM.global */
179 #define XVID_GLOBAL_PACKED 0x00000001 /* packed bitstream */
180 #define XVID_GLOBAL_DX50BVOP 0x00000002 /* dx50 bvop compatibility */
181 #define XVID_GLOBAL_DEBUG 0x00000004 /* print debug info on each frame */
182
183 /* Flags for XVID_ENC_FRAME.general */
184 #define XVID_VALID_FLAGS 0x80000000
185
186 #define XVID_CUSTOM_QMATRIX 0x00000004 /* use custom quant matrix */
187 #define XVID_H263QUANT 0x00000010
188 #define XVID_MPEGQUANT 0x00000020
189 #define XVID_HALFPEL 0x00000040 /* use halfpel interpolation */
190 #define XVID_ADAPTIVEQUANT 0x00000080
191 #define XVID_LUMIMASKING 0x00000100
192 #define XVID_LATEINTRA 0x00000200
193
194 #define XVID_INTERLACING 0x00000400 /* enable interlaced encoding */
195 #define XVID_TOPFIELDFIRST 0x00000800 /* set top-field-first flag */
196 #define XVID_ALTERNATESCAN 0x00001000 /* set alternate vertical scan flag */
197
198 #define XVID_HINTEDME_GET 0x00002000 /* receive mv hint data from core (1st pass) */
199 #define XVID_HINTEDME_SET 0x00004000 /* send mv hint data to core (2nd pass) */
200
201 #define XVID_INTER4V 0x00008000
202
203 #define XVID_ME_ZERO 0x00010000
204 #define XVID_ME_LOGARITHMIC 0x00020000
205 #define XVID_ME_FULLSEARCH 0x00040000
206 #define XVID_ME_PMVFAST 0x00080000
207 #define XVID_ME_EPZS 0x00100000
208
209
210 /* Flags for XVID_ENC_FRAME.motion */
211 #define PMV_ADVANCEDDIAMOND8 0x00004000
212 #define PMV_ADVANCEDDIAMOND16 0x00008000
213
214 #define PMV_HALFPELDIAMOND16 0x00010000
215 #define PMV_HALFPELREFINE16 0x00020000
216 #define PMV_EXTSEARCH16 0x00040000 /* extend PMV by more searches */
217 #define PMV_EARLYSTOP16 0x00080000
218 #define PMV_QUICKSTOP16 0x00100000 /* like early, but without any more refinement */
219 #define PMV_UNRESTRICTED16 0x00200000 /* unrestricted ME, not implemented */
220 #define PMV_OVERLAPPING16 0x00400000 /* overlapping ME, not implemented */
221 #define PMV_USESQUARES16 0x00800000
222
223 #define PMV_HALFPELDIAMOND8 0x01000000
224 #define PMV_HALFPELREFINE8 0x02000000
225 #define PMV_EXTSEARCH8 0x04000000 /* extend PMV by more searches */
226 #define PMV_EARLYSTOP8 0x08000000
227 #define PMV_QUICKSTOP8 0x10000000 /* like early, but without any more refinement */
228 #define PMV_UNRESTRICTED8 0x20000000 /* unrestricted ME, not implemented */
229 #define PMV_OVERLAPPING8 0x40000000 /* overlapping ME, not implemented */
230 #define PMV_USESQUARES8 0x80000000
231
232
233 /*****************************************************************************
234 * Encoder structures
235 ****************************************************************************/
236
237 typedef struct
238 {
239 int width, height;
240 int fincr, fbase; /* frame increment, fbase. each frame = "fincr/fbase" seconds */
241 int rc_bitrate; /* the bitrate of the target encoded stream, in bits/second */
242 int rc_reaction_delay_factor; /* how fast the rate control reacts - lower values are faster */
243 int rc_averaging_period; /* as above */
244 int rc_buffer; /* as above */
245 int max_quantizer; /* the upper limit of the quantizer */
246 int min_quantizer; /* the lower limit of the quantizer */
247 int max_key_interval; /* the maximum interval between key frames */
248 #ifdef BFRAMES
249 int global; /* global/debug options */
250 int max_bframes; /* max sequential bframes (0=disable bframes) */
251 int bquant_ratio; /* bframe quantizer multipier (percentage).
252 * used only when bquant < 1
253 * eg. 200 = x2 multiplier
254 * quant = ((past_quant + future_quant) * bquant_ratio)/200
255 */
256 #endif
257 void *handle; /* [out] encoder instance handle */
258 }
259 XVID_ENC_PARAM;
260
261 typedef struct
262 {
263 int x;
264 int y;
265 }
266 VECTOR;
267
268 typedef struct
269 {
270 int mode; /* macroblock mode */
271 VECTOR mvs[4];
272 }
273 MVBLOCKHINT;
274
275 typedef struct
276 {
277 int intra; /* frame intra choice */
278 int fcode; /* frame fcode */
279 MVBLOCKHINT *block; /* caller-allocated array of block hints (mb_width * mb_height) */
280 }
281 MVFRAMEHINT;
282
283 typedef struct
284 {
285 int rawhints; /* if set, use MVFRAMEHINT, else use compressed buffer */
286
287 MVFRAMEHINT mvhint;
288 void *hintstream; /* compressed hint buffer */
289 int hintlength; /* length of buffer (bytes) */
290 }
291 HINTINFO;
292
293 typedef struct
294 {
295 int general; /* [in] general options */
296 int motion; /* [in] ME options */
297 void *bitstream; /* [in] bitstream ptr */
298 int length; /* [out] bitstream length (bytes) */
299
300 void *image; /* [in] image ptr */
301 int colorspace; /* [in] source colorspace */
302
303 unsigned char *quant_intra_matrix; // [in] custom intra qmatrix */
304 unsigned char *quant_inter_matrix; // [in] custom inter qmatrix */
305 int quant; /* [in] frame quantizer (vbr) */
306 int intra; /* [in] force intra frame (vbr only)
307 * [out] intra state
308 */
309 HINTINFO hint; /* [in/out] mv hint information */
310
311 #ifdef BFRAMES
312 int bquant; /* [in] bframe quantizer */
313 #endif
314
315 }
316 XVID_ENC_FRAME;
317
318
319 typedef struct
320 {
321 int quant; /* [out] frame quantizer */
322 int hlength; /* [out] header length (bytes) */
323 int kblks, mblks, ublks; /* [out] */
324
325 }
326 XVID_ENC_STATS;
327
328
329 /*****************************************************************************
330 * Encoder entry point
331 ****************************************************************************/
332
333 /* Encoder options */
334 #define XVID_ENC_ENCODE 0
335 #define XVID_ENC_CREATE 1
336 #define XVID_ENC_DESTROY 2
337
338 int xvid_encore(void *handle,
339 int opt,
340 void *param1,
341 void *param2);
342
343
344 #ifdef __cplusplus
345 }
346 #endif
347
348 #endif