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