ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/trunk/vfw/src/xvid.h
Revision: 355
Committed: Thu Aug 1 12:56:29 2002 UTC (22 years, 2 months ago) by chl
Content type: text/plain
File size: 11066 byte(s)
Log Message:
Support for XVID_GREYSCALE (at least that's what Koepi claims...)

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.8 2002-08-01 12:56:28 chl 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_EXTERN 1004 // per slice rendering
77 #define XVID_CSP_YVYU 1002
78 #define XVID_CSP_RGB32 1000
79 #define XVID_CSP_NULL 9999
80
81 #define XVID_CSP_VFLIP 0x80000000 // flip mask
82
83
84 /*****************************************************************************
85 * Initialization constants
86 ****************************************************************************/
87
88 /* CPU flags for XVID_INIT_PARAM.cpu_flags */
89
90 #define XVID_CPU_MMX 0x00000001
91 #define XVID_CPU_MMXEXT 0x00000002
92 #define XVID_CPU_SSE 0x00000004
93 #define XVID_CPU_SSE2 0x00000008
94 #define XVID_CPU_3DNOW 0x00000010
95 #define XVID_CPU_3DNOWEXT 0x00000020
96
97 #define XVID_CPU_TSC 0x00000040
98
99 #define XVID_CPU_IA64 0x00000080
100
101 #define XVID_CPU_CHKONLY 0x40000000 /* check cpu only; dont init globals */
102 #define XVID_CPU_FORCE 0x80000000
103
104
105 /*****************************************************************************
106 * Initialization structures
107 ****************************************************************************/
108
109 typedef struct
110 {
111 int cpu_flags;
112 int api_version;
113 int core_build;
114 }
115 XVID_INIT_PARAM;
116
117 /*****************************************************************************
118 * Initialization entry point
119 ****************************************************************************/
120
121 int xvid_init(void *handle,
122 int opt,
123 void *param1,
124 void *param2);
125
126
127 /*****************************************************************************
128 * Decoder constants
129 ****************************************************************************/
130
131 /* Flags for XVID_DEC_FRAME.general */
132 #define XVID_QUICK_DECODE 0x00000010
133
134 /*****************************************************************************
135 * Decoder structures
136 ****************************************************************************/
137
138 typedef struct
139 {
140 int width;
141 int height;
142 void *handle;
143 }
144 XVID_DEC_PARAM;
145
146
147 typedef struct
148 {
149 int general;
150 void *bitstream;
151 int length;
152
153 void *image;
154 int stride;
155 int colorspace;
156 }
157 XVID_DEC_FRAME;
158
159
160 // This struct is used for per slice rendering
161 typedef struct
162 {
163 void *y,*u,*v;
164 int stride_y, stride_u,stride_v;
165 } XVID_DEC_PICTURE;
166
167
168 /*****************************************************************************
169 * Decoder entry point
170 ****************************************************************************/
171
172 /* decoder options */
173 #define XVID_DEC_DECODE 0
174 #define XVID_DEC_CREATE 1
175 #define XVID_DEC_DESTROY 2
176
177 int xvid_decore(void *handle,
178 int opt,
179 void *param1,
180 void *param2);
181
182
183 /*****************************************************************************
184 * Encoder constants
185 ****************************************************************************/
186
187 /* Flags for XVID_ENC_PARAM.global */
188 #define XVID_GLOBAL_PACKED 0x00000001 /* packed bitstream */
189 #define XVID_GLOBAL_DX50BVOP 0x00000002 /* dx50 bvop compatibility */
190 #define XVID_GLOBAL_DEBUG 0x00000004 /* print debug info on each frame */
191
192 /* Flags for XVID_ENC_FRAME.general */
193 #define XVID_VALID_FLAGS 0x80000000
194
195 #define XVID_CUSTOM_QMATRIX 0x00000004 /* use custom quant matrix */
196 #define XVID_H263QUANT 0x00000010
197 #define XVID_MPEGQUANT 0x00000020
198 #define XVID_HALFPEL 0x00000040 /* use halfpel interpolation */
199 #define XVID_ADAPTIVEQUANT 0x00000080
200 #define XVID_LUMIMASKING 0x00000100
201 #define XVID_LATEINTRA 0x00000200
202
203 #define XVID_INTERLACING 0x00000400 /* enable interlaced encoding */
204 #define XVID_TOPFIELDFIRST 0x00000800 /* set top-field-first flag */
205 #define XVID_ALTERNATESCAN 0x00001000 /* set alternate vertical scan flag */
206
207 #define XVID_HINTEDME_GET 0x00002000 /* receive mv hint data from core (1st pass) */
208 #define XVID_HINTEDME_SET 0x00004000 /* send mv hint data to core (2nd pass) */
209
210 #define XVID_INTER4V 0x00008000
211
212 #define XVID_ME_ZERO 0x00010000
213 #define XVID_ME_LOGARITHMIC 0x00020000
214 #define XVID_ME_FULLSEARCH 0x00040000
215 #define XVID_ME_PMVFAST 0x00080000
216 #define XVID_ME_EPZS 0x00100000
217
218
219 #define XVID_GREYSCALE 0x01000000 /* enable greyscale only mode (even for */
220 #define XVID_GRAYSCALE 0x01000000 /* color input material chroma is ignored) */
221
222
223 /* Flags for XVID_ENC_FRAME.motion */
224 #define PMV_ADVANCEDDIAMOND8 0x00004000
225 #define PMV_ADVANCEDDIAMOND16 0x00008000
226
227 #define PMV_HALFPELDIAMOND16 0x00010000
228 #define PMV_HALFPELREFINE16 0x00020000
229 #define PMV_EXTSEARCH16 0x00040000 /* extend PMV by more searches */
230 #define PMV_EARLYSTOP16 0x00080000
231 #define PMV_QUICKSTOP16 0x00100000 /* like early, but without any more refinement */
232 #define PMV_UNRESTRICTED16 0x00200000 /* unrestricted ME, not implemented */
233 #define PMV_OVERLAPPING16 0x00400000 /* overlapping ME, not implemented */
234 #define PMV_USESQUARES16 0x00800000
235
236 #define PMV_HALFPELDIAMOND8 0x01000000
237 #define PMV_HALFPELREFINE8 0x02000000
238 #define PMV_EXTSEARCH8 0x04000000 /* extend PMV by more searches */
239 #define PMV_EARLYSTOP8 0x08000000
240 #define PMV_QUICKSTOP8 0x10000000 /* like early, but without any more refinement */
241 #define PMV_UNRESTRICTED8 0x20000000 /* unrestricted ME, not implemented */
242 #define PMV_OVERLAPPING8 0x40000000 /* overlapping ME, not implemented */
243 #define PMV_USESQUARES8 0x80000000
244
245
246 /*****************************************************************************
247 * Encoder structures
248 ****************************************************************************/
249
250 typedef struct
251 {
252 int width, height;
253 int fincr, fbase; /* frame increment, fbase. each frame = "fincr/fbase" seconds */
254 int rc_bitrate; /* the bitrate of the target encoded stream, in bits/second */
255 int rc_reaction_delay_factor; /* how fast the rate control reacts - lower values are faster */
256 int rc_averaging_period; /* as above */
257 int rc_buffer; /* as above */
258 int max_quantizer; /* the upper limit of the quantizer */
259 int min_quantizer; /* the lower limit of the quantizer */
260 int max_key_interval; /* the maximum interval between key frames */
261 #ifdef _SMP
262 int num_threads; /* number of threads */
263 #endif
264 #ifdef BFRAMES
265 int global; /* global/debug options */
266 int max_bframes; /* max sequential bframes (0=disable bframes) */
267 int bquant_ratio; /* bframe quantizer multipier (percentage).
268 * used only when bquant < 1
269 * eg. 200 = x2 multiplier
270 * quant = ((past_quant + future_quant) * bquant_ratio)/200
271 */
272 int frame_drop_ratio; /* frame dropping: 0=drop none... 100=drop all */
273 #endif
274 void *handle; /* [out] encoder instance handle */
275 }
276 XVID_ENC_PARAM;
277
278 typedef struct
279 {
280 int x;
281 int y;
282 }
283 VECTOR;
284
285 typedef struct
286 {
287 int mode; /* macroblock mode */
288 VECTOR mvs[4];
289 }
290 MVBLOCKHINT;
291
292 typedef struct
293 {
294 int intra; /* frame intra choice */
295 int fcode; /* frame fcode */
296 MVBLOCKHINT *block; /* caller-allocated array of block hints (mb_width * mb_height) */
297 }
298 MVFRAMEHINT;
299
300 typedef struct
301 {
302 int rawhints; /* if set, use MVFRAMEHINT, else use compressed buffer */
303
304 MVFRAMEHINT mvhint;
305 void *hintstream; /* compressed hint buffer */
306 int hintlength; /* length of buffer (bytes) */
307 }
308 HINTINFO;
309
310 typedef struct
311 {
312 int general; /* [in] general options */
313 int motion; /* [in] ME options */
314 void *bitstream; /* [in] bitstream ptr */
315 int length; /* [out] bitstream length (bytes) */
316
317 void *image; /* [in] image ptr */
318 int colorspace; /* [in] source colorspace */
319
320 unsigned char *quant_intra_matrix; // [in] custom intra qmatrix */
321 unsigned char *quant_inter_matrix; // [in] custom inter qmatrix */
322 int quant; /* [in] frame quantizer (vbr) */
323 int intra; /* [in] force intra frame (vbr only)
324 * [out] intra state
325 */
326 HINTINFO hint; /* [in/out] mv hint information */
327
328 #ifdef BFRAMES
329 int bquant; /* [in] bframe quantizer */
330 #endif
331
332 }
333 XVID_ENC_FRAME;
334
335
336 typedef struct
337 {
338 int quant; /* [out] frame quantizer */
339 int hlength; /* [out] header length (bytes) */
340 int kblks, mblks, ublks; /* [out] */
341
342 }
343 XVID_ENC_STATS;
344
345
346 /*****************************************************************************
347 * Encoder entry point
348 ****************************************************************************/
349
350 /* Encoder options */
351 #define XVID_ENC_ENCODE 0
352 #define XVID_ENC_CREATE 1
353 #define XVID_ENC_DESTROY 2
354
355 int xvid_encore(void *handle,
356 int opt,
357 void *param1,
358 void *param2);
359
360
361 #ifdef __cplusplus
362 }
363 #endif
364
365 #endif