--- encoder.h 2002/05/06 10:07:19 1.7 +++ 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; @@ -60,7 +60,7 @@ int max_bframes; #endif - /* rounding type; alternate 0-1 after each interframe */ + /* rounding type; alternate 0-1 after each interframe */ /* 1 <= fixed_code <= 4 automatically adjusted using motion vector statistics inside */ @@ -70,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 @@ -98,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; @@ -118,24 +120,24 @@ 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 @@ -146,12 +148,13 @@ 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; @@ -163,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_ */