--- encoder.h 2003/03/15 14:32:56 1.27.2.3 +++ encoder.h 2003/05/03 23:24:25 1.27.4.1 @@ -36,7 +36,7 @@ * support for EXTENDED API * - 22.08.2001 fixed bug in iDQtab * - * $Id: encoder.h,v 1.27.2.3 2003/03/15 14:32:56 suxen_drol Exp $ + * $Id: encoder.h,v 1.27.4.1 2003/05/03 23:24:25 Isibaar Exp $ * ****************************************************************************/ @@ -65,13 +65,21 @@ typedef int bool; +typedef enum +{ + I_VOP = 0, + P_VOP = 1, + B_VOP = 2, + S_VOP = 3 +} +VOP_TYPE; + /***************************************************************************** * Structures ****************************************************************************/ typedef struct { - /* --- constants --- */ uint32_t width; uint32_t height; @@ -80,35 +88,32 @@ uint32_t mb_width; uint32_t mb_height; - int plugin_flags; - /* frame rate increment & base */ uint32_t fincr; uint32_t fbase; - xvid_global_t global_flags; + /* constants */ + int global; int bquant_ratio; int bquant_offset; int frame_drop_ratio; -#ifdef _SMP - int num_threads; -#endif - - int iMaxKeyInterval; int max_bframes; -/* --- inbetween vop stuff --- */ /* rounding type; alternate 0-1 after each interframe */ /* 1 <= fixed_code <= 4 automatically adjusted using motion vector statistics inside */ /* vars that not "quite" frame independant */ + uint32_t m_quant_type; uint32_t m_rounding_type; uint32_t m_fcode; - xvid_vol_t vol_flags; + uint32_t m_quarterpel; + int m_reduced_resolution; /* reduced_resolution_enable */ + + HINTINFO *hint; int64_t m_stamp; } @@ -124,30 +129,21 @@ int mblks; int ublks; int gblks; + int iblks; + int qblks; } Statistics; -/* encoding queue */ -typedef struct -{ - xvid_enc_frame_t frame; - unsigned char quant_intra_matrix[64]; - unsigned char quant_inter_matrix[64]; - IMAGE image; -} QUEUEINFO; - - typedef struct { - int frame_num; - xvid_vol_t vol_flags; - xvid_vop_t vop_flags; - xvid_motion_t motion_flags; - - int coding_type; uint32_t quant; + uint32_t motion_flags; + uint32_t global_flags; + + VOP_TYPE coding_type; uint32_t rounding_type; + uint32_t quarterpel; uint32_t fcode; uint32_t bcode; @@ -161,8 +157,6 @@ WARPPOINTS warp; // as in bitstream GMC_DATA gmc_data; // common data for all MBs - - int length; /* the encoded size of this frame */ Statistics sStat; } @@ -176,21 +170,12 @@ int iFrameNum; int bitrate; - // plugins - int num_plugins; /* note: we store plugin flags in MBPARAM */ - xvid_enc_plugin_t * plugins; - - // dquant - - int * temp_dquants; - // images FRAMEINFO *current; FRAMEINFO *reference; - IMAGE sOriginal; /* original image copy for i/p frames */ - IMAGE sOriginal2; /* original image copy for b-frames */ + IMAGE sOriginal; IMAGE vInterH; IMAGE vInterV; IMAGE vInterVf; @@ -203,7 +188,7 @@ int queue_head; int queue_tail; int queue_size; - QUEUEINFO *queue; + IMAGE *queue; /* bframe buffer */ int bframenum_head; @@ -214,10 +199,7 @@ IMAGE f_refh; IMAGE f_refv; IMAGE f_refhv; - - /* closed_gop fixup temporary storage */ - int closed_bframenum; /* == -1 if there is no fixup intended */ - QUEUEINFO closed_qframe; /* qFrame, only valid when >= 0 */ + int bframenum_dx50bvop; int m_framenum; /* debug frame num counter; unlike iFrameNum, does not reset at ivop */ @@ -266,10 +248,14 @@ void init_encoder(uint32_t cpu_flags); -int enc_create(xvid_enc_create_t * create, xvid_enc_rc_t * rc); -int enc_destroy(Encoder * pEnc); -int enc_encode(Encoder * pEnc, - xvid_enc_frame_t * pFrame, - xvid_enc_stats_t * stats); +int encoder_create(XVID_ENC_PARAM * pParam); +int encoder_destroy(Encoder * pEnc); +int encoder_encode(Encoder * pEnc, + XVID_ENC_FRAME * pFrame, + XVID_ENC_STATS * pResult); + +int encoder_encode_bframes(Encoder * pEnc, + XVID_ENC_FRAME * pFrame, + XVID_ENC_STATS * pResult); #endif