xvid.h
来自「gaca源码」· C头文件 代码 · 共 504 行 · 第 1/2 页
H
504 行
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 + =
减小字号Ctrl + -
显示快捷键?