--- xvid.h 2003/12/17 17:07:38 1.27.2.54 +++ xvid.h 2010/12/31 11:30:38 1.75 @@ -1,9 +1,9 @@ /***************************************************************************** * * XVID MPEG-4 VIDEO CODEC - * - XviD Main header file - + * - Xvid Main header file - * - * Copyright(C) 2001-2003 Peter Ross + * Copyright(C) 2001-2010 Peter Ross * * This program is free software ; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: xvid.h,v 1.27.2.54 2003/12/17 17:07:38 Isibaar Exp $ + * $Id: xvid.h,v 1.75 2010/12/31 11:30:38 Isibaar Exp $ * ****************************************************************************/ @@ -57,8 +57,8 @@ #define XVID_API_MAJOR(a) (((a)>>16) & 0xff) #define XVID_API_MINOR(a) (((a)>> 0) & 0xff) -#define XVID_VERSION XVID_MAKE_VERSION(1,0,-126) -#define XVID_API XVID_MAKE_API(4, 0) +#define XVID_VERSION XVID_MAKE_VERSION(1,4,-127) +#define XVID_API XVID_MAKE_API(4, 4) #define XVID_UNSTABLE @@ -73,8 +73,7 @@ * doesnt hurt but not increasing it could cause difficulty for decoders in the * future */ -#define XVID_BS_VERSION "0024" - +#define XVID_BS_VERSION 70 /***************************************************************************** * error codes @@ -96,15 +95,18 @@ /* colorspace values */ -#define XVID_CSP_USER (1<< 0) /* 4:2:0 planar (==I420, except for pointers/strides) */ +#define XVID_CSP_PLANAR (1<< 0) /* 4:2:0 planar (==I420, except for pointers/strides) */ +#define XVID_CSP_USER XVID_CSP_PLANAR #define XVID_CSP_I420 (1<< 1) /* 4:2:0 planar */ #define XVID_CSP_YV12 (1<< 2) /* 4:2:0 planar */ #define XVID_CSP_YUY2 (1<< 3) /* 4:2:2 packed */ #define XVID_CSP_UYVY (1<< 4) /* 4:2:2 packed */ #define XVID_CSP_YVYU (1<< 5) /* 4:2:2 packed */ +#define XVID_CSP_RGB (1<<16) /* 24-bit rgb packed */ #define XVID_CSP_BGRA (1<< 6) /* 32-bit bgra packed */ #define XVID_CSP_ABGR (1<< 7) /* 32-bit abgr packed */ #define XVID_CSP_RGBA (1<< 8) /* 32-bit rgba packed */ +#define XVID_CSP_ARGB (1<<15) /* 32-bit argb packed */ #define XVID_CSP_BGR (1<< 9) /* 24-bit bgr packed */ #define XVID_CSP_RGB555 (1<<10) /* 16-bit rgb555 packed */ #define XVID_CSP_RGB565 (1<<11) /* 16-bit rgb565 packed */ @@ -127,6 +129,9 @@ #define XVID_PROFILE_S_L1 0x01 #define XVID_PROFILE_S_L2 0x02 #define XVID_PROFILE_S_L3 0x03 +#define XVID_PROFILE_S_L4a 0x04 +#define XVID_PROFILE_S_L5 0x05 +#define XVID_PROFILE_S_L6 0x06 #define XVID_PROFILE_ARTS_L1 0x91 /* advanced realtime simple */ #define XVID_PROFILE_ARTS_L2 0x92 #define XVID_PROFILE_ARTS_L3 0x93 @@ -168,6 +173,8 @@ #define XVID_CPU_MMXEXT (1<< 1) /* mmx-ext : pentium2, athlon */ #define XVID_CPU_SSE (1<< 2) /* sse : pentium3, athlonXP */ #define XVID_CPU_SSE2 (1<< 3) /* sse2 : pentium4, athlon64 */ +#define XVID_CPU_SSE3 (1<< 8) /* sse3 : pentium4, athlon64 */ +#define XVID_CPU_SSE41 (1<< 9) /* sse41: penryn */ #define XVID_CPU_3DNOW (1<< 4) /* 3dnow : k6-2 */ #define XVID_CPU_3DNOWEXT (1<< 5) /* 3dnow-ext : athlon */ #define XVID_CPU_TSC (1<< 6) /* tsc : Pentium */ @@ -232,13 +239,16 @@ extern int xvid_decore(void *handle, int opt, void *param1, void *param2); /* XVID_DEC_CREATE param 1 - image width & height may be specified here when the dimensions are - known in advance. */ + image width & height as well as FourCC code may be specified + here when known in advance (e.g. being read from container) */ typedef struct { int version; - int width; /* [in:opt] image width */ - int height; /* [in:opt] image width */ - void * handle; /* [out] decore context handle */ + int width; /* [in:opt] image width */ + int height; /* [in:opt] image width */ + void * handle; /* [out] decore context handle */ +/* ------- v1.3.x ------- */ + int fourcc; /* [in:opt] fourcc of the input video */ + int num_threads;/* [in:opt] number of threads to use in decoder */ } xvid_dec_create_t; @@ -248,7 +258,13 @@ #define XVID_DISCONTINUITY (1<<1) /* indicates break in stream */ #define XVID_DEBLOCKY (1<<2) /* perform luma deblocking */ #define XVID_DEBLOCKUV (1<<3) /* perform chroma deblocking */ -#define XVID_FILMEFFECT (1<<4) /* adds film grain */ +#define XVID_FILMEFFECT (1<<4) /* adds film grain */ +#define XVID_DERINGUV (1<<5) /* perform chroma deringing, requires deblocking to work */ +#define XVID_DERINGY (1<<6) /* perform luma deringing, requires deblocking to work */ + +#define XVID_DEC_FAST (1<<29) /* disable postprocessing to decrease cpu usage *todo* */ +#define XVID_DEC_DROP (1<<30) /* drop bframes to decrease cpu usage *todo* */ +#define XVID_DEC_PREROLL (1<<31) /* decode as fast as you can, don't even show output *todo* */ typedef struct { int version; @@ -256,6 +272,8 @@ void *bitstream; /* [in] bitstream (read from)*/ int length; /* [in] bitstream length */ xvid_image_t output; /* [in] output image (written to) */ +/* ------- v1.1.x ------- */ + int brightness; /* [in] brightness offset (0=none) */ } xvid_dec_frame_t; @@ -352,7 +370,7 @@ #define XVID_REQORIGINAL (1<<0) /* plugin requires a copy of the original (uncompressed) image */ #define XVID_REQPSNR (1<<1) /* plugin requires psnr between the uncompressed and compressed image*/ #define XVID_REQDQUANTS (1<<2) /* plugin requires access to the dquant table */ - +#define XVID_REQLAMBDA (1<<3) /* plugin requires access to the lambda table */ typedef struct { @@ -417,6 +435,9 @@ int vol_flags; /* [in,out] */ int motion_flags; /* [in,out] */ + /* Lambda table for HVSPlugins */ + float * lambda; /* [in,out] six floats for each macroblock. read, multiply, write back */ + /* Deprecated, use the stats field instead. * Will disapear before 1.0 */ int length; /* [out] after: length of encoded frame */ @@ -472,6 +493,9 @@ extern xvid_plugin_func xvid_plugin_psnr; /* write psnr values to stdout */ extern xvid_plugin_func xvid_plugin_dump; /* dump before and after yuvpgms */ +extern xvid_plugin_func xvid_plugin_ssim; /*write ssim values to stdout*/ +extern xvid_plugin_func xvid_plugin_psnrhvsm; /*write psnrhvsm values to stdout*/ + /* single pass rate control * CBR and Constant quantizer modes */ @@ -499,7 +523,7 @@ typedef struct { int version; - int bitrate; /* [in] bits per second */ + int bitrate; /* [in] target bitrate (bits per second) */ char * filename; /* [in] first pass stats filename */ int keyframe_boost; /* [in] keyframe boost percentage: [0..100] */ @@ -516,8 +540,39 @@ * 0 for 1 vbv_size + vbv_maxrate which + * guarantees that vbv_peakrate won't be exceeded. */ }xvid_plugin_2pass2_t; + +typedef struct{ + /*stat output*/ + int b_printstat; + char* stat_path; + + /*visualize*/ + int b_visualize; + + /*accuracy 0 very accurate 4 very fast*/ + int acc; + + int cpu_flags; /* XVID_CPU_XXX flags */ + +} xvid_plugin_ssim_t; + +typedef struct { + int version; + + int method; /* [in] masking method to apply. 0 for luminance masking, 1 for variance masking */ +} xvid_plugin_lumimasking_t; + /***************************************************************************** * ENCODER API ****************************************************************************/ @@ -577,7 +632,8 @@ #define XVID_GLOBAL_VOL_AT_IVOP (1<<3) /* write vol at every ivop: WIN32/divx compatibility */ #define XVID_GLOBAL_FORCE_VOL (1<<4) /* when vol-based parameters are changed, insert an ivop NOT recommended */ #endif - +#define XVID_GLOBAL_DIVX5_USERDATA (1<<5) /* write divx5 userdata string + this is implied if XVID_GLOBAL_PACKED is set */ /*---------------------------------------------------------------------------- * "VOL" flags @@ -591,6 +647,7 @@ #define XVID_VOL_QUARTERPEL (1<<2) /* enable quarterpel: frames will encoded as quarterpel */ #define XVID_VOL_GMC (1<<3) /* enable GMC; frames will be checked for gmc suitability */ #define XVID_VOL_REDUCED_ENABLE (1<<4) /* enable reduced resolution vops: frames will be checked for rrv suitability */ + /* NOTE: the reduced resolution feature is not supported anymore. This flag will have no effect! */ #define XVID_VOL_INTERLACING (1<<5) /* enable interlaced encoding */ @@ -612,6 +669,8 @@ #define XVID_VOP_HQACPRED (1<< 7) /* high quality ac prediction */ #define XVID_VOP_MODEDECISION_RD (1<< 8) /* enable DCT-ME and use it for mode decision */ #define XVID_VOP_FAST_MODEDECISION_RD (1<<12) /* use simplified R-D mode decision */ +#define XVID_VOP_RD_BVOP (1<<13) /* enable rate-distortion mode decision in b-frames */ +#define XVID_VOP_RD_PSNRHVSM (1<<14) /* use PSNR-HVS-M as metric for rate-distortion optimizations */ /* Only valid for vol_flags|=XVID_VOL_INTERLACING */ #define XVID_VOP_TOPFIELDFIRST (1<< 9) /* set top-field-first flag */ @@ -619,7 +678,7 @@ /* only valid for vol_flags|=XVID_VOL_REDUCED_ENABLED */ #define XVID_VOP_REDUCED (1<<11) /* reduced resolution vop */ - + /* NOTE: reduced resolution feature is not supported anymore. This flag will have no effect! */ /*---------------------------------------------------------------------------- * "Motion" flags @@ -644,10 +703,11 @@ #define XVID_ME_EXTSEARCH8 (1<<11) /* use diamond/square for extended 8x8 search */ #define XVID_ME_CHROMA_PVOP (1<<12) /* also use chroma for P_VOP/S_VOP ME */ #define XVID_ME_CHROMA_BVOP (1<<13) /* also use chroma for B_VOP ME */ -#define XVID_ME_FASTREFINE16 (1<<25) /* use low-complexity refinement functions */ +#define XVID_ME_FASTREFINE16 (1<<25) /* use low-complexity refinement functions */ +#define XVID_ME_FASTREFINE8 (1<<29) /* low-complexity 8x8 sub-block refinement */ /* Rate Distortion based flags - * Valid when XVID_VOP_MODEDECISION_BITS is enabled */ + * Valid when XVID_VOP_MODEDECISION_RD is enabled */ #define XVID_ME_HALFPELREFINE16_RD (1<<14) /* perform RD-based halfpel refinement */ #define XVID_ME_HALFPELREFINE8_RD (1<<15) /* perform RD-based halfpel refinement for 8x8 mode */ #define XVID_ME_QUARTERPELREFINE16_RD (1<<16) /* perform RD-based qpel refinement */ @@ -657,6 +717,9 @@ /* Other */ #define XVID_ME_DETECT_STATIC_MOTION (1<<24) /* speed-up ME by detecting stationary scenes */ +#define XVID_ME_SKIP_DELTASEARCH (1<<26) /* speed-up by skipping b-frame delta search */ +#define XVID_ME_FAST_MODEINTERPOLATE (1<<27) /* speed-up by partly skipping interpolate mode */ +#define XVID_ME_BFRAME_EARLYSTOP (1<<28) /* speed-up by early exiting b-search */ /* Unused */ #define XVID_ME_UNRESTRICTED16 (1<<20) /* unrestricted ME, not implemented */ @@ -685,7 +748,7 @@ int num_plugins; /* [in:opt] number of plugins */ xvid_enc_plugin_t * plugins; /* ^^ plugin array */ - int num_threads; /* [in:opt] number of threads */ + int num_threads; /* [in:opt] number of threads to use in encoder */ int max_bframes; /* [in:opt] max sequential bframes (0=disable bframes) */ int global; /* [in:opt] global flags; controls encoding behavior */ @@ -708,6 +771,10 @@ /* ---------------------------------------------- */ void *handle; /* [out] encoder instance handle */ + + /* ------- v1.3.x ------- */ + int start_frame_num; /* [in:opt] frame number of start frame relative to zones definitions. allows to encode sub-sequences */ + int num_slices; /* [in:opt] number of slices to code for each frame */ } xvid_enc_create_t;