rc_quadratic.h
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:6k
源码类别:

Audio

开发平台:

Visual C++

  1. /*!
  2.  ***************************************************************************
  3.  * file
  4.  *    rc_quadratic.h
  5.  *
  6.  * author
  7.  *    Zhengguo LI
  8.  *    Athanasios Leontaris
  9.  *
  10.  * date
  11.  *    14 Jan 2003
  12.  *
  13.  * brief
  14.  *    Headerfile for rate control
  15.  **************************************************************************
  16.  */
  17. #ifndef _RC_QUADRATIC_H_
  18. #define _RC_QUADRATIC_H_
  19. #define RC_MODEL_HISTORY 21
  20. typedef struct
  21. {
  22.   float  bit_rate;
  23.   float  frame_rate;
  24.   float  PrevBitRate;           //LIZG  25/10/2002
  25.   double GAMMAP;                //LIZG, JVT019r1
  26.   double BETAP;                 //LIZG, JVT019r1
  27.   double GOPTargetBufferLevel;
  28.   double TargetBufferLevel;     //LIZG 25/10/2002
  29.   double AveWp;
  30.   double AveWb;
  31.   int    MyInitialQp;
  32.   int    PAverageQp;
  33.   /*LIZG JVT50V2 distortion prediction model*/
  34.   /*coefficients of the prediction model*/
  35.   double PreviousPictureMAD;
  36.   double MADPictureC1;
  37.   double MADPictureC2;
  38.   double PMADPictureC1;
  39.   double PMADPictureC2;
  40.   /* LIZG JVT50V2 picture layer MAD */
  41.   double PPictureMAD [RC_MODEL_HISTORY];
  42.   double PictureMAD  [RC_MODEL_HISTORY];
  43.   double ReferenceMAD[RC_MODEL_HISTORY];
  44.   double m_rgQp      [RC_MODEL_HISTORY];
  45.   double m_rgRp      [RC_MODEL_HISTORY];
  46.   double Pm_rgQp     [RC_MODEL_HISTORY];
  47.   double Pm_rgRp     [RC_MODEL_HISTORY];
  48.   double m_X1;
  49.   double m_X2;
  50.   double Pm_X1;
  51.   double Pm_X2;
  52.   int    Pm_Qp;
  53.   int    Pm_Hp;
  54.   int    MADm_windowSize;
  55.   int    m_windowSize;
  56.   int    m_Qc;
  57.   int    PPreHeader;
  58.   int    PrevLastQP; // QP of the second-to-last coded frame in the primary layer
  59.   int    CurrLastQP; // QP of the last coded frame in the primary layer
  60.   int    NumberofBFrames;
  61.   /*basic unit layer rate control*/
  62.   int    TotalFrameQP;
  63.   int    NumberofBasicUnit;
  64.   int    PAveHeaderBits1;
  65.   int    PAveHeaderBits2;
  66.   int    PAveHeaderBits3;
  67.   int    PAveFrameQP;
  68.   int    TotalNumberofBasicUnit;
  69.   int    CodedBasicUnit;
  70.   int    NumberofCodedPFrame;  
  71.   int    TotalQpforPPicture;
  72.   int    NumberofPPicture;
  73.   double CurrentFrameMAD;
  74.   double CurrentBUMAD;
  75.   double TotalBUMAD;
  76.   double PreviousFrameMAD;
  77.   double PreviousWholeFrameMAD;
  78.   int    DDquant;
  79.   unsigned int    MBPerRow;
  80.   int    QPLastPFrame;
  81.   int    QPLastGOP;
  82.   /* adaptive field/frame coding*/
  83.   int    FieldQPBuffer;
  84.   int    FrameQPBuffer;
  85.   int    FrameAveHeaderBits;
  86.   int    FieldAveHeaderBits;
  87.   double *BUPFMAD;
  88.   double *BUCFMAD;
  89.   double *FCBUCFMAD;
  90.   double *FCBUPFMAD;
  91.   Boolean GOPOverdue;
  92.   int64   Pprev_bits;
  93.   /* rate control variables */
  94.   int    Xp, Xb;
  95.   int    Target;
  96.   int    TargetField;
  97.   int    Np, Nb, bits_topfield;
  98.   //HRD consideration
  99.   int    UpperBound1, UpperBound2, LowerBound;
  100.   double Wp, Wb; // complexity weights
  101.   double DeltaP;
  102.   int    TotalPFrame;
  103.   int    PMaxQpChange;
  104. } rc_quadratic;
  105. // rate control functions
  106. // init/copy
  107. void rc_alloc_quadratic( rc_quadratic **prc );
  108. void rc_free_quadratic ( rc_quadratic **prc );
  109. void rc_copy_quadratic ( rc_quadratic *dst, rc_quadratic *src );
  110. // rate control (externally visible)
  111. void rc_init_seq          (rc_quadratic *prc);
  112. void rc_init_GOP          (rc_quadratic *prc, int np, int nb);
  113. void rc_update_pict_frame (rc_quadratic *prc, int nbits);
  114. void rc_init_pict         (rc_quadratic *prc, int fieldpic, int topfield, int targetcomputation, float mult);
  115. void rc_update_pict       (rc_quadratic *prc, int nbits);
  116. void rc_update_picture    (int bits);
  117. int  updateQPRC0(rc_quadratic *prc, int topfield);
  118. int  updateQPRC1(rc_quadratic *prc, int topfield);
  119. int  updateQPRC2(rc_quadratic *prc, int topfield);
  120. int  updateQPRC3(rc_quadratic *prc, int topfield);
  121. // internal functions
  122. void updateQPInterlace   ( rc_quadratic *prc );
  123. void updateQPNonPicAFF   ( rc_quadratic *prc );
  124. void updateBottomField   ( rc_quadratic *prc );
  125. int  updateFirstP        ( rc_quadratic *prc, int topfield );
  126. int  updateNegativeTarget( rc_quadratic *prc, int topfield, int m_Qp );
  127. int  updateFirstBU       ( rc_quadratic *prc, int topfield );
  128. void updateLastBU        ( rc_quadratic *prc, int topfield );
  129. void predictCurrPicMAD   ( rc_quadratic *prc );
  130. void updateModelQPBU     ( rc_quadratic *prc, int topfield, int m_Qp );
  131. void updateQPInterlaceBU ( rc_quadratic *prc );
  132. void updateModelQPFrame  ( rc_quadratic *prc, int m_Bits );
  133. void updateRCModel    (rc_quadratic *prc);
  134. void updateMADModel   (rc_quadratic *prc);
  135. void RCModelEstimator (rc_quadratic *prc, int n_windowSize, Boolean *m_rgRejected);
  136. void MADModelEstimator(rc_quadratic *prc, int n_windowSize, Boolean *PictureRejected);
  137. int  updateComplexity (rc_quadratic *prc, Boolean is_updated, int nbits );
  138. void updatePparams    (rc_quadratic *prc, int complexity );
  139. void updateBparams    (rc_quadratic *prc, int complexity );
  140. // external generic functions
  141. int  rc_handle_mb         ( int prev_mb, Macroblock *currMB, Slice *curr_slice );
  142. void rc_init_top_field    ( void );
  143. void rc_init_bottom_field ( int TopFieldBits );
  144. void rc_init_frame_rdpic  ( float rateRatio );
  145. void rc_allocate_memory   ( void );
  146. void rc_free_memory       ( void );
  147. void rc_update_mb_stats   ( Macroblock *currMB, int *bitCount );
  148. void rc_save_state        ( void );
  149. void rc_restore_state     ( void );
  150. // rate control CURRENT pointers
  151. rc_quadratic *quadratic_RC;
  152. // rate control object pointers for RDPictureDecision buffering...
  153. rc_quadratic *quadratic_RC_init, *quadratic_RC_best;
  154. // generic function pointers
  155. int  (*updateQP)                (rc_quadratic *prc, int topfield);
  156. void (*rc_update_pict_frame_ptr)(rc_quadratic *prc, int nbits);
  157. void (*rc_update_picture_ptr)   (int bits);
  158. void (*rc_init_pict_ptr)        (rc_quadratic *prc, int fieldpic, int topfield, int targetcomputation, float mult);
  159. #endif