5 |
* |
* |
6 |
* This file is part of XviD, a free MPEG-4 video encoder/decoder |
* This file is part of XviD, a free MPEG-4 video encoder/decoder |
7 |
* |
* |
8 |
* XviD is free software; you can redistribute it and/or modify it |
* This program is free software; you can redistribute it and/or modify |
9 |
* under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
10 |
* the Free Software Foundation; either version 2 of the License, or |
* the Free Software Foundation; either version 2 of the License, or |
11 |
* (at your option) any later version. |
* (at your option) any later version. |
12 |
* |
* |
19 |
* along with this program; if not, write to the Free Software |
* along with this program; if not, write to the Free Software |
20 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
21 |
* |
* |
|
* Under section 8 of the GNU General Public License, the copyright |
|
|
* holders of XVID explicitly forbid distribution in the following |
|
|
* countries: |
|
|
* |
|
|
* - Japan |
|
|
* - United States of America |
|
|
* |
|
|
* Linking XviD statically or dynamically with other modules is making a |
|
|
* combined work based on XviD. Thus, the terms and conditions of the |
|
|
* GNU General Public License cover the whole combination. |
|
|
* |
|
|
* As a special exception, the copyright holders of XviD give you |
|
|
* permission to link XviD with independent modules that communicate with |
|
|
* XviD solely through the VFW1.1 and DShow interfaces, regardless of the |
|
|
* license terms of these independent modules, and to copy and distribute |
|
|
* the resulting combined work under terms of your choice, provided that |
|
|
* every copy of the combined work is accompanied by a complete copy of |
|
|
* the source code of XviD (the version of XviD used to produce the |
|
|
* combined work), being distributed under the terms of the GNU General |
|
|
* Public License plus this exception. An independent module is a module |
|
|
* which is not derived from or based on XviD. |
|
|
* |
|
|
* Note that people who make modified versions of XviD are not obligated |
|
|
* to grant this special exception for their modified versions; it is |
|
|
* their choice whether to do so. The GNU General Public License gives |
|
|
* permission to release a modified version without this exception; this |
|
|
* exception also makes it possible to release a modified version which |
|
|
* carries forward this exception. |
|
|
* |
|
22 |
* $Id$ |
* $Id$ |
23 |
* |
* |
24 |
*****************************************************************************/ |
****************************************************************************/ |
25 |
|
|
26 |
#ifndef _XVID_H_ |
#ifndef _XVID_H_ |
27 |
#define _XVID_H_ |
#define _XVID_H_ |
30 |
extern "C" { |
extern "C" { |
31 |
#endif |
#endif |
32 |
|
|
|
|
|
|
/** |
|
|
* \defgroup global_grp Global constants used in both encoder and decoder. |
|
|
* |
|
|
* This module describe all constants used in both the encoder and the decoder. |
|
|
* @{ |
|
|
*/ |
|
|
|
|
33 |
/***************************************************************************** |
/***************************************************************************** |
34 |
* API version number |
* Global constants |
35 |
****************************************************************************/ |
****************************************************************************/ |
36 |
|
|
37 |
/** |
/* API Version : 3.0 */ |
38 |
* \defgroup api_grp API version |
#define API_VERSION ((3 << 16) | (0)) |
39 |
* @{ |
#define XVID_API_UNSTABLE |
|
*/ |
|
40 |
|
|
41 |
#define API_VERSION ((2 << 16) | (1))/**< This constant tells you what XviD's |
/* Bitstream Version |
42 |
* version this header defines. |
* this will be writen into the bitstream to allow easy detection of xvid |
43 |
* |
* encoder bugs in the decoder, without this it might not possible to |
44 |
* You can use it to check if the host XviD library API is the same as the one |
* automatically distinquish between a file which has been encoded with an |
45 |
* you used to build you client program. If versions mismatch, then it is |
* old & buggy XVID from a file which has been encoded with a bugfree version |
46 |
* highly possible that your application will segfault because the host XviD |
* see the infamous interlacing bug ... |
|
* library and your application use different structures. |
|
47 |
* |
* |
48 |
|
* this MUST be increased if an encoder bug is fixed, increasing it too often |
49 |
|
* doesnt hurt but not increasing it could cause difficulty for decoders in the |
50 |
|
* future |
51 |
*/ |
*/ |
52 |
|
#define XVID_BS_VERSION "0015" |
53 |
|
|
|
/** @} */ |
|
54 |
|
|
55 |
|
/* Error codes */ |
56 |
|
#define XVID_ERR_FAIL -1 |
57 |
|
#define XVID_ERR_OK 0 |
58 |
|
#define XVID_ERR_MEMORY 1 |
59 |
|
#define XVID_ERR_FORMAT 2 |
60 |
|
|
|
/***************************************************************************** |
|
|
* Error codes |
|
|
****************************************************************************/ |
|
61 |
|
|
62 |
|
/* Colorspaces */ |
63 |
|
#define XVID_CSP_RGB24 0 /* [b|g|r] */ |
64 |
|
#define XVID_CSP_YV12 1 |
65 |
|
#define XVID_CSP_YUY2 2 |
66 |
|
#define XVID_CSP_UYVY 3 |
67 |
|
#define XVID_CSP_I420 4 |
68 |
|
#define XVID_CSP_RGB555 10 |
69 |
|
#define XVID_CSP_RGB565 11 |
70 |
|
#define XVID_CSP_USER 12 |
71 |
|
#define XVID_CSP_EXTERN 1004 /* per slice rendering */ |
72 |
|
#define XVID_CSP_YVYU 1002 |
73 |
|
#define XVID_CSP_RGB32 1000 /* [b|g|r|a] */ |
74 |
|
#define XVID_CSP_ABGR 1006 /* [a|b|g|r] */ |
75 |
|
#define XVID_CSP_RGBA 1005 /* [r|g|b|a] */ |
76 |
|
|
|
/** |
|
|
* \defgroup error_grp Error codes returned by XviD API entry points. |
|
|
* @{ |
|
|
*/ |
|
77 |
|
|
|
#define XVID_ERR_FAIL -1 /**< Operation failed. |
|
|
* |
|
|
* The requested XviD operation failed. If this error code is returned from : |
|
|
* <ul> |
|
|
* <li>the xvid_init function : you must not try to use an XviD's instance from |
|
|
* this point of the code. Clean all instances you |
|
|
* already created and exit the program cleanly. |
|
|
* <li>xvid_encore or xvid_decore : something was wrong and en/decoding |
|
|
* operation was not completed sucessfully. |
|
|
* you can stop the en/decoding process or just |
|
|
* ignore and go on. |
|
|
* <li>xvid_stop : you can safely ignore it if you call this function at the |
|
|
* end of your program. |
|
|
* </ul> |
|
|
*/ |
|
78 |
|
|
79 |
#define XVID_ERR_OK 0 /**< Operation succeed. |
#define XVID_CSP_NULL 9999 |
|
* |
|
|
* The requested XviD operation succeed, you can continue to use XviD's |
|
|
* functions. |
|
|
*/ |
|
|
|
|
|
#define XVID_ERR_MEMORY 1 /**< Operation failed. |
|
|
* |
|
|
* Insufficent memory was available on the host system. |
|
|
*/ |
|
|
|
|
|
#define XVID_ERR_FORMAT 2 /**< Operation failed. |
|
|
* |
|
|
* The format of the parameters or input stream were incorrect. |
|
|
*/ |
|
80 |
|
|
81 |
/** @} */ |
#define XVID_CSP_VFLIP 0x80000000 /* flip mask */ |
82 |
|
|
83 |
|
|
84 |
/***************************************************************************** |
/***************************************************************************** |
85 |
* Color space constants |
* Initialization constants |
86 |
****************************************************************************/ |
****************************************************************************/ |
87 |
|
|
88 |
|
/* CPU flags for XVID_INIT_PARAM.cpu_flags */ |
89 |
|
#define XVID_CPU_FORCE 0x80000000 /* force passed cpu flags */ |
90 |
|
#define XVID_CPU_CHKONLY 0x40000000 /* check cpu only; dont init globals */ |
91 |
|
#define XVID_CPU_ASM 0x00000080 /* native assembly */ |
92 |
|
|
93 |
/** |
/* ARCH_IS_IA32 */ |
94 |
* \defgroup csp_grp Colorspaces constants. |
#define XVID_CPU_MMX 0x00000001 /* mmx : pentiumMMX,k6 */ |
95 |
* @{ |
#define XVID_CPU_MMXEXT 0x00000002 /* mmx-ext : pentium2, athlon */ |
96 |
*/ |
#define XVID_CPU_SSE 0x00000004 /* sse : pentium3, athlonXP */ |
97 |
|
#define XVID_CPU_SSE2 0x00000008 /* sse2 : pentium4, athlon64 */ |
98 |
#define XVID_CSP_RGB24 0 /**< 24-bit RGB colorspace (b,g,r packed) */ |
#define XVID_CPU_3DNOW 0x00000010 /* 3dnow : k6-2 */ |
99 |
#define XVID_CSP_YV12 1 /**< YV12 colorspace (y,v,u planar) */ |
#define XVID_CPU_3DNOWEXT 0x00000020 /* 3dnow-ext: athlon */ |
100 |
#define XVID_CSP_YUY2 2 /**< YUY2 colorspace (y,u,y,v packed) */ |
#define XVID_CPU_TSC 0x00000040 /* timestamp counter */ |
|
#define XVID_CSP_UYVY 3 /**< UYVY colorspace (u,y,v,y packed) */ |
|
|
#define XVID_CSP_I420 4 /**< I420 colorsapce (y,u,v planar) */ |
|
|
#define XVID_CSP_RGB555 10 /**< 16-bit RGB555 colorspace */ |
|
|
#define XVID_CSP_RGB565 11 /**< 16-bit RGB565 colorspace */ |
|
|
#define XVID_CSP_USER 12 /**< user colorspace format, where the image buffer points |
|
|
* to a DEC_PICTURE (y,u,v planar) structure. |
|
|
* |
|
|
* For encoding, image is read from the DEC_PICTURE |
|
|
* parameter values. For decoding, the DEC_PICTURE |
|
|
* parameters are set, pointing to the internal XviD |
|
|
* image buffer. */ |
|
|
#define XVID_CSP_EXTERN 1004 /**< Special colorspace used for slice rendering |
|
|
* |
|
|
* The application provides an external buffer to XviD. |
|
|
* This way, XviD works directly into the final rendering |
|
|
* buffer, no need to specify this is a speed boost feature. |
|
|
* This feature is only used by mplayer at the moment, refer |
|
|
* to mplayer code to see how it can be used. */ |
|
|
#define XVID_CSP_YVYU 1002 /**< YVYU colorspace (y,v,y,u packed) */ |
|
|
#define XVID_CSP_RGB32 1000 /**< 32-bit RGB colorspace (b,g,r,a packed) */ |
|
|
#define XVID_CSP_NULL 9999 /**< NULL colorspace; no conversion is performed */ |
|
101 |
|
|
102 |
#define XVID_CSP_VFLIP 0x80000000 /**< (flag) Flip frame vertically during conversion */ |
/* ARCH_IS_IA64 */ |
103 |
|
#define XVID_CPU_IA64 XVID_CPU_ASM /* defined for backward compatibility */ |
104 |
|
|
105 |
/** @} */ |
/* ARCH_IS_PPC */ |
106 |
|
#define XVID_CPU_ALTIVEC 0x00000001 /* altivec */ |
107 |
|
|
|
/** @} */ |
|
|
|
|
|
/** |
|
|
* \defgroup init_grp Initialization constants, structures and functions. |
|
|
* |
|
|
* This section describes all the constants, structures and functions used to |
|
|
* initialize the XviD core library |
|
|
* |
|
|
* @{ |
|
|
*/ |
|
108 |
|
|
109 |
|
typedef struct |
110 |
/***************************************************************************** |
{ |
111 |
* CPU flags |
int colorspace; |
112 |
****************************************************************************/ |
void * y; |
113 |
|
void * u; |
114 |
|
void * v; |
115 |
/** |
int y_stride; |
116 |
* \defgroup cpu_grp Flags for XVID_INIT_PARAM.cpu_flags. |
int uv_stride; |
117 |
* |
} XVID_IMAGE; /* from yv12 */ |
118 |
* This section describes all constants that show host cpu available features, |
|
119 |
* and allow a client application to force usage of some cpu instructions sets. |
#define XVID_INIT_INIT 0 |
120 |
* @{ |
#define XVID_INIT_CONVERT 1 |
121 |
*/ |
#define XVID_INIT_TEST 2 |
|
|
|
|
|
|
|
/** |
|
|
* \defgroup x86_grp x86 specific cpu flags |
|
|
* @{ |
|
|
*/ |
|
|
|
|
|
#define XVID_CPU_MMX 0x00000001 /**< use/has MMX instruction set */ |
|
|
#define XVID_CPU_MMXEXT 0x00000002 /**< use/has MMX-ext (pentium3) instruction set */ |
|
|
#define XVID_CPU_SSE 0x00000004 /**< use/has SSE (pentium3) instruction set */ |
|
|
#define XVID_CPU_SSE2 0x00000008 /**< use/has SSE2 (pentium4) instruction set */ |
|
|
#define XVID_CPU_3DNOW 0x00000010 /**< use/has 3dNOW (k6-2) instruction set */ |
|
|
#define XVID_CPU_3DNOWEXT 0x00000020 /**< use/has 3dNOW-ext (athlon) instruction set */ |
|
|
#define XVID_CPU_TSC 0x00000040 /**< has TimeStampCounter instruction */ |
|
|
|
|
|
/** @} */ |
|
|
|
|
|
/** |
|
|
* \defgroup ia64_grp ia64 specific cpu flags. |
|
|
* @{ |
|
|
*/ |
|
|
|
|
|
#define XVID_CPU_IA64 0x00000080 /**< Forces ia64 optimized code usage |
|
|
* |
|
|
* This flags allow client applications to force IA64 optimized functions. |
|
|
* This feature is considered exeperimental and should be treated as is. |
|
|
*/ |
|
|
|
|
|
/** @} */ |
|
|
|
|
|
/** |
|
|
* \defgroup iniflags_grp Initialization commands. |
|
|
* |
|
|
* @{ |
|
|
*/ |
|
|
|
|
|
#define XVID_CPU_CHKONLY 0x40000000 /**< Check cpu features |
|
|
* |
|
|
* When this flag is set, the xvid_init function performs just a cpu feature |
|
|
* checking and then fills the cpu field. This flag is usefull when client |
|
|
* applications want to know what instruction sets the host cpu supports. |
|
|
*/ |
|
|
|
|
|
#define XVID_CPU_FORCE 0x80000000 /**< Force input flags to be used |
|
|
* |
|
|
* When this flag is set, client application forces XviD to use other flags |
|
|
* set in cpu_flags. \b Use this at your own risk. |
|
|
*/ |
|
|
|
|
|
/** @} */ |
|
|
|
|
|
/** @} */ |
|
122 |
|
|
123 |
/***************************************************************************** |
/***************************************************************************** |
124 |
* Initialization structures |
* Initialization structures |
125 |
****************************************************************************/ |
****************************************************************************/ |
126 |
|
|
|
/** Structure used in xvid_init function. */ |
|
127 |
typedef struct |
typedef struct |
128 |
{ |
{ |
129 |
int cpu_flags; /**< [in/out] |
int cpu_flags; |
130 |
* |
int api_version; |
131 |
* Filled with desired[in] or available[out] |
int core_build; |
132 |
* cpu instruction sets. |
} XVID_INIT_PARAM; |
133 |
*/ |
|
134 |
int api_version; /**< [out] |
typedef struct |
135 |
* |
{ |
136 |
* xvid_init will initialize this field with |
XVID_IMAGE input; |
137 |
* the API_VERSION used in this XviD core |
XVID_IMAGE output; |
138 |
* library |
int width; |
139 |
*/ |
int height; |
140 |
int core_build; /**< [out] |
int interlacing; |
141 |
* \todo Unused. |
} XVID_INIT_CONVERTINFO; |
|
*/ |
|
|
} |
|
|
XVID_INIT_PARAM; |
|
142 |
|
|
143 |
/***************************************************************************** |
/***************************************************************************** |
144 |
* Initialization entry point |
* Initialization entry point |
145 |
****************************************************************************/ |
****************************************************************************/ |
146 |
|
|
|
/** |
|
|
* \defgroup inientry_grp Initialization entry point. |
|
|
* @{ |
|
|
*/ |
|
|
|
|
|
/** |
|
|
* \brief Initialization entry point. |
|
|
* |
|
|
* This is the XviD's initialization entry point, it is only used to initialize |
|
|
* the XviD internal data (function pointers, vector length code tables, |
|
|
* rgb2yuv lookup tables). |
|
|
* |
|
|
* \param handle Reserved for future use. |
|
|
* \param opt Reserved for future use (set it to 0). |
|
|
* \param param1 Used to pass an XVID_INIT_PARAM parameter. |
|
|
* \param param2 Reserved for future use. |
|
|
*/ |
|
147 |
int xvid_init(void *handle, |
int xvid_init(void *handle, |
148 |
int opt, |
int opt, |
149 |
void *param1, |
void *param1, |
150 |
void *param2); |
void *param2); |
151 |
|
|
|
/** @} */ |
|
|
|
|
|
/** @} */ |
|
152 |
|
|
153 |
/***************************************************************************** |
/***************************************************************************** |
154 |
* Decoder constant |
* Decoder constants |
155 |
****************************************************************************/ |
****************************************************************************/ |
156 |
|
|
157 |
/** |
/* Flags for XVID_DEC_FRAME.general */ |
158 |
* \defgroup decoder_grp Decoder related functions and structures. |
#define XVID_DEC_LOWDELAY 0x00000001 /* decode lowdelay mode (ie. VFW) */ |
159 |
* |
#define XVID_DEC_DEBLOCKY 0x00000002 /* luma deblocking */ |
160 |
* This part describes all the structures/functions from XviD's API needed for |
#define XVID_DEC_DEBLOCKUV 0x00000008 /* chroma deblocking */ |
161 |
* decoding a MPEG4 compliant streams. |
#define XVID_DEC_DISCONTINUITY 0x00000004 /* indicates break in stream |
162 |
* @{ |
instructs decoder to ignore any |
163 |
*/ |
previous reference frames */ |
|
|
|
|
/** |
|
|
* \defgroup decframe_grp Flags for XVID_DEC_FRAME.general |
|
|
* |
|
|
* Flags' description for the XVID_DEC_FRAME.general member. |
|
|
* |
|
|
* @{ |
|
|
*/ |
|
|
|
|
|
/** Not used at the moment */ |
|
164 |
#define XVID_QUICK_DECODE 0x00000010 |
#define XVID_QUICK_DECODE 0x00000010 |
165 |
|
|
|
|
|
|
/** |
|
|
* @} |
|
|
*/ |
|
|
|
|
166 |
/***************************************************************************** |
/***************************************************************************** |
167 |
* Decoder structures |
* Decoder structures |
168 |
****************************************************************************/ |
****************************************************************************/ |
172 |
int width; |
int width; |
173 |
int height; |
int height; |
174 |
void *handle; |
void *handle; |
175 |
} |
} XVID_DEC_PARAM; |
176 |
XVID_DEC_PARAM; |
|
177 |
|
|
178 |
|
#define XVID_DEC_VOP 0 |
179 |
|
#define XVID_DEC_VOL 1 |
180 |
|
#define XVID_DEC_NOTHING 2 /* nothing was decoded */ |
181 |
|
|
182 |
|
typedef struct |
183 |
|
{ |
184 |
|
int notify; /* [out] output 'mode' */ |
185 |
|
union |
186 |
|
{ |
187 |
|
struct /* XVID_DEC_VOP */ |
188 |
|
{ |
189 |
|
int time_base; /* [out] time base */ |
190 |
|
int time_increment; /* [out] time increment */ |
191 |
|
} vop; |
192 |
|
struct /* XVID_DEC_VOL */ |
193 |
|
{ |
194 |
|
int general; /* [out] flags: eg. frames are interlaced */ |
195 |
|
int width; /* [out] width */ |
196 |
|
int height; /* [out] height */ |
197 |
|
int aspect_ratio; /* [out] aspect ratio */ |
198 |
|
int par_width; /* [out] aspect ratio width */ |
199 |
|
int par_height; /* [out] aspect ratio height */ |
200 |
|
} vol; |
201 |
|
} data; |
202 |
|
} XVID_DEC_STATS; |
203 |
|
|
204 |
|
|
205 |
typedef struct |
typedef struct |
211 |
void *image; |
void *image; |
212 |
int stride; |
int stride; |
213 |
int colorspace; |
int colorspace; |
214 |
} |
} XVID_DEC_FRAME; |
|
XVID_DEC_FRAME; |
|
215 |
|
|
216 |
|
|
217 |
// This struct is used for per slice rendering |
/* This struct is used for per slice rendering */ |
218 |
typedef struct |
typedef struct |
219 |
{ |
{ |
220 |
void *y,*u,*v; |
void *y,*u,*v; |
226 |
* Decoder entry point |
* Decoder entry point |
227 |
****************************************************************************/ |
****************************************************************************/ |
228 |
|
|
229 |
/** |
/* decoder options */ |
230 |
* \defgroup decops_grp Decoder operations |
#define XVID_DEC_DECODE 0 |
231 |
* |
#define XVID_DEC_CREATE 1 |
232 |
* These are all the operations XviD's decoder can perform. |
#define XVID_DEC_DESTROY 2 |
|
* |
|
|
* @{ |
|
|
*/ |
|
233 |
|
|
234 |
#define XVID_DEC_DECODE 0 /**< Decodes a frame |
int xvid_decore(void *handle, |
235 |
* |
int opt, |
236 |
* This operation constant is used when client application wants to decode a |
void *param1, |
237 |
* frame. Client application must also fill XVID_DEC_FRAME appropriately. |
void *param2); |
|
*/ |
|
238 |
|
|
|
#define XVID_DEC_CREATE 1 /**< Creates a decoder instance |
|
|
* |
|
|
* This operation constant is used by a client application in order to create |
|
|
* a decoder instance. Decoder instances are independant from each other, and |
|
|
* can be safely threaded. |
|
|
*/ |
|
239 |
|
|
240 |
#define XVID_DEC_DESTROY 2 /**< Destroys a decoder instance |
/***************************************************************************** |
241 |
* |
* Encoder constants |
242 |
* This operation constant is used by the client application to destroy a |
****************************************************************************/ |
|
* previously created decoder instance. |
|
|
*/ |
|
243 |
|
|
244 |
/** |
/* Flags for XVID_ENC_PARAM.global */ |
245 |
* @} |
#define XVID_GLOBAL_PACKED 0x00000001 /* packed bitstream */ |
246 |
*/ |
#define XVID_GLOBAL_DX50BVOP 0x00000002 /* dx50 bvop compatibility */ |
247 |
|
#define XVID_GLOBAL_DEBUG 0x00000004 /* print debug info on each frame */ |
248 |
|
#define XVID_GLOBAL_REDUCED 0x04000000 /* reduced resolution vop enable */ |
249 |
|
|
250 |
/** |
#define XVID_GLOBAL_EXTRASTATS 0x00000200 /* generate extra statistics */ |
|
* \defgroup decentry_grp Decoder entry point |
|
|
* |
|
|
* @{ |
|
|
*/ |
|
251 |
|
|
|
/** |
|
|
* \brief Decoder entry point. |
|
|
* |
|
|
* This is the XviD's decoder entry point. The possible operations are |
|
|
* described in the \ref decops_grp section. |
|
|
* |
|
|
* \param handle Decoder instance handle. |
|
|
* \param opt Decoder option constant |
|
|
* \param param1 Used to pass a XVID_DEC_PARAM or XVID_DEC_FRAME structure |
|
|
* \param param2 Reserved for future use. |
|
|
*/ |
|
252 |
|
|
253 |
int xvid_decore(void *handle, |
/* Flags for XVID_ENC_FRAME.general */ |
254 |
int opt, |
#define XVID_VALID_FLAGS 0x80000000 |
|
void *param1, |
|
|
void *param2); |
|
255 |
|
|
256 |
/** @} */ |
#define XVID_CUSTOM_QMATRIX 0x00000004 /* use custom quant matrix */ |
257 |
|
#define XVID_H263QUANT 0x00000010 |
258 |
|
#define XVID_MPEGQUANT 0x00000020 |
259 |
|
#define XVID_HALFPEL 0x00000040 /* use halfpel interpolation */ |
260 |
|
#define XVID_QUARTERPEL 0x02000000 |
261 |
|
#define XVID_ADAPTIVEQUANT 0x00000080 |
262 |
|
#define XVID_LUMIMASKING 0x00000100 |
263 |
|
|
264 |
/** @} */ |
#define XVID_INTERLACING 0x00000400 /* enable interlaced encoding */ |
265 |
|
#define XVID_TOPFIELDFIRST 0x00000800 /* set top-field-first flag */ |
266 |
|
#define XVID_ALTERNATESCAN 0x00001000 /* set alternate vertical scan flag */ |
267 |
|
|
268 |
/** |
#define XVID_HINTEDME_GET 0x00002000 /* receive mv hint data from core (1st pass) */ |
269 |
* \defgroup encoder_grp Encoder related functions and structures. |
#define XVID_HINTEDME_SET 0x00004000 /* send mv hint data to core (2nd pass) */ |
|
* |
|
|
* @{ |
|
|
*/ |
|
270 |
|
|
271 |
/***************************************************************************** |
#define XVID_INTER4V 0x00008000 |
|
* Encoder constants |
|
|
****************************************************************************/ |
|
272 |
|
|
273 |
/** |
#define XVID_ME_ZERO 0x00010000 |
274 |
* \defgroup encgenflags_grp Flags for XVID_ENC_FRAME.general |
#define XVID_ME_LOGARITHMIC 0x00020000 |
275 |
* @{ |
#define XVID_ME_FULLSEARCH 0x00040000 |
276 |
*/ |
#define XVID_ME_PMVFAST 0x00080000 |
277 |
|
#define XVID_ME_EPZS 0x00100000 |
278 |
|
|
279 |
#define XVID_VALID_FLAGS 0x80000000 /**< Reserved for future use */ |
#define XVID_CHROMAOPT 0x00200000 /* enable chroma optimization pre-filter */ |
280 |
|
|
281 |
#define XVID_CUSTOM_QMATRIX 0x00000004 /**< Use custom quantization matrices |
#define XVID_GREYSCALE 0x01000000 /* enable greyscale only mode (even for |
282 |
* |
color input material chroma is ignored) */ |
|
* This flag forces XviD to use custom matrices passed to encoder in |
|
|
* XVID_ENC_FRAME structure (members quant_intra_matrix and quant_inter_matrix) */ |
|
|
#define XVID_H263QUANT 0x00000010 /**< Use H263 quantization |
|
|
* |
|
|
* This flag forces XviD to use H263 quantization type */ |
|
|
#define XVID_MPEGQUANT 0x00000020 /**< Use MPEG4 quantization. |
|
|
* |
|
|
* This flag forces XviD to use MPEG4 quantization type */ |
|
|
#define XVID_HALFPEL 0x00000040 /**< Halfpel motion estimation |
|
|
* |
|
|
* informs xvid to perform a half pixel motion estimation. */ |
|
|
#define XVID_ADAPTIVEQUANT 0x00000080/**< Adaptive quantization |
|
|
* |
|
|
* informs xvid to perform an adaptative quantization using a Luminance |
|
|
* masking algorithm */ |
|
|
#define XVID_LUMIMASKING 0x00000100/**< Lumimasking flag |
|
|
* |
|
|
* \deprecated This flag is no longer used. */ |
|
|
#define XVID_LATEINTRA 0x00000200/**< Unknown |
|
|
* |
|
|
* \deprecated This flag is no longer used. */ |
|
|
#define XVID_INTERLACING 0x00000400/**< MPEG4 interlacing mode. |
|
|
* |
|
|
* Enables interlacing encoding mode */ |
|
|
#define XVID_TOPFIELDFIRST 0x00000800/**< Unknown |
|
|
* |
|
|
* \deprecated This flag is no longer used. */ |
|
|
#define XVID_ALTERNATESCAN 0x00001000/**< |
|
|
* |
|
|
* \deprecated This flag is no longer used. */ |
|
|
#define XVID_HINTEDME_GET 0x00002000/**< Gets Motion vector data from ME system. |
|
|
* |
|
|
* informs xvid to return Motion Estimation vectors from the ME encoder |
|
|
* algorithm. Used during a first pass. */ |
|
|
#define XVID_HINTEDME_SET 0x00004000/**< Gives Motion vectors hint to ME system. |
|
|
* |
|
|
* informs xvid to use the user given motion estimation vectors as hints |
|
|
* for the encoder ME algorithms. Used during a 2nd pass. */ |
|
|
#define XVID_INTER4V 0x00008000/**< Inter4V mode. |
|
|
* |
|
|
* forces XviD to search a vector for each 8x8 block within the 16x16 Macro |
|
|
* Block. This mode should be used only if the XVID_HALFPEL mode is activated |
|
|
* (this could change in the future). */ |
|
|
#define XVID_ME_ZERO 0x00010000/**< Unused |
|
|
* |
|
|
* Do not use this flag (reserved for future use) */ |
|
|
#define XVID_ME_LOGARITHMIC 0x00020000/**< Unused |
|
|
* |
|
|
* Do not use this flag (reserved for future use) */ |
|
|
#define XVID_ME_FULLSEARCH 0x00040000/**< Unused |
|
|
* |
|
|
* Do not use this flag (reserved for future use) */ |
|
|
#define XVID_ME_PMVFAST 0x00080000/**< Use PMVfast ME algorithm. |
|
|
* |
|
|
* Switches XviD ME algorithm to PMVfast */ |
|
|
#define XVID_ME_EPZS 0x00100000/**< Use EPZS ME algorithm. |
|
|
* |
|
|
* Switches XviD ME algorithm to EPZS */ |
|
|
#define XVID_GREYSCALE 0x01000000/**< Discard chroma data. |
|
|
* |
|
|
* This flags forces XviD to discard chroma data, this is not mpeg4 greyscale |
|
|
* mode, it simply drops chroma MBs using cbp == 0 for these blocks */ |
|
|
#define XVID_GRAYSCALE XVID_GREYSCALE /**< XVID_GREYSCALE alias |
|
|
* |
|
|
* United States locale support. */ |
|
283 |
|
|
284 |
/** @} */ |
#define XVID_GMC 0x10000000 |
285 |
|
#define XVID_GMC_TRANSLATIONAL 0x20000000 |
286 |
|
|
287 |
/** |
#define XVID_REDUCED 0x04000000 /* reduced resolution vop */ |
288 |
* \defgroup encmotionflags_grp Flags for XVID_ENC_FRAME.motion |
#define XVID_HQACPRED 0x08000000 /* 20030209: high quality ac prediction */ |
|
* @{ |
|
|
*/ |
|
289 |
|
|
290 |
#define PMV_ADVANCEDDIAMOND8 0x00004000/**< Uses advanced diamonds for 8x8 blocks |
#define XVID_EXTRASTATS 0x00000200 /* generate extra statistics */ |
291 |
* |
|
292 |
* Same as its 16x16 companion option |
#define XVID_MODEDECISION_BITS 0x00400000 /* enable DCT-ME and use it for mode decision */ |
293 |
*/ |
|
294 |
#define PMV_ADVANCEDDIAMOND16 0x00008000/**< Uses advanced diamonds for 16x16 blocks |
|
295 |
* |
/* Flags for XVID_ENC_FRAME.motion */ |
296 |
* */ |
#define PMV_ADVANCEDDIAMOND16 0x00008000 /* use advdiamonds instead of diamonds as search pattern */ |
297 |
#define PMV_HALFPELDIAMOND16 0x00010000/**< Turns on halfpel precision for 16x16 blocks |
#define PMV_USESQUARES16 0x00800000 /* use squares instead of diamonds as search pattern */ |
298 |
* |
|
299 |
* switches the search algorithm from 1 or 2 full pixels precision to 1 or 2 half pixel precision. |
#define PMV_HALFPELREFINE16 0x00020000 |
300 |
*/ |
#define PMV_HALFPELREFINE8 0x02000000 |
301 |
#define PMV_HALFPELREFINE16 0x00020000/**< Turns on halfpel refinement step |
|
302 |
* |
#define PMV_QUARTERPELREFINE16 0x00040000 |
303 |
* After normal diamond search, an extra halfpel refinement step is performed. Should always be used if |
#define PMV_QUARTERPELREFINE8 0x04000000 |
304 |
* XVID_HALFPEL is on, because it gives a rather big increase in quality. |
|
305 |
*/ |
#define PMV_EXTSEARCH16 0x00080000 /* extend PMV by more searches */ |
306 |
#define PMV_EXTSEARCH16 0x00040000/**< Extends search for 16x16 blocks |
|
307 |
* |
#define PMV_EXTSEARCH8 0x08000000 /* use diamond/square for extended 8x8 search */ |
308 |
* Normal PMVfast predicts one start vector and does diamond search around this position. EXTSEARCH means that 2 |
#define PMV_ADVANCEDDIAMOND8 0x00004000 /* use advdiamond for PMV_EXTSEARCH8 */ |
309 |
* more start vectors are used: (0,0) and median predictor and diamond search is done for those, too. Makes |
#define PMV_USESQUARES8 0x80000000 /* use square for PMV_EXTSEARCH8 */ |
310 |
* search slightly slower, but quality sometimes gets better. |
|
311 |
*/ |
#define PMV_CHROMA16 0x00100000 /* also use chroma for P_VOP/S_VOP ME */ |
312 |
#define PMV_EARLYSTOP16 0x00080000/**< Dynamic ME thresholding |
#define PMV_CHROMA8 0x10000000 /* also use chroma for B_VOP ME */ |
313 |
* |
|
314 |
* PMVfast and EPZS stop search if current best is below some dynamic threshhold. No diamond search is done, |
/* Motion search using DCT. use XVID_MODEDECISION_BITS to enable */ |
315 |
* only halfpel refinement (if active). Without EARLYSTOP diamond search is always done. That would be much slower, |
#define HALFPELREFINE16_BITS 0x00000100 /* perform DCT-based halfpel refinement */ |
316 |
* but not really lead to better quality. |
#define HALFPELREFINE8_BITS 0x00000200 /* perform DCT-based halfpel refinement for 8x8 mode */ |
317 |
*/ |
#define QUARTERPELREFINE16_BITS 0x00000400 /* perform DCT-based qpel refinement */ |
318 |
#define PMV_QUICKSTOP16 0x00100000/**< Dynamic ME thresholding |
#define QUARTERPELREFINE8_BITS 0x00000800 /* perform DCT-based qpel refinement for 8x8 mode */ |
319 |
* |
|
320 |
* like EARLYSTOP, but not even halfpel refinement is done. Normally worse quality, so it defaults to |
#define EXTSEARCH_BITS 0x00001000 /* perform DCT-based search using square pattern |
321 |
* off. Might be removed, too. |
enable PMV_EXTSEARCH8 to do this in 8x8 search as well */ |
322 |
*/ |
#define CHECKPREDICTION_BITS 0x00002000 /* always check vector equal to prediction */ |
323 |
#define PMV_UNRESTRICTED16 0x00200000/**< Not implemented |
|
324 |
* |
|
325 |
* "unrestricted ME" is a feature of MPEG4. It's not implemented, so this flag is ignored (not even |
/* note: old and deprecated - or never implemented */ |
326 |
* checked). |
|
327 |
*/ |
/* only for compatability with old encoders */ |
328 |
#define PMV_OVERLAPPING16 0x00400000/**< Not implemented |
|
329 |
* |
#define PMV_EARLYSTOP16 0x00 |
330 |
* Same as above |
#define PMV_EARLYSTOP8 0x00 |
331 |
*/ |
#define PMV_QUICKSTOP16 0x00 |
332 |
#define PMV_USESQUARES16 0x00800000/**< Use square pattern |
#define PMV_QUICKSTOP8 0x00 |
333 |
* |
|
334 |
* Replace the diamond search with a square search. |
#define PMV_HALFPELDIAMOND16 0x00 |
335 |
*/ |
#define PMV_HALFPELDIAMOND8 0x00 |
336 |
#define PMV_HALFPELDIAMOND8 0x01000000/**< see 16x16 equivalent |
|
337 |
* |
#define PMV_UNRESTRICTED16 0x00200000 /* unrestricted ME, not implemented */ |
338 |
* Same as its 16x16 companion option */ |
#define PMV_OVERLAPPING16 0x00400000 /* overlapping ME, not implemented */ |
339 |
#define PMV_HALFPELREFINE8 0x02000000/**< see 16x16 equivalent |
#define PMV_UNRESTRICTED8 0x20000000 /* unrestricted ME, not implemented */ |
340 |
* |
#define PMV_OVERLAPPING8 0x40000000 /* overlapping ME, not implemented */ |
341 |
* Same as its 16x16 companion option */ |
|
342 |
#define PMV_EXTSEARCH8 0x04000000/**< see 16x16 equivalent |
#define XVID_ME_COLOUR 0x00 /* this has been converted to PMV_CHROMA[16/8] */ |
|
* |
|
|
* Same as its 16x16 companion option */ |
|
|
#define PMV_EARLYSTOP8 0x08000000/**< see 16x16 equivalent |
|
|
* |
|
|
* Same as its 16x16 companion option */ |
|
|
#define PMV_QUICKSTOP8 0x10000000/**< see 16x16 equivalent |
|
|
* |
|
|
* Same as its 16x16 companion option */ |
|
|
#define PMV_UNRESTRICTED8 0x20000000/**< see 16x16 equivalent |
|
|
* |
|
|
* Same as its 16x16 companion option */ |
|
|
#define PMV_OVERLAPPING8 0x40000000/**< see 16x16 equivalent |
|
|
* |
|
|
* Same as its 16x16 companion option */ |
|
|
#define PMV_USESQUARES8 0x80000000/**< see 16x16 equivalent |
|
|
* |
|
|
* Same as its 16x16 companion option */ |
|
343 |
|
|
|
/** @} */ |
|
344 |
|
|
345 |
/***************************************************************************** |
/***************************************************************************** |
346 |
* Encoder structures |
* Encoder structures |
347 |
****************************************************************************/ |
****************************************************************************/ |
348 |
|
|
|
/** Structure used for encoder instance creation */ |
|
349 |
typedef struct |
typedef struct |
350 |
{ |
{ |
351 |
int width; /**< [in] |
int width, height; |
352 |
* |
int fincr, fbase; /* [in] frame increment, fbase. each frame = "fincr/fbase" seconds */ |
353 |
* Input frame width. */ |
int rc_bitrate; /* [in] the bitrate of the target encoded stream, in bits/second */ |
354 |
int height; /**< [in] |
int rc_reaction_delay_factor; /* [in] how fast the rate control reacts - lower values are faster */ |
355 |
* |
int rc_averaging_period; /* [in] as above */ |
356 |
* Input frame height. */ |
int rc_buffer; /* [in] as above */ |
357 |
int fincr; /**< [in] |
int max_quantizer; /* [in] the upper limit of the quantizer */ |
358 |
* |
int min_quantizer; /* [in] the lower limit of the quantizer */ |
359 |
* Time increment (fps = increment/base). */ |
int max_key_interval; /* [in] the maximum interval between key frames */ |
360 |
int fbase; /**< [in] |
#ifdef _SMP |
361 |
* |
int num_threads; /* [in] number of threads */ |
362 |
* Time base (fps = increment/base). */ |
#endif |
363 |
int rc_bitrate; /**< [in] |
int global; /* [in] global/debug options */ |
364 |
* |
int max_bframes; /* [in] max sequential bframes (0=disable bframes) */ |
365 |
* Sets the target bitrate of the encoded stream, in bits/second. **/ |
int bquant_ratio; /* [in] bframe quantizer multipier (percentage). |
366 |
int rc_reaction_delay_factor; /**< [in] |
used only when bquant < 1 |
367 |
* |
eg. 200 = x2 multiplier |
368 |
* Tunes how fast the rate control reacts - lower values are faster. */ |
quant = ((past_quant + future_quant) * bquant_ratio)/200 |
369 |
int rc_averaging_period; /**< [in] |
*/ |
370 |
* |
int bquant_offset; /* [in] bquant += bquant_offset */ |
371 |
* Tunes how fast the rate control reacts - lower values are faster. */ |
int frame_drop_ratio; /* [in] frame dropping: 0=drop none... 100=drop all */ |
372 |
int rc_buffer; /**< [in] |
void *handle; /* [out] encoder instance handle */ |
373 |
* |
} XVID_ENC_PARAM; |
|
* Tunes how fast the rate control reacts - lower values are faster. */ |
|
|
int max_quantizer; /**< [in] |
|
|
* |
|
|
* Sets the upper limit of the quantizer. */ |
|
|
int min_quantizer; /**< [in] |
|
|
* |
|
|
* Sets the lower limit of the quantizer. */ |
|
|
int max_key_interval; /**< [in] |
|
|
* |
|
|
* Sets the maximum interval between key frames. */ |
|
|
void *handle; /**< [out] |
|
|
* |
|
|
* XviD core lib will set this with the creater encoder instance. */ |
|
|
} |
|
|
XVID_ENC_PARAM; |
|
374 |
|
|
375 |
typedef struct |
typedef struct |
376 |
{ |
{ |
377 |
int x; |
int x; |
378 |
int y; |
int y; |
379 |
} |
} VECTOR; |
|
VECTOR; |
|
380 |
|
|
381 |
typedef struct |
typedef struct |
382 |
{ |
{ |
383 |
int mode; /* macroblock mode */ |
int mode; /* macroblock mode */ |
384 |
VECTOR mvs[4]; |
VECTOR mvs[4]; |
385 |
} |
} MVBLOCKHINT; |
|
MVBLOCKHINT; |
|
386 |
|
|
387 |
typedef struct |
typedef struct |
388 |
{ |
{ |
389 |
int intra; /* frame intra choice */ |
int intra; /* frame intra choice */ |
390 |
int fcode; /* frame fcode */ |
int fcode; /* frame fcode */ |
391 |
MVBLOCKHINT *block; /* caller-allocated array of block hints (mb_width * mb_height) */ |
MVBLOCKHINT *block; /* caller-allocated array of block hints (mb_width * mb_height) */ |
392 |
} |
} MVFRAMEHINT; |
|
MVFRAMEHINT; |
|
393 |
|
|
394 |
typedef struct |
typedef struct |
395 |
{ |
{ |
398 |
MVFRAMEHINT mvhint; |
MVFRAMEHINT mvhint; |
399 |
void *hintstream; /* compressed hint buffer */ |
void *hintstream; /* compressed hint buffer */ |
400 |
int hintlength; /* length of buffer (bytes) */ |
int hintlength; /* length of buffer (bytes) */ |
401 |
} |
} HINTINFO; |
|
HINTINFO; |
|
402 |
|
|
|
/** Structure used to pass a frame to the encoder */ |
|
403 |
typedef struct |
typedef struct |
404 |
{ |
{ |
405 |
int general; /**< [in] |
int general; /* [in] general options */ |
406 |
* |
int motion; /* [in] ME options */ |
407 |
* Sets general options flag (See \ref encgenflags_grp) */ |
void *bitstream; /* [in] bitstream ptr */ |
408 |
int motion; /**< [in] |
int length; /* [out] bitstream length (bytes) */ |
409 |
* |
|
410 |
* Sets Motion Estimation options */ |
void *image; /* [in] image ptr */ |
411 |
void *bitstream; /**< [out] |
int stride; /* [in] horizontal stride in bytes */ |
412 |
* |
int colorspace; /* [in] source colorspace */ |
413 |
* Output MPEG4 bitstream buffer pointer */ |
|
414 |
int length; /**< [out] |
unsigned char *quant_intra_matrix; /* [in] custom intra qmatrix */ |
415 |
* |
unsigned char *quant_inter_matrix; /* [in] custom inter qmatrix */ |
416 |
* Output MPEG4 bitstream length (bytes) */ |
int quant; /* [in] frame quantizer (vbr) */ |
417 |
void *image; /**< [in] |
int intra; /* [in] force intra frame (vbr only) |
418 |
* |
[out] frame type (ugly atm) |
|
* Input frame */ |
|
|
int colorspace; /**< [in] |
|
|
* |
|
|
* input frame colorspace */ |
|
|
unsigned char *quant_intra_matrix; /**< [in] |
|
|
* |
|
|
* Custom intra quantization matrix */ |
|
|
unsigned char *quant_inter_matrix; /**< [in] |
|
|
* |
|
|
* Custom inter quantization matrix */ |
|
|
int quant; /**< [in] |
|
|
* |
|
|
* Frame quantizer : |
|
|
* <ul> |
|
|
* <li> 0 (zero) : Then the rate controler chooses the right quantizer |
|
|
* for you. Typically used in ABR encoding, or first pass of a VBR |
|
|
* encoding session. |
|
|
* <li> != 0 : Then you force the encoder to use this specific |
|
|
* quantizer value. It is clamped in the interval |
|
|
* [1..31]. Tipically used during the 2nd pass of a VBR encoding |
|
|
* session. |
|
|
* </ul> */ |
|
|
int intra; /**< [in/out] |
|
|
* |
|
|
* <ul> |
|
|
* <li> [in] : tells XviD if the frame must be encoded as an intra frame |
|
|
* <ul> |
|
|
* <li> 1: forces the encoder to create a keyframe. Mainly used during |
|
|
* a VBR 2nd pass. |
|
|
* <li> 0: forces the encoder not to create a keyframe. Minaly used |
|
|
* during a VBR second pass |
|
|
* <li> -1: let the encoder decide (based on contents and |
|
|
* max_key_interval). Mainly used in ABR mode and during a 1st |
|
|
* VBR pass. |
|
|
* </ul> |
|
|
* <li> [out] : When first set to -1, the encoder returns the effective keyframe state |
|
|
* of the frame. |
|
|
* </ul> |
|
419 |
*/ |
*/ |
420 |
HINTINFO hint; /**< [in/out] |
HINTINFO hint; /* [in/out] mv hint information */ |
|
* |
|
|
* mv hint information */ |
|
421 |
|
|
422 |
} |
int bquant; /* [in] bframe quantizer */ |
423 |
XVID_ENC_FRAME; |
int bframe_threshold; /* [in] sensitivity of B-frame decision */ |
424 |
|
|
425 |
|
} XVID_ENC_FRAME; |
426 |
|
|
427 |
|
|
|
/** Encoding statistics */ |
|
428 |
typedef struct |
typedef struct |
429 |
{ |
{ |
430 |
int quant; /**< [out] |
int quant; /* [out] frame quantizer */ |
431 |
* |
int hlength; /* [out] header length (bytes) */ |
432 |
* Frame quantizer used during encoding */ |
int kblks; /* [out] number of intra blocks */ |
433 |
int hlength; /**< [out] |
int mblks; /* [out] number of inter blocks */ |
434 |
* |
int ublks; /* [out] number of "not coded" blocks */ |
435 |
* Header bytes in the resulting MPEG4 stream */ |
long sse_y; /* [out] SSE of Y */ |
436 |
int kblks; /**< [out] |
long sse_u; /* [out] SSE of Cb */ |
437 |
* |
long sse_v; /* [out] SSE of Cr */ |
438 |
* Number of intra macro blocks */ |
} XVID_ENC_STATS; |
|
int mblks; /**< [out] |
|
|
* |
|
|
* Number of inter macro blocks */ |
|
|
int ublks; /**< [out] |
|
|
* |
|
|
* Number of skipped macro blocks */ |
|
|
} |
|
|
XVID_ENC_STATS; |
|
439 |
|
|
440 |
|
|
441 |
/***************************************************************************** |
/***************************************************************************** |
442 |
* Encoder entry point |
* Encoder entry point |
443 |
****************************************************************************/ |
****************************************************************************/ |
444 |
|
|
445 |
/** |
/* Encoder options */ |
446 |
* \defgroup encops_grp Encoder operations |
#define XVID_ENC_ENCODE 0 |
447 |
* |
#define XVID_ENC_CREATE 1 |
448 |
* These are all the operations XviD's encoder can perform. |
#define XVID_ENC_DESTROY 2 |
|
* |
|
|
* @{ |
|
|
*/ |
|
|
|
|
|
#define XVID_ENC_ENCODE 0 /**< Encodes a frame |
|
|
* |
|
|
* This operation constant is used when client application wants to encode a |
|
|
* frame. Client application must also fill XVID_ENC_FRAME appropriately. |
|
|
*/ |
|
|
|
|
|
#define XVID_ENC_CREATE 1 /**< Creates a decoder instance |
|
|
* |
|
|
* This operation constant is used by a client application in order to create |
|
|
* an encoder instance. Encoder instances are independant from each other. |
|
|
*/ |
|
|
|
|
|
#define XVID_ENC_DESTROY 2 /**< Destroys a encoder instance |
|
|
* |
|
|
* This operation constant is used by the client application to destroy a |
|
|
* previously created encoder instance. |
|
|
*/ |
|
|
|
|
449 |
|
|
|
/** @} */ |
|
|
|
|
|
/** |
|
|
* \defgroup encentry_grp Encoder entry point |
|
|
* |
|
|
* @{ |
|
|
*/ |
|
|
|
|
|
/** |
|
|
* \brief Encoder entry point. |
|
|
* |
|
|
* This is the XviD's encoder entry point. The possible operations are |
|
|
* described in the \ref encops_grp section. |
|
|
* |
|
|
* \param handle Encoder instance handle |
|
|
* \param opt Encoder option constant |
|
|
* \param param1 Used to pass XVID_ENC_PARAM or XVID_ENC_FRAME structures. |
|
|
* \param param2 Optionally used to pass the XVID_ENC_STATS structure. |
|
|
*/ |
|
450 |
int xvid_encore(void *handle, |
int xvid_encore(void *handle, |
451 |
int opt, |
int opt, |
452 |
void *param1, |
void *param1, |
453 |
void *param2); |
void *param2); |
454 |
|
|
|
/** @} */ |
|
|
|
|
|
/** @} */ |
|
455 |
|
|
456 |
#ifdef __cplusplus |
#ifdef __cplusplus |
457 |
} |
} |