--- encoder.h 2002/05/01 13:00:01 1.6 +++ encoder.h 2002/06/07 10:21:48 1.8 @@ -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; @@ -44,8 +44,8 @@ typedef struct { - uint32_t width; - uint32_t height; + uint32_t width; + uint32_t height; uint32_t edged_width; uint32_t edged_height; @@ -56,10 +56,14 @@ 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 - */ + */ /* vars that not "quite" frame independant */ uint32_t m_quant_type; @@ -78,13 +82,13 @@ typedef struct { - uint32_t quant; + 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 @@ -100,10 +104,10 @@ 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,10 +118,10 @@ typedef struct { - MBParam mbParam; + MBParam mbParam; - int iFrameNum; - int iMaxKeyInterval; + int iFrameNum; + int iMaxKeyInterval; int bitrate; // images @@ -128,15 +132,14 @@ #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; @@ -144,11 +147,12 @@ int flush_bframes; FRAMEINFO ** bframes; - IMAGE f_refh; - IMAGE f_refv; - IMAGE f_refhv; + IMAGE f_refh; + IMAGE f_refv; + IMAGE f_refhv; #endif - Statistics sStat; + Statistics sStat; + RateControl rate_control; } Encoder; @@ -164,28 +168,28 @@ 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; }