📄 xvid.h
字号:
int length; /* [in] bitstream length */
xvid_image_t output; /* [in] output image (written to) */
} 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] pixel aspect ratio (refer to XVID_PAR_xxx above) */
int par_width; /* [out] aspect ratio width [1..255] */
int par_height; /* [out] aspect ratio height [1..255] */
} 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_enc_stats_t structure
*
* Used in:
* - xvid_plg_data_t structure
* - optional parameter in xvid_encore() function
*
* .coding_type = XVID_TYPE_NOTHING if the stats are not given
*--------------------------------------------------------------------------*/
typedef struct {
int version;
/* encoding parameters */
int type; /* [out] coding type */
int quant; /* [out] frame quantizer */
int vol_flags; /* [out] vol flags (see above) */
int vop_flags; /* [out] vop flags (see above) */
/* bitrate */
int length; /* [out] frame length */
int hlength; /* [out] header length (bytes) */
int kblks; /* [out] number of blocks compressed as Intra */
int mblks; /* [out] number of blocks compressed as Inter */
int ublks; /* [out] number of blocks marked as not_coded */
int sse_y; /* [out] Y plane's sse */
int sse_u; /* [out] U plane's sse */
int sse_v; /* [out] V plane's sse */
} xvid_enc_stats_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;
typedef struct
{
int version;
xvid_enc_zone_t * zone; /* [out] current zone */
int width; /* [out] */
int height; /* [out] */
int mb_width; /* [out] */
int mb_height; /* [out] */
int fincr; /* [out] */
int fbase; /* [out] */
int min_quant[3]; /* [out] */
int max_quant[3]; /* [out] */
xvid_image_t reference; /* [out] -> [out] */
xvid_image_t current; /* [out] -> [in,out] */
xvid_image_t original; /* [out] after: points the original (uncompressed) copy of the current frame */
int frame_num; /* [out] frame number */
int type; /* [in,out] */
int quant; /* [in,out] */
int * dquant; /* [in,out] pointer to diff quantizer table */
int dquant_stride; /* [in,out] diff quantizer stride */
int vop_flags; /* [in,out] */
int vol_flags; /* [in,out] */
int motion_flags; /* [in,out] */
/* Deprecated, use the stats field instead.
* Will disapear before 1.0 */
int length; /* [out] after: length of encoded frame */
int kblks; /* [out] number of blocks compressed as Intra */
int mblks; /* [out] number of blocks compressed as Inter */
int ublks; /* [out] number of blocks marked not_coded */
int sse_y; /* [out] Y plane's sse */
int sse_u; /* [out] U plane's sse */
int sse_v; /* [out] V plane's sse */
/* End of duplicated data, kept only for binary compatibility */
int bquant_ratio; /* [in] */
int bquant_offset; /* [in] */
xvid_enc_stats_t stats; /* [out] frame statistics */
} xvid_plg_data_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;
extern xvid_plugin_func xvid_plugin_single; /* single-pass rate control */
extern xvid_plugin_func xvid_plugin_2pass1; /* two-pass rate control: first pass */
extern xvid_plugin_func xvid_plugin_2pass2; /* two-pass rate control: second pass */
extern xvid_plugin_func xvid_plugin_lumimasking; /* lumimasking */
extern xvid_plugin_func xvid_plugin_psnr; /* write psnr values to stdout */
extern 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -