1 2 /*! 3 *************************************************************************** 4 * \file 5 * rc_types.h 6 * 7 * \author 8 * Zhengguo LI 9 * Athanasios Leontaris 10 * 11 * \date 12 * 14 Jan 2003 13 * 27 Apr 2009 14 * 15 * \brief 16 * Headerfile for basic rate control structures 17 ************************************************************************** 18 */ 19 20 #ifndef _RC_TYPES_H_ 21 #define _RC_TYPES_H_ 22 23 #define RC_MODEL_HISTORY 21 24 25 /* generic rate control variables */ 26 typedef struct rc_generic 27 { 28 // RC flags 29 int TopFieldFlag; 30 int FieldControl; 31 int FieldFrame; 32 int NoGranularFieldRC; 33 // bits stats 34 int NumberofHeaderBits; 35 int NumberofTextureBits; 36 int NumberofBasicUnitHeaderBits; 37 int NumberofBasicUnitTextureBits; 38 // frame stats 39 int NumberofGOP; 40 int NumberofCodedBFrame; 41 // MAD stats 42 int64 TotalMADBasicUnit; 43 int *MADofMB; 44 // buffer and budget 45 int64 CurrentBufferFullness; //LIZG 25/10/2002 46 int64 RemainingBits; 47 // bit allocations for RC_MODE_3 48 int RCPSliceBits; 49 int RCISliceBits; 50 int RCBSliceBits[RC_MAX_TEMPORAL_LEVELS]; 51 int temporal_levels; 52 int hierNb[RC_MAX_TEMPORAL_LEVELS]; 53 int NPSlice; 54 int NISlice; 55 } RCGeneric; 56 57 typedef struct rc_quadratic 58 { 59 float bit_rate; 60 float frame_rate; 61 float PrevBitRate; //LIZG 25/10/2002 62 double GAMMAP; //LIZG, JVT019r1 63 double BETAP; //LIZG, JVT019r1 64 double GOPTargetBufferLevel; 65 double TargetBufferLevel; //LIZG 25/10/2002 66 double AveWp; 67 double AveWb; 68 int MyInitialQp; 69 int PAverageQp; 70 double PreviousPictureMAD; 71 double MADPictureC1; 72 double MADPictureC2; 73 double PMADPictureC1; 74 double PMADPictureC2; 75 double PPictureMAD [RC_MODEL_HISTORY]; 76 double PictureMAD [RC_MODEL_HISTORY]; 77 double ReferenceMAD[RC_MODEL_HISTORY]; 78 double m_rgQp [RC_MODEL_HISTORY]; 79 double m_rgRp [RC_MODEL_HISTORY]; 80 double Pm_rgQp [RC_MODEL_HISTORY]; 81 double Pm_rgRp [RC_MODEL_HISTORY]; 82 83 double m_X1; 84 double m_X2; 85 double Pm_X1; 86 double Pm_X2; 87 int Pm_Qp; 88 int Pm_Hp; 89 90 int MADm_windowSize; 91 int m_windowSize; 92 int m_Qc; 93 94 int PPreHeader; 95 int PrevLastQP; // QP of the second-to-last coded frame in the primary layer 96 int CurrLastQP; // QP of the last coded frame in the primary layer 97 int NumberofBFrames; 98 // basic unit layer rate control 99 int TotalFrameQP; 100 int NumberofBasicUnit; 101 int PAveHeaderBits1; 102 int PAveHeaderBits2; 103 int PAveHeaderBits3; 104 int PAveFrameQP; 105 int TotalNumberofBasicUnit; 106 int CodedBasicUnit; 107 108 int NumberofCodedPFrame; 109 int TotalQpforPPicture; 110 int NumberofPPicture; 111 112 double CurrentFrameMAD; 113 double CurrentBUMAD; 114 double TotalBUMAD; 115 double PreviousFrameMAD; 116 double PreviousWholeFrameMAD; 117 118 int DDquant; 119 unsigned int MBPerRow; 120 int QPLastPFrame; 121 int QPLastGOP; 122 123 // adaptive field/frame coding 124 int FieldQPBuffer; 125 int FrameQPBuffer; 126 int FrameAveHeaderBits; 127 int FieldAveHeaderBits; 128 double *BUPFMAD; 129 double *BUCFMAD; 130 double *FCBUCFMAD; 131 double *FCBUPFMAD; 132 133 Boolean GOPOverdue; 134 int64 Pprev_bits; 135 136 // rate control variables 137 int Xp, Xb; 138 int Target; 139 int TargetField; 140 int Np, Nb, bits_topfield; 141 // HRD consideration 142 int UpperBound1, UpperBound2, LowerBound; 143 double Wp, Wb; // complexity weights 144 double DeltaP; 145 int TotalPFrame; 146 int PMaxQpChange; 147 148 int bitdepth_qp_scale; // support negative QPs (bitdepth > 8-bits per component) 149 150 // simple encoder buffer simulation 151 int enc_buf_curr; 152 153 } RCQuadratic; 154 155 #endif 156 157