--- encoder.h 2002/05/01 13:00:01 1.6 +++ encoder.h 2002/06/12 20:38:40 1.9 @@ -19,7 +19,7 @@ #include "portab.h" #include "global.h" #include "image/image.h" - +#include "utils/ratecontrol.h" #define H263_QUANT 0 #define MPEG4_QUANT 1 @@ -30,8 +30,8 @@ typedef enum { - I_VOP = 0, - P_VOP = 1, + I_VOP = 0, + P_VOP = 1, B_VOP = 2 } VOP_TYPE; @@ -40,12 +40,12 @@ Encoding Parameters -************************************/ +************************************/ typedef struct { - uint32_t width; - uint32_t height; + uint32_t width; + uint32_t height; uint32_t edged_width; uint32_t edged_height; @@ -56,7 +56,11 @@ uint32_t fincr; uint32_t fbase; - /* rounding type; alternate 0-1 after each interframe */ +#ifdef BFRAMES + int max_bframes; +#endif + + /* rounding type; alternate 0-1 after each interframe */ /* 1 <= fixed_code <= 4 automatically adjusted using motion vector statistics inside */ @@ -66,25 +70,26 @@ uint32_t m_rounding_type; uint32_t m_fcode; - HINTINFO * hint; + HINTINFO *hint; #ifdef BFRAMES uint32_t m_seconds; uint32_t m_ticks; #endif -} MBParam; +} +MBParam; typedef struct { - uint32_t quant; - uint32_t motion_flags; + uint32_t quant; + uint32_t motion_flags; uint32_t global_flags; VOP_TYPE coding_type; - uint32_t rounding_type; - uint32_t fcode; + uint32_t rounding_type; + uint32_t fcode; uint32_t bcode; #ifdef BFRAMES @@ -94,16 +99,17 @@ IMAGE image; - MACROBLOCK * mbs; + MACROBLOCK *mbs; -} FRAMEINFO; +} +FRAMEINFO; typedef struct { - int iTextBits; - float fMvPrevSigma; - int iMvSum; - int iMvCount; + int iTextBits; + float fMvPrevSigma; + int iMvSum; + int iMvCount; int kblks; int mblks; int ublks; @@ -114,41 +120,41 @@ typedef struct { - MBParam mbParam; + MBParam mbParam; - int iFrameNum; - int iMaxKeyInterval; + int iFrameNum; + int iMaxKeyInterval; int bitrate; // images - FRAMEINFO * current; - FRAMEINFO * reference; + FRAMEINFO *current; + FRAMEINFO *reference; #ifdef _DEBUG IMAGE sOriginal; #endif - IMAGE vInterH; - IMAGE vInterV; + IMAGE vInterH; + IMAGE vInterV; IMAGE vInterVf; - IMAGE vInterHV; + IMAGE vInterHV; IMAGE vInterHVf; #ifdef BFRAMES /* constants */ - int max_bframes; int bquant_ratio; /* vars */ int bframenum_head; int bframenum_tail; int flush_bframes; - FRAMEINFO ** bframes; - IMAGE f_refh; - IMAGE f_refv; - IMAGE f_refhv; + FRAMEINFO **bframes; + IMAGE f_refh; + IMAGE f_refv; + IMAGE f_refhv; #endif - Statistics sStat; + Statistics sStat; + RateControl rate_control; } Encoder; @@ -160,33 +166,36 @@ 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); - -static __inline uint8_t get_fcode(uint16_t sr) +int encoder_encode(Encoder * pEnc, + XVID_ENC_FRAME * pFrame, + XVID_ENC_STATS * pResult); + +static __inline uint8_t +get_fcode(uint16_t sr) { - if (sr <= 16) + if (sr <= 16) return 1; - else if (sr <= 32) + else if (sr <= 32) return 2; - else if (sr <= 64) + else if (sr <= 64) return 3; - else if (sr <= 128) + else if (sr <= 128) return 4; - else if (sr <= 256) + else if (sr <= 256) return 5; - else if (sr <= 512) + else if (sr <= 512) return 6; - else if (sr <= 1024) + else if (sr <= 1024) return 7; - else + else return 0; } -#endif /* _ENCODER_H_ */ +#endif /* _ENCODER_H_ */