📄 xvid.h
字号:
int xvid_global(void *handle, int opt, void *param1, void *param2);class C_xvid_image{public: byte *y; byte *u; byte *v; C_xvid_image(): y(NULL), u(NULL), v(NULL) {}};void * InitCodec(dword sx, dword sy, dword fcc);void CloseCodec(void *handle);//int DecodeFrame(void *handle, const void *buf, dword sz_in, byte **y, byte **u, byte **v, dword *pitch);int DecodeFrame(void *handle, const void *buf, dword sz_in, byte *&y, byte *&u, byte *&v, dword &pitch);/***************************************************************************** * xvid_decore() ****************************************************************************/#define XVID_DEC_CREATE 0 /* create decore instance; return 0 on success */#define XVID_DEC_DESTROY 1 /* destroy decore instance: return 0 on success */#define XVID_DEC_DECODE 2 /* decode a frame: returns number of bytes consumed >= 0 */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. */typedef struct { int version; int width; /* [in:opt] image width */ int height; /* [in:opt] image width */ void *handle; /* [out] decore context handle */#ifdef PROFILE C_profiler *prof;#endif} xvid_dec_create_t;/* XVID_DEC_DECODE param1 *//* general flags */#define XVID_LOWDELAY (1<<0) /* lowdelay mode */#define XVID_DISCONTINUITY (1<<1) /* indicates break in stream */typedef struct { int version; int general; /* [in:opt] general flags */ const void *bitstream; /* [in] bitstream (read from)*/ int length; /* [in] bitstream length */ //xvid_image_t output; /* [in] output image (written to) */ const C_xvid_image *img_out;} xvid_dec_frame_t;/* XVID_DEC_DECODE param2 :: optional */typedef struct{ int version; int type; /* [out] output data type */ union { struct { /* type>0 {XVID_TYPE_IVOP,XVID_TYPE_PVOP,XVID_TYPE_BVOP,XVID_TYPE_SVOP} */ int general; /* [out] flags */ int time_base; /* [out] time base */ int time_increment; /* [out] time increment */ /* XXX: external deblocking stuff */ int * qscale; /* [out] pointer to quantizer table */ int qscale_stride; /* [out] quantizer scale stride */ } vop; struct { /* XVID_TYPE_VOL */ int general; /* [out] flags */ int width; /* [out] width */ int height; /* [out] height */ int par; /* [out] picture aspect ratio (refer to XVID_PAR_xxx above) */ int par_width; /* [out] aspect ratio width */ int par_height; /* [out] aspect ratio height */ } vol; } data;} xvid_dec_stats_t;#define XVID_ZONE_QUANT (1<<0)#define XVID_ZONE_WEIGHT (1<<1)typedef struct{ int frame; int mode; int increment; int base;} xvid_enc_zone_t;/***************************************************************************** xvid plugin system -- internals xvidcore will call XVID_PLG_INFO and XVID_PLG_CREATE during XVID_ENC_CREATE before encoding each frame xvidcore will call XVID_PLG_BEFORE after encoding each frame xvidcore will call XVID_PLG_AFTER xvidcore will call XVID_PLG_DESTROY during XVID_ENC_DESTROY ****************************************************************************/#define XVID_PLG_CREATE (1<<0)#define XVID_PLG_DESTROY (1<<1)#define XVID_PLG_INFO (1<<2)#define XVID_PLG_BEFORE (1<<3)#define XVID_PLG_FRAME (1<<4)#define XVID_PLG_AFTER (1<<5)/* xvid_plg_info_t.flags */#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 */typedef struct{ int version; int flags; /* [in:opt] plugin flags */} xvid_plg_info_t;typedef struct{ int version; int num_zones; /* [out] */ xvid_enc_zone_t * zones; /* [out] */ int width; /* [out] */ int height; /* [out] */ int mb_width; /* [out] */ int mb_height; /* [out] */ int fincr; /* [out] */ int fbase; /* [out] */ void * param; /* [out] */} xvid_plg_create_t;typedef struct{ int version; int num_frames; /* [out] total frame encoded */} xvid_plg_destroy_t;/***************************************************************************** xvid plugin system -- external the application passes xvid an array of "xvid_plugin_t" at XVID_ENC_CREATE. the array indicates the plugin function pointer and plugin-specific data. xvidcore handles the rest. example: xvid_enc_create_t create; xvid_enc_plugin_t plugins[2]; plugins[0].func = xvid_psnr_func; plugins[0].param = NULL; plugins[1].func = xvid_cbr_func; plugins[1].param = &cbr_data; create.num_plugins = 2; create.plugins = plugins; ****************************************************************************/typedef int (xvid_plugin_func)(void * handle, int opt, void * param1, void * param2);typedef struct{ xvid_plugin_func * func; void * param;} xvid_enc_plugin_t;xvid_plugin_func xvid_plugin_single; /* single-pass rate control */xvid_plugin_func xvid_plugin_2pass1; /* two-pass rate control: first pass */xvid_plugin_func xvid_plugin_2pass2; /* two-pass rate control: second pass */xvid_plugin_func xvid_plugin_lumimasking; /* lumimasking */xvid_plugin_func xvid_plugin_psnr; /* write psnr values to stdout */xvid_plugin_func xvid_plugin_dump; /* dump before and after yuvpgms *//* single pass rate control * CBR and Constant quantizer modes */typedef struct{ int version; int bitrate; /* [in] bits per second */ int reaction_delay_factor; /* [in] */ int averaging_period; /* [in] */ int buffer; /* [in] */} xvid_plugin_single_t;typedef struct { int version; char * filename;} xvid_plugin_2pass1_t;#define XVID_PAYBACK_BIAS 0 /* payback with bias */#define XVID_PAYBACK_PROP 1 /* payback proportionally */typedef struct { int version; int bitrate; /* [in] bits per second */ char * filename; /* [in] first pass stats filename */ int keyframe_boost; /* [in] keyframe boost percentage: [0..100] */ int curve_compression_high; /* [in] percentage of compression performed on the high part of the curve (above average) */ int curve_compression_low; /* [in] percentage of compression performed on the low part of the curve (below average) */ int overflow_control_strength;/* [in] Payback delay expressed in number of frames */ int max_overflow_improvement; /* [in] percentage of allowed range for a frame that gets bigger because of overflow bonus */ int max_overflow_degradation; /* [in] percentage of allowed range for a frame that gets smaller because of overflow penalty */ int kfreduction; /* [in] maximum bitrate reduction applied to an iframe under the kfthreshold distance limit */ int kfthreshold; /* [in] if an iframe is closer to the next iframe than this distance, a quantity of bits * is substracted from its bit allocation. The reduction is computed as multiples of * kfreduction/kthreshold. It reaches kfreduction when the distance == kfthreshold, * 0 for 1<distance<kfthreshold */ int container_frame_overhead; /* [in] How many bytes the controller has to compensate per frame due to container format overhead */} xvid_plugin_2pass2_t;#ifdef __cplusplus}#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -