[svn] / trunk / vfw / src / xvid.h Repository:
ViewVC logotype

Annotation of /trunk/vfw/src/xvid.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 228 - (view) (download)

1 : suxen_drol 228 /*****************************************************************************
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.4 2002-06-20 10:51:08 suxen_drol Exp $
41 :     *
42 :     *****************************************************************************/
43 :    
44 :    
45 : Isibaar 3 #ifndef _XVID_H_
46 :     #define _XVID_H_
47 :    
48 :     #ifdef __cplusplus
49 :     extern "C" {
50 : suxen_drol 228 #endif
51 : Isibaar 3
52 : suxen_drol 228 /*****************************************************************************
53 :     * Global constants
54 :     ****************************************************************************/
55 : Isibaar 3
56 : suxen_drol 228 /* API Version : 2.1 */
57 :     #define API_VERSION ((2 << 16) | (1))
58 : Isibaar 3
59 :    
60 : suxen_drol 228 /* 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 : Isibaar 3 #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 : suxen_drol 228 /*****************************************************************************
84 :     * Initialization constants
85 :     ****************************************************************************/
86 : Isibaar 3
87 : suxen_drol 228 /* CPU flags for XVID_INIT_PARAM.cpu_flags */
88 : Isibaar 3
89 : suxen_drol 228 #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 : Isibaar 3
96 : suxen_drol 228 #define XVID_CPU_TSC 0x00000040
97 : Isibaar 3
98 : suxen_drol 228 #define XVID_CPU_IA64 0x00000080
99 : Isibaar 3
100 : suxen_drol 228 #define XVID_CPU_FORCE 0x80000000
101 : Isibaar 3
102 :    
103 : suxen_drol 228 /*****************************************************************************
104 :     * Initialization structures
105 :     ****************************************************************************/
106 : Isibaar 3
107 : suxen_drol 228 typedef struct
108 :     {
109 :     int cpu_flags;
110 :     int api_version;
111 :     int core_build;
112 :     }
113 :     XVID_INIT_PARAM;
114 : Isibaar 3
115 : suxen_drol 228 /*****************************************************************************
116 :     * Initialization entry point
117 :     ****************************************************************************/
118 : Isibaar 3
119 : suxen_drol 228 int xvid_init(void *handle,
120 :     int opt,
121 :     void *param1,
122 :     void *param2);
123 :    
124 :    
125 :     /*****************************************************************************
126 :     * Decoder constants
127 :     ****************************************************************************/
128 :    
129 :     /* Flags for XVID_DEC_FRAME.general */
130 :     #define XVID_QUICK_DECODE 0x00000010
131 :    
132 :     /*****************************************************************************
133 :     * Decoder structures
134 :     ****************************************************************************/
135 :    
136 :     typedef struct
137 :     {
138 :     int width;
139 :     int height;
140 :     void *handle;
141 :     }
142 :     XVID_DEC_PARAM;
143 :    
144 :    
145 :     typedef struct
146 :     {
147 :     int general;
148 :     void *bitstream;
149 :     int length;
150 :    
151 :     void *image;
152 :     int stride;
153 :     int colorspace;
154 :     }
155 :     XVID_DEC_FRAME;
156 :    
157 :    
158 :     /*****************************************************************************
159 :     * Decoder entry point
160 :     ****************************************************************************/
161 :    
162 :     /* decoder options */
163 : Isibaar 3 #define XVID_DEC_DECODE 0
164 :     #define XVID_DEC_CREATE 1
165 :     #define XVID_DEC_DESTROY 2
166 :    
167 : suxen_drol 228 int xvid_decore(void *handle,
168 :     int opt,
169 :     void *param1,
170 :     void *param2);
171 : Isibaar 3
172 :    
173 : suxen_drol 228 /*****************************************************************************
174 :     * Encoder constants
175 :     ****************************************************************************/
176 : Isibaar 3
177 : suxen_drol 228 /* Flags for XVID_ENC_FRAME.general */
178 :     #define XVID_VALID_FLAGS 0x80000000
179 : Isibaar 3
180 : suxen_drol 228 #define XVID_CUSTOM_QMATRIX 0x00000004 /* use custom quant matrix */
181 : Isibaar 3 #define XVID_H263QUANT 0x00000010
182 :     #define XVID_MPEGQUANT 0x00000020
183 : suxen_drol 228 #define XVID_HALFPEL 0x00000040 /* use halfpel interpolation */
184 : Isibaar 3 #define XVID_ADAPTIVEQUANT 0x00000080
185 :     #define XVID_LUMIMASKING 0x00000100
186 : h 102 #define XVID_LATEINTRA 0x00000200
187 : Isibaar 3
188 : suxen_drol 228 #define XVID_INTERLACING 0x00000400 /* enable interlaced encoding */
189 :     #define XVID_TOPFIELDFIRST 0x00000800 /* set top-field-first flag */
190 :     #define XVID_ALTERNATESCAN 0x00001000 /* set alternate vertical scan flag */
191 : Isibaar 3
192 : suxen_drol 228 #define XVID_HINTEDME_GET 0x00002000 /* receive mv hint data from core (1st pass) */
193 :     #define XVID_HINTEDME_SET 0x00004000 /* send mv hint data to core (2nd pass) */
194 : Isibaar 3
195 : h 102 #define XVID_INTER4V 0x00008000
196 :    
197 :     #define XVID_ME_ZERO 0x00010000
198 :     #define XVID_ME_LOGARITHMIC 0x00020000
199 :     #define XVID_ME_FULLSEARCH 0x00040000
200 :     #define XVID_ME_PMVFAST 0x00080000
201 :     #define XVID_ME_EPZS 0x00100000
202 :    
203 : suxen_drol 228
204 :     /* Flags for XVID_ENC_FRAME.motion */
205 :     #define PMV_ADVANCEDDIAMOND8 0x00004000
206 :     #define PMV_ADVANCEDDIAMOND16 0x00008000
207 :    
208 : Isibaar 3 #define PMV_HALFPELDIAMOND16 0x00010000
209 :     #define PMV_HALFPELREFINE16 0x00020000
210 : suxen_drol 228 #define PMV_EXTSEARCH16 0x00040000 /* extend PMV by more searches */
211 : Isibaar 3 #define PMV_EARLYSTOP16 0x00080000
212 : suxen_drol 228 #define PMV_QUICKSTOP16 0x00100000 /* like early, but without any more refinement */
213 :     #define PMV_UNRESTRICTED16 0x00200000 /* unrestricted ME, not implemented */
214 :     #define PMV_OVERLAPPING16 0x00400000 /* overlapping ME, not implemented */
215 :     #define PMV_USESQUARES16 0x00800000
216 : Isibaar 3
217 :     #define PMV_HALFPELDIAMOND8 0x01000000
218 :     #define PMV_HALFPELREFINE8 0x02000000
219 : suxen_drol 228 #define PMV_EXTSEARCH8 0x04000000 /* extend PMV by more searches */
220 : Isibaar 3 #define PMV_EARLYSTOP8 0x08000000
221 : suxen_drol 228 #define PMV_QUICKSTOP8 0x10000000 /* like early, but without any more refinement */
222 :     #define PMV_UNRESTRICTED8 0x20000000 /* unrestricted ME, not implemented */
223 :     #define PMV_OVERLAPPING8 0x40000000 /* overlapping ME, not implemented */
224 :     #define PMV_USESQUARES8 0x80000000
225 : Isibaar 3
226 : h 102
227 : suxen_drol 228 /*****************************************************************************
228 :     * Encoder structures
229 :     ****************************************************************************/
230 : Isibaar 3
231 : suxen_drol 228 typedef struct
232 :     {
233 :     int width, height;
234 :     int fincr, fbase; /* frame increment, fbase. each frame = "fincr/fbase" seconds */
235 :     int rc_bitrate; /* the bitrate of the target encoded stream, in bits/second */
236 :     int rc_reaction_delay_factor; /* how fast the rate control reacts - lower values are faster */
237 :     int rc_averaging_period; /* as above */
238 :     int rc_buffer; /* as above */
239 :     int max_quantizer; /* the upper limit of the quantizer */
240 :     int min_quantizer; /* the lower limit of the quantizer */
241 :     int max_key_interval; /* the maximum interval between key frames */
242 :     #ifdef BFRAMES
243 :     int packed; /* enable packed mode */
244 :     int max_bframes; /* max sequential bframes (0=disable bframes) */
245 :     int bquant_ratio; /* bframe quantizer multipier (percentage).
246 :     * used only when bquant < 1
247 :     * eg. 200 = x2 multiplier
248 :     * quant = ((past_quant + future_quant) * bquant_ratio)/200
249 :     */
250 :     #endif
251 :     void *handle; /* [out] encoder instance handle */
252 :     }
253 :     XVID_ENC_PARAM;
254 : Isibaar 3
255 : suxen_drol 228 typedef struct
256 :     {
257 :     int x;
258 :     int y;
259 :     }
260 :     VECTOR;
261 : Isibaar 3
262 : suxen_drol 228 typedef struct
263 :     {
264 :     int mode; /* macroblock mode */
265 :     VECTOR mvs[4];
266 :     }
267 :     MVBLOCKHINT;
268 : h 102
269 : suxen_drol 228 typedef struct
270 :     {
271 :     int intra; /* frame intra choice */
272 :     int fcode; /* frame fcode */
273 :     MVBLOCKHINT *block; /* caller-allocated array of block hints (mb_width * mb_height) */
274 :     }
275 :     MVFRAMEHINT;
276 : h 102
277 : suxen_drol 228 typedef struct
278 :     {
279 :     int rawhints; /* if set, use MVFRAMEHINT, else use compressed buffer */
280 : h 102
281 : suxen_drol 228 MVFRAMEHINT mvhint;
282 :     void *hintstream; /* compressed hint buffer */
283 :     int hintlength; /* length of buffer (bytes) */
284 :     }
285 :     HINTINFO;
286 : h 102
287 : suxen_drol 228 typedef struct
288 :     {
289 :     int general; /* [in] general options */
290 :     int motion; /* [in] ME options */
291 :     void *bitstream; /* [in] bitstream ptr */
292 :     int length; /* [out] bitstream length (bytes) */
293 : h 102
294 : suxen_drol 228 void *image; /* [in] image ptr */
295 :     int colorspace; /* [in] source colorspace */
296 : Isibaar 3
297 : suxen_drol 228 unsigned char *quant_intra_matrix; // [in] custom intra qmatrix */
298 :     unsigned char *quant_inter_matrix; // [in] custom inter qmatrix */
299 :     int quant; /* [in] frame quantizer (vbr) */
300 :     int intra; /* [in] force intra frame (vbr only)
301 :     * [out] intra state
302 :     */
303 :     HINTINFO hint; /* [in/out] mv hint information */
304 : Isibaar 3
305 : suxen_drol 228 #ifdef BFRAMES
306 :     int bquant; /* [in] bframe quantizer */
307 :     #endif
308 : Isibaar 3
309 : suxen_drol 228 }
310 :     XVID_ENC_FRAME;
311 : Isibaar 3
312 :    
313 : suxen_drol 228 typedef struct
314 :     {
315 :     int quant; /* [out] frame quantizer */
316 :     int hlength; /* [out] header length (bytes) */
317 :     int kblks, mblks, ublks; /* [out] */
318 : Isibaar 3
319 : suxen_drol 228 }
320 :     XVID_ENC_STATS;
321 :    
322 :    
323 :     /*****************************************************************************
324 :     * Encoder entry point
325 :     ****************************************************************************/
326 :    
327 :     /* Encoder options */
328 : Isibaar 3 #define XVID_ENC_ENCODE 0
329 :     #define XVID_ENC_CREATE 1
330 :     #define XVID_ENC_DESTROY 2
331 :    
332 : suxen_drol 228 int xvid_encore(void *handle,
333 :     int opt,
334 :     void *param1,
335 :     void *param2);
336 : Isibaar 3
337 :    
338 :     #ifdef __cplusplus
339 :     }
340 : suxen_drol 228 #endif
341 : Isibaar 3
342 : suxen_drol 228 #endif

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4