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

Diff of /trunk/xvidcore/src/xvid.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 199, Thu Jun 13 12:42:18 2002 UTC revision 851, Sat Feb 15 15:22:19 2003 UTC
# Line 28  Line 28 
28  *               ToDo ? : when BFRAMES is defined, the API_VERSION should not  *               ToDo ? : when BFRAMES is defined, the API_VERSION should not
29  *                        be the same (3.0 ?)  *                        be the same (3.0 ?)
30  *  *
31  *  $Id: xvid.h,v 1.10 2002-06-13 12:42:18 edgomez Exp $  *  $Id: xvid.h,v 1.25 2003-02-15 15:22:17 edgomez Exp $
32  *  *
33  *****************************************************************************/  *****************************************************************************/
34    
# Line 37  Line 37 
37  #define _XVID_H_  #define _XVID_H_
38    
39  #ifdef __cplusplus  #ifdef __cplusplus
40  *  $Id: xvid.h,v 1.10 2002-06-13 12:42:18 edgomez Exp $  extern "C" {
41  #endif  #endif
42    
43  /*****************************************************************************  /*****************************************************************************
# Line 46  Line 46 
46    
47  /* API Version : 2.1 */  /* API Version : 2.1 */
48  #define API_VERSION ((2 << 16) | (1))  #define API_VERSION ((2 << 16) | (1))
49    #define XVID_API_UNSTABLE
50    
51    /* Bitstream Version
52     * this will be writen into the bitstream to allow easy detection of xvid
53     * encoder bugs in the decoder, without this it might not possible to
54     * automatically distinquish between a file which has been encoded with an
55     * old & buggy XVID from a file which has been encoded with a bugfree version
56     * see the infamous interlacing bug ...
57     *
58     * this MUST be increased if an encoder bug is fixed, increasing it too often
59     * doesnt hurt but not increasing it could cause difficulty for decoders in the
60     * future
61     */
62    #define XVID_BS_VERSION "0009"
63    
64    
65  /* Error codes */  /* Error codes */
# Line 56  Line 70 
70    
71    
72  /* Colorspaces */  /* Colorspaces */
73  #define XVID_CSP_RGB24  0  #define XVID_CSP_RGB24  0               /* [b|g|r] */
74  #define XVID_CSP_YV12   1  #define XVID_CSP_YV12   1
75  #define XVID_CSP_YUY2   2  #define XVID_CSP_YUY2   2
76  #define XVID_CSP_UYVY   3  #define XVID_CSP_UYVY   3
# Line 66  Line 80 
80  #define XVID_CSP_USER   12  #define XVID_CSP_USER   12
81  #define XVID_CSP_EXTERN      1004  // per slice rendering  #define XVID_CSP_EXTERN      1004  // per slice rendering
82  #define XVID_CSP_YVYU   1002  #define XVID_CSP_YVYU   1002
83  #define XVID_CSP_RGB32  1000  #define XVID_CSP_RGB32  1000    /* [b|g|r|a] */
84    #define XVID_CSP_ABGR   1006    /* [a|b|g|r] */
85    #define XVID_CSP_RGBA   1005    /* [r|g|b|a] */
86    
87    
88    
89  #define XVID_CSP_NULL   9999  #define XVID_CSP_NULL   9999
90    
91  #define XVID_CSP_VFLIP  0x80000000      // flip mask  #define XVID_CSP_VFLIP  0x80000000      // flip mask
92    
93    
94  /*****************************************************************************  /*****************************************************************************
95     *  Initialization constants
96   ****************************************************************************/   ****************************************************************************/
97    
98  /* CPU flags for XVID_INIT_PARAM.cpu_flags */  /* CPU flags for XVID_INIT_PARAM.cpu_flags */
99    #define XVID_CPU_FORCE          0x80000000
100    #define XVID_CPU_CHKONLY        0x40000000              /* check cpu only; dont init globals */
101    
102  #define XVID_CPU_MMX            0x00000001  #define XVID_CPU_ASM            0x00000080              /* native assembly */
103  #define XVID_CPU_MMXEXT         0x00000002  /* ARCH_IS_IA32 */
104  #define XVID_CPU_SSE            0x00000004  #define XVID_CPU_MMX            0x00000001              /* mmx: pentiumMMX,k6 */
105  #define XVID_CPU_SSE2           0x00000008  #define XVID_CPU_MMXEXT         0x00000002              /* mmxx-ext: pentium2,athlon */
106  #define XVID_CPU_3DNOW          0x00000010  #define XVID_CPU_SSE            0x00000004              /* sse: pentium3,athlonXP */
107  #define XVID_CPU_3DNOWEXT       0x00000020  #define XVID_CPU_SSE2           0x00000008              /* sse2: pentium4,athlon64 */
108    #define XVID_CPU_3DNOW          0x00000010              /* 3dnow: k6-2 */
109    #define XVID_CPU_3DNOWEXT       0x00000020              /* 3dnow-ext: athlon */
110    #define XVID_CPU_TSC            0x00000040              /* timestamp counter */
111    /* ARCH_IS_IA64 */
112    #define XVID_CPU_IA64           XVID_CPU_ASM    /* defined for backward compatibility */
113    /* ARCH_IS_PPC */
114    #define XVID_CPU_ALTIVEC        0x00000001              /* altivec */
115    
 #define XVID_CPU_TSC            0x00000040  
 #define XVID_CPU_IA64           0x00000080  
   
 #define XVID_CPU_CHKONLY        0x40000000              /* check cpu only; dont init globals */  
 #define XVID_CPU_FORCE          0x80000000  
116    
117            typedef struct
118            {
119                    int colorspace;
120                    void * y;
121                    void * u;
122                    void * v;
123                    int y_stride;
124                    int uv_stride;
125            } XVID_IMAGE;           /* from yv12 */
126    
127    #define XVID_INIT_INIT          0
128    #define XVID_INIT_CONVERT       1
129    #define XVID_INIT_TEST          2
130    
131    /*****************************************************************************
132   *  Initialization structures   *  Initialization structures
133     ****************************************************************************/
134    
135            typedef struct
136            {
137                  int cpu_flags;                  int cpu_flags;
138                  int api_version;                  int api_version;
139                  int core_build;                  int core_build;
140          }          }
141          XVID_INIT_PARAM;          XVID_INIT_PARAM;
142    
143            typedef struct
144            {
145                    XVID_IMAGE input;
146                    XVID_IMAGE output;
147                    int width;
148                    int height;
149                    int interlacing;
150            } XVID_INIT_CONVERTINFO;
151    
152  /*****************************************************************************  /*****************************************************************************
153   *  Initialization entry point   *  Initialization entry point
154   ****************************************************************************/   ****************************************************************************/
# Line 113  Line 164 
164   ****************************************************************************/   ****************************************************************************/
165    
166  /* Flags for XVID_DEC_FRAME.general */  /* Flags for XVID_DEC_FRAME.general */
167    #define XVID_DEC_LOWDELAY               0x00000001      /* decode lowdelay mode (ie. video-for-windows) */
168    #define XVID_DEC_DEBLOCKY               0x00000002      /* luma deblocking */
169    #define XVID_DEC_DEBLOCKUV              0x00000008      /* chroma deblocking */
170    #define XVID_DEC_DISCONTINUITY  0x00000004      /* indicates break in stream; instructs
171                                                                                            decoder to ignore any previous reference frames */
172  #define XVID_QUICK_DECODE               0x00000010  #define XVID_QUICK_DECODE               0x00000010
173    
174  /*****************************************************************************  /*****************************************************************************
# Line 128  Line 184 
184          XVID_DEC_PARAM;          XVID_DEC_PARAM;
185    
186    
187    #define XVID_DEC_VOP    0
188    #define XVID_DEC_VOL    1
189    #define XVID_DEC_NOTHING        2       /* nothing was decoded */
190    
191            typedef struct
192            {
193                    int notify;                     /* [out]        output 'mode' */
194                    union
195                    {
196                            struct  /* XVID_DEC_VOP */
197                            {
198                                    int time_base;          /* [out]        time base */
199                                    int time_increment;     /* [out]        time increment */
200                            } vop;
201                            struct  /* XVID_DEC_VOL */
202                            {
203                                    int general;            /* [out]        flags: eg. frames are interlaced */
204                                    int width;                      /* [out]        width */
205                                    int height;                     /* [out]        height */
206                                    int aspect_ratio;       /* [out]        aspect ratio */
207                                    int par_width;          /* [out]        aspect ratio width */
208                                    int par_height;         /* [out]        aspect ratio height */
209                            } vol;
210                    } data;
211            } XVID_DEC_STATS;
212    
213    
214          typedef struct          typedef struct
215          {          {
216                  int general;                  int general;
# Line 148  Line 231 
231                  int stride_y, stride_u,stride_v;                  int stride_y, stride_u,stride_v;
232          } XVID_DEC_PICTURE;          } XVID_DEC_PICTURE;
233    
234    
235    /*****************************************************************************
236     * Decoder entry point
237     ****************************************************************************/
238    
239    /* decoder options */
240    #define XVID_DEC_DECODE         0
241    #define XVID_DEC_CREATE         1
242  #define XVID_DEC_DESTROY        2  #define XVID_DEC_DESTROY        2
243    
244          int xvid_decore(void *handle,          int xvid_decore(void *handle,
# Line 164  Line 255 
255  #define XVID_GLOBAL_PACKED              0x00000001      /* packed bitstream */  #define XVID_GLOBAL_PACKED              0x00000001      /* packed bitstream */
256  #define XVID_GLOBAL_DX50BVOP    0x00000002      /* dx50 bvop compatibility */  #define XVID_GLOBAL_DX50BVOP    0x00000002      /* dx50 bvop compatibility */
257  #define XVID_GLOBAL_DEBUG               0x00000004      /* print debug info on each frame */  #define XVID_GLOBAL_DEBUG               0x00000004      /* print debug info on each frame */
258    #define XVID_GLOBAL_REDUCED             0x04000000      /* reduced resolution vop enable */
259    
260    #define XVID_GLOBAL_EXTRASTATS  0x00000200      /* generate extra statistics */
261    
262    
263  /* Flags for XVID_ENC_FRAME.general */  /* Flags for XVID_ENC_FRAME.general */
264  #define XVID_VALID_FLAGS                0x80000000  #define XVID_VALID_FLAGS                0x80000000
265    
266  #define XVID_CUSTOM_QMATRIX             0x00000004      /* use custom quant matrix */  #define XVID_CUSTOM_QMATRIX             0x00000004      /* use custom quant matrix */
267  #define XVID_LATEINTRA                  0x00000200  #define XVID_H263QUANT                  0x00000010
268    #define XVID_MPEGQUANT                  0x00000020
269    #define XVID_HALFPEL                    0x00000040      /* use halfpel interpolation */
270    #define XVID_QUARTERPEL                 0x02000000
271    #define XVID_ADAPTIVEQUANT              0x00000080
272    #define XVID_LUMIMASKING                0x00000100
273    
274  #define XVID_INTERLACING                0x00000400      /* enable interlaced encoding */  #define XVID_INTERLACING                0x00000400      /* enable interlaced encoding */
275  #define XVID_TOPFIELDFIRST              0x00000800      /* set top-field-first flag  */  #define XVID_TOPFIELDFIRST              0x00000800      /* set top-field-first flag  */
# Line 186  Line 286 
286  #define XVID_ME_PMVFAST                 0x00080000  #define XVID_ME_PMVFAST                 0x00080000
287  #define XVID_ME_EPZS                    0x00100000  #define XVID_ME_EPZS                    0x00100000
288    
   
289  #define XVID_GREYSCALE                  0x01000000      /* enable greyscale only mode (even for */  #define XVID_GREYSCALE                  0x01000000      /* enable greyscale only mode (even for */
290  #define XVID_GRAYSCALE                  0x01000000      /* color input material chroma is ignored) */                                                                                          /* color input material chroma is ignored) */
291    
292    #define XVID_GMC                                0x10000000
293    #define XVID_GMC_TRANSLATIONAL  0x20000000
294    
295    #define XVID_REDUCED                    0x04000000      /* reduced resolution vop */
296    #define XVID_HQACPRED                   0x08000000      /* 20030209: high quality ac prediction */
297    
298    #define XVID_EXTRASTATS                 0x00000200  /* generate extra statistics */
299    
300    #define XVID_MODEDECISION_BITS  0x00400000      /* enable DCT-ME and use it for mode decision */
301    
302    
303  /* Flags for XVID_ENC_FRAME.motion */  /* Flags for XVID_ENC_FRAME.motion */
 #define PMV_ADVANCEDDIAMOND8    0x00004000  
 #define PMV_ADVANCEDDIAMOND16   0x00008000  
 #define PMV_EARLYSTOP16                 0x00080000  
 #define PMV_QUICKSTOP16                 0x00100000      /* like early, but without any more refinement */  
 #define PMV_UNRESTRICTED16      0x00200000      /* unrestricted ME, not implemented */  
 #define PMV_OVERLAPPING16       0x00400000      /* overlapping ME, not implemented */  
 #define PMV_USESQUARES16                0x00800000  
304    
305  #define PMV_HALFPELDIAMOND8     0x01000000  #define PMV_ADVANCEDDIAMOND16   0x00008000      /* use advdiamonds instead of diamonds as search pattern */
306    #define PMV_USESQUARES16                0x00800000      /* use squares instead of diamonds as search pattern */
307    
308    #define PMV_HALFPELREFINE16     0x00020000
309  #define PMV_HALFPELREFINE8              0x02000000  #define PMV_HALFPELREFINE8              0x02000000
310  #define PMV_EXTSEARCH8                  0x04000000      /* extend PMV by more searches */  
311  #define PMV_EARLYSTOP8                  0x08000000  #define PMV_QUARTERPELREFINE16  0x00040000
312  #define PMV_QUICKSTOP8                  0x10000000      /* like early, but without any more refinement */  #define PMV_QUARTERPELREFINE8   0x04000000
313    
314    #define PMV_EXTSEARCH16                 0x00080000      /* extend PMV by more searches */
315    
316    #define PMV_EXTSEARCH8                  0x08000000      /* use diamond/square for extended 8x8 search */
317    #define PMV_ADVANCEDDIAMOND8    0x00004000      /* use advdiamond for PMV_EXTSEARCH8 */
318    #define PMV_USESQUARES8                 0x80000000      /* use square for PMV_EXTSEARCH8 */
319    
320    #define PMV_CHROMA16                    0x00100000      /* also use chroma for P_VOP/S_VOP ME */
321    #define PMV_CHROMA8                             0x10000000      /* also use chroma for B_VOP ME */
322    
323    /* Motion search using DCT. use XVID_MODEDECISION_DCT to enable */
324    #define HALFPELREFINE16_BITS    0x00000100      /* perform DCT-based halfpel refinement */
325    #define HALFPELREFINE8_BITS             0x00000200      /* perform DCT-based halfpel refinement for 8x8 mode */
326    #define QUARTERPELREFINE16_BITS 0x00000400      /* perform DCT-based qpel refinement */
327    #define QUARTERPELREFINE8_BITS  0x00000800      /* perform DCT-based qpel refinement for 8x8 mode */
328    
329    #define EXTSEARCH_BITS                  0x00001000      /* perform DCT-based search using square pattern */
330                                                                                            /* enable PMV_EXTSEARCH8 to do this in 8x8 search as well */
331    #define CHECKPREDICTION_BITS    0x00002000      /* always check vector equal to prediction */
332    
333    
334    /* note: old and deprecated - or never implemented */
335    
336    /* only for compatability with old encoders */
337    
338    #define PMV_EARLYSTOP16                 0x00
339    #define PMV_EARLYSTOP8                  0x00
340    #define PMV_QUICKSTOP16                 0x00
341    #define PMV_QUICKSTOP8                  0x00
342    
343    #define PMV_HALFPELDIAMOND16    0x00
344    #define PMV_HALFPELDIAMOND8     0x00
345    
346    #define PMV_UNRESTRICTED16      0x00200000      /* unrestricted ME, not implemented */
347    #define PMV_OVERLAPPING16       0x00400000      /* overlapping ME, not implemented */
348  #define PMV_UNRESTRICTED8       0x20000000      /* unrestricted ME, not implemented */  #define PMV_UNRESTRICTED8       0x20000000      /* unrestricted ME, not implemented */
349  #define PMV_OVERLAPPING8                0x40000000      /* overlapping ME, not implemented */  #define PMV_OVERLAPPING8                0x40000000      /* overlapping ME, not implemented */
350  #define PMV_USESQUARES8                 0x80000000  
351    #define XVID_ME_COLOUR                  0x00    /* this has been converted to PMV_CHROMA[16/8] */
352    
353    
354  /*****************************************************************************  /*****************************************************************************
# Line 228  Line 369 
369  #ifdef _SMP  #ifdef _SMP
370                  int num_threads;                /* number of threads */                  int num_threads;                /* number of threads */
371  #endif  #endif
 #ifdef BFRAMES  
372                  int global;                             /* global/debug options */                  int global;                             /* global/debug options */
373                  int max_bframes;                /* max sequential bframes (0=disable bframes) */                  int max_bframes;                /* max sequential bframes (0=disable bframes) */
374                  int bquant_ratio;               /* bframe quantizer multipier (percentage).                  int bquant_ratio;               /* bframe quantizer multipier (percentage).
375                                                                   * used only when bquant < 1                                                                   * used only when bquant < 1
376                                                                   * eg. 200 = x2 multiplier                                                                   * eg. 200 = x2 multiplier
377  #endif                                                                   * quant = ((past_quant + future_quant) * bquant_ratio)/200
378                                                                     */
379                    int bquant_offset;              /* bquant += bquant_offset */
380                    int frame_drop_ratio;   /* frame dropping: 0=drop none... 100=drop all */
381                    void *handle;                   /* [out] encoder instance handle */
382          }          }
383          XVID_ENC_PARAM;          XVID_ENC_PARAM;
384    
385          typedef struct          typedef struct
386          {          {
387                  int x;                  int x;
388                    int y;
389          }          }
390          VECTOR;          VECTOR;
391    
# Line 277  Line 422 
422                  int length;                             /* [out] bitstream length (bytes) */                  int length;                             /* [out] bitstream length (bytes) */
423    
424                  void *image;                    /* [in] image ptr */                  void *image;                    /* [in] image ptr */
425                    int stride;
426                  int colorspace;                 /* [in] source colorspace */                  int colorspace;                 /* [in] source colorspace */
427    
428                  unsigned char *quant_intra_matrix;      // [in] custom intra qmatrix */                  unsigned char *quant_intra_matrix;      // [in] custom intra qmatrix */
# Line 287  Line 433 
433                                                                   */                                                                   */
434                  HINTINFO hint;                  /* [in/out] mv hint information */                  HINTINFO hint;                  /* [in/out] mv hint information */
435    
 #ifdef BFRAMES  
436                  int bquant;                             /* [in] bframe quantizer */                  int bquant;                             /* [in] bframe quantizer */
 #endif  
437    
438          }          }
439          XVID_ENC_FRAME;          XVID_ENC_FRAME;
# Line 298  Line 442 
442          typedef struct          typedef struct
443          {          {
444                  int quant;                              /* [out] frame quantizer */                  int quant;                              /* [out] frame quantizer */
                 int input_consumed;             /* [out] */  
445                  int hlength;                    /* [out] header length (bytes) */                  int hlength;                    /* [out] header length (bytes) */
446                  int kblks, mblks, ublks;        /* [out] */                  int kblks, mblks, ublks;        /* [out] */
447                    long sse_y;                             /* [out] SSE of Y */
448                    long sse_u;                             /* [out] SSE of Cb */
449                    long sse_v;                             /* [out] SSE of Cr */
450          }          }
451          XVID_ENC_STATS;          XVID_ENC_STATS;
452    

Legend:
Removed from v.199  
changed lines
  Added in v.851

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