--- encoder.h 2002/03/08 02:44:31 1.1 +++ encoder.h 2002/05/06 10:07:19 1.7 @@ -31,7 +31,8 @@ typedef enum { I_VOP = 0, - P_VOP = 1 + P_VOP = 1, + B_VOP = 2 } VOP_TYPE; @@ -51,22 +52,55 @@ uint32_t mb_width; uint32_t mb_height; - VOP_TYPE coding_type; + /* frame rate increment & base */ + uint32_t fincr; + uint32_t fbase; + +#ifdef BFRAMES + int max_bframes; +#endif /* rounding type; alternate 0-1 after each interframe */ - - uint32_t rounding_type; - /* 1 <= fixed_code <= 4 automatically adjusted using motion vector statistics inside */ - uint32_t fixed_code; + /* vars that not "quite" frame independant */ + uint32_t m_quant_type; + uint32_t m_rounding_type; + uint32_t m_fcode; + + HINTINFO * hint; + +#ifdef BFRAMES + uint32_t m_seconds; + uint32_t m_ticks; +#endif + +} MBParam; + + +typedef struct +{ uint32_t quant; - uint32_t quant_type; uint32_t motion_flags; uint32_t global_flags; -} MBParam; + + VOP_TYPE coding_type; + uint32_t rounding_type; + uint32_t fcode; + uint32_t bcode; + +#ifdef BFRAMES + uint32_t seconds; + uint32_t ticks; +#endif + + IMAGE image; + + MACROBLOCK * mbs; + +} FRAMEINFO; typedef struct { @@ -88,21 +122,35 @@ int iFrameNum; int iMaxKeyInterval; - int lum_masking; int bitrate; // images - IMAGE sCurrent; - IMAGE sReference; + FRAMEINFO * current; + FRAMEINFO * reference; + +#ifdef _DEBUG + IMAGE sOriginal; +#endif IMAGE vInterH; IMAGE vInterV; + IMAGE vInterVf; IMAGE vInterHV; + IMAGE vInterHVf; - // macroblock - - MACROBLOCK * pMBs; - +#ifdef BFRAMES + /* constants */ + int bquant_ratio; + /* vars */ + int bframenum_head; + int bframenum_tail; + int flush_bframes; + + FRAMEINFO ** bframes; + IMAGE f_refh; + IMAGE f_refv; + IMAGE f_refhv; +#endif Statistics sStat; } Encoder;