Changeset 540 in SHVCSoftware for trunk/source/Lib/TLibEncoder/TEncRateCtrl.h


Ignore:
Timestamp:
9 Jan 2014, 05:04:17 (11 years ago)
Author:
seregin
Message:

merge SHM-4.1-dev branch

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/source

  • trunk/source/Lib/TLibEncoder/TEncRateCtrl.h

    r313 r540  
    5555//! \{
    5656
    57 #if RATE_CONTROL_LAMBDA_DOMAIN
    5857#include "../TLibEncoder/TEncCfg.h"
    5958#include <list>
     
    6564const Double g_RCWeightPicTargetBitInGOP    = 0.9;
    6665const Double g_RCWeightPicRargetBitInBuffer = 1.0 - g_RCWeightPicTargetBitInGOP;
    67 #if M0036_RC_IMPROVEMENT
    6866const Int g_RCIterationNum = 20;
    6967const Double g_RCWeightHistoryLambda = 0.5;
     
    7472const Double g_RCBetaMinValue  = -3.0;
    7573const Double g_RCBetaMaxValue  = -0.1;
    76 #endif
    77 
    78 #if RATE_CONTROL_INTRA
     74
    7975#define ALPHA     6.7542;
    8076#define BETA1     1.2517
    8177#define BETA2     1.7860
    82 #endif
    8378
    8479struct TRCLCU
     
    8883  Int m_targetBits;
    8984  Double m_lambda;
    90 #if M0036_RC_IMPROVEMENT
    9185  Double m_bitWeight;
    92 #else
    93   Double m_MAD;
    94 #endif
    9586  Int m_numberOfPixel;
    96 #if RATE_CONTROL_INTRA
    9787  Double m_costIntra;
    9888  Int m_targetBitsLeft;
    99 #endif
    10089};
    10190
     
    113102
    114103public:
    115 #if M0036_RC_IMPROVEMENT
    116104  Void create( Int totalFrames, Int targetBitrate, Int frameRate, Int GOPSize, Int picWidth, Int picHeight, Int LCUWidth, Int LCUHeight, Int numberOfLevel, Bool useLCUSeparateModel, Int adaptiveBit );
    117 #else
    118   Void create( Int totalFrames, Int targetBitrate, Int frameRate, Int GOPSize, Int picWidth, Int picHeight, Int LCUWidth, Int LCUHeight, Int numberOfLevel, Bool useLCUSeparateModel );
    119 #endif
    120105  Void destroy();
    121106  Void initBitsRatio( Int bitsRatio[] );
     
    124109  Void initLCUPara( TRCParameter** LCUPara = NULL );    // NULL to initial with default value
    125110  Void updateAfterPic ( Int bits );
    126 #if !RATE_CONTROL_INTRA
    127   Int  getRefineBitsForIntra( Int orgBits );
    128 #endif
    129 #if M0036_RC_IMPROVEMENT
    130111  Void setAllBitRatio( Double basicLambda, Double* equaCoeffA, Double* equaCoeffB );
    131 #endif
    132112
    133113public:
     
    167147  Double getBetaUpdate()                { return m_betaUpdate; }
    168148
    169 #if M0036_RC_IMPROVEMENT
    170149  Int    getAdaptiveBits()              { return m_adaptiveBit;  }
    171150  Double getLastLambda()                { return m_lastLambda;   }
    172151  Void   setLastLambda( Double lamdba ) { m_lastLambda = lamdba; }
    173 #endif
    174152
    175153private:
     
    200178  Bool m_useLCUSeparateModel;
    201179
    202 #if M0036_RC_IMPROVEMENT
    203180  Int m_adaptiveBit;
    204181  Double m_lastLambda;
    205 #endif
    206182};
    207183
     
    219195private:
    220196  Int  xEstGOPTargetBits( TEncRCSeq* encRCSeq, Int GOPSize );
    221 #if M0036_RC_IMPROVEMENT
    222197  Void   xCalEquaCoeff( TEncRCSeq* encRCSeq, Double* lambdaRatio, Double* equaCoeffA, Double* equaCoeffB, Int GOPSize );
    223198  Double xSolveEqua( Double targetBpp, Double* equaCoeffA, Double* equaCoeffB, Int GOPSize );
    224 #endif
    225199
    226200public:
     
    251225  Void destroy();
    252226
    253 #if !RATE_CONTROL_INTRA
    254   Double estimatePicLambda( list<TEncRCPic*>& listPreviousPictures );
    255 #endif
    256227  Int    estimatePicQP    ( Double lambda, list<TEncRCPic*>& listPreviousPictures );
    257 #if RATE_CONTROL_INTRA
    258228  Int    getRefineBitsForIntra(Int orgBits);
    259229  Double calculateLambdaIntra(double alpha, double beta, double MADPerPixel, double bitsPerPixel);
     
    264234  Double getLCUTargetBpp(SliceType eSliceType);
    265235  Double getLCUEstLambdaAndQP(Double bpp, Int clipPicQP, Int *estQP);
    266 #else
    267   Double getLCUTargetBpp();
    268 #endif
    269236  Double getLCUEstLambda( Double bpp );
    270237  Int    getLCUEstQP( Double lambda, Int clipPicQP );
    271238
    272239  Void updateAfterLCU( Int LCUIdx, Int bits, Int QP, Double lambda, Bool updateLCUParameter = true );
    273 #if M0036_RC_IMPROVEMENT
    274 #if RATE_CONTROL_INTRA
    275240  Void updateAfterPicture( Int actualHeaderBits, Int actualTotalBits, Double averageQP, Double averageLambda, SliceType eSliceType);
    276 #else
    277   Void updateAfterPicture( Int actualHeaderBits, Int actualTotalBits, Double averageQP, Double averageLambda );
    278 #endif
    279 #else
    280   Void updateAfterPicture( Int actualHeaderBits, Int actualTotalBits, Double averageQP, Double averageLambda, Double effectivePercentage );
    281 #endif
    282241
    283242  Void addToPictureLsit( list<TEncRCPic*>& listPreviousPictures );
    284 #if !M0036_RC_IMPROVEMENT
    285   Double getEffectivePercentage();
    286 #endif
    287243  Double calAverageQP();
    288244  Double calAverageLambda();
     
    300256  Int  getNumberOfLCU()                                   { return m_numberOfLCU; }
    301257  Int  getTargetBits()                                    { return m_targetBits; }
    302 #if !RATE_CONTROL_INTRA
    303   Void setTargetBits( Int bits )                          { m_targetBits = bits; }
    304 #endif
    305258  Int  getEstHeaderBits()                                 { return m_estHeaderBits; }
    306259  Int  getLCULeft()                                       { return m_LCULeft; }
     
    312265  TRCLCU& getLCU( Int LCUIdx )                            { return m_LCUs[LCUIdx]; }
    313266  Int  getPicActualHeaderBits()                           { return m_picActualHeaderBits; }
    314 #if !M0036_RC_IMPROVEMENT
    315   Double getTotalMAD()                                    { return m_totalMAD; }
    316   Void   setTotalMAD( Double MAD )                        { m_totalMAD = MAD; }
    317 #endif
    318 #if RATE_CONTROL_INTRA
    319267  Void setTargetBits( Int bits )                          { m_targetBits = bits; m_bitsLeft = bits;}
    320268  Void setTotalIntraCost(Double cost)                     { m_totalCostIntra = cost; }
    321269  Void getLCUInitTargetBits();
    322 #endif
    323270
    324271  Int  getPicActualBits()                                 { return m_picActualBits; }
     
    348295  TRCLCU* m_LCUs;
    349296  Int m_picActualHeaderBits;    // only SH and potential APS
    350 #if !M0036_RC_IMPROVEMENT
    351   Double m_totalMAD;
    352 #endif
    353 #if RATE_CONTROL_INTRA
    354297  Double m_totalCostIntra;
    355298  Double m_remainingCostIntra;
    356 #endif
    357299  Int m_picActualBits;          // the whole picture, including header
    358300  Int m_picQP;                  // in integer form
    359301  Double m_picLambda;
    360 #if !M0036_RC_IMPROVEMENT
    361   TEncRCPic* m_lastPicture;
    362 #endif
    363302};
    364303
     
    370309
    371310public:
    372 #if M0036_RC_IMPROVEMENT
    373311  Void init( Int totalFrames, Int targetBitrate, Int frameRate, Int GOPSize, Int picWidth, Int picHeight, Int LCUWidth, Int LCUHeight, Int keepHierBits, Bool useLCUSeparateModel, GOPEntry GOPList[MAX_GOP] );
    374 #else
    375   Void init( Int totalFrames, Int targetBitrate, Int frameRate, Int GOPSize, Int picWidth, Int picHeight, Int LCUWidth, Int LCUHeight, Bool keepHierBits, Bool useLCUSeparateModel, GOPEntry GOPList[MAX_GOP] );
    376 #endif
    377312  Void destroy();
    378313  Void initRCPic( Int frameLevel );
     
    396331};
    397332
    398 #else
    399 
    400 // ====================================================================================================================
    401 // Class definition
    402 // ====================================================================================================================
    403 #define MAX_DELTA_QP    2
    404 #define MAX_CUDQP_DEPTH 0
    405 
    406 typedef struct FrameData
    407 {
    408   Bool       m_isReferenced;
    409   Int        m_qp;
    410   Int        m_bits;
    411   Double     m_costMAD;
    412 }FrameData;
    413 
    414 typedef struct LCUData
    415 {
    416   Int     m_qp;                ///<  coded QP
    417   Int     m_bits;              ///<  actually generated bits
    418   Int     m_pixels;            ///<  number of pixels for a unit
    419   Int     m_widthInPixel;      ///<  number of pixels for width
    420   Int     m_heightInPixel;     ///<  number of pixels for height
    421   Double  m_costMAD;           ///<  texture complexity for a unit
    422 }LCUData;
    423 
    424 class MADLinearModel
    425 {
    426 private:
    427   Bool   m_activeOn;
    428   Double m_paramY1;
    429   Double m_paramY2;
    430   Double m_costMADs[3];
    431 
    432 public:
    433   MADLinearModel ()   {};
    434   ~MADLinearModel()   {};
    435  
    436   Void    initMADLinearModel      ();
    437   Double  getMAD                  ();
    438   Void    updateMADLiearModel     ();
    439   Void    updateMADHistory        (Double costMAD);
    440   Bool    IsUpdateAvailable       ()              { return m_activeOn; }
    441 };
    442 
    443 class PixelBaseURQQuadraticModel
    444 {
    445 private:
    446   Double m_paramHighX1;
    447   Double m_paramHighX2;
    448   Double m_paramLowX1;
    449   Double m_paramLowX2;
    450 public:
    451   PixelBaseURQQuadraticModel () {};
    452   ~PixelBaseURQQuadraticModel() {};
    453 
    454   Void    initPixelBaseQuadraticModel       ();
    455   Int     getQP                             (Int qp, Int targetBits, Int numberOfPixels, Double costPredMAD);
    456   Void    updatePixelBasedURQQuadraticModel (Int qp, Int bits, Int numberOfPixels, Double costMAD);
    457   Bool    checkUpdateAvailable              (Int qpReference );
    458   Double  xConvertQP2QStep                  (Int qp );
    459   Int     xConvertQStep2QP                  (Double qStep );
    460 };
    461 
    462 class TEncRateCtrl
    463 {
    464 private:
    465   Bool            m_isLowdelay;
    466   Int             m_prevBitrate;
    467   Int             m_currBitrate;
    468   Int             m_frameRate;
    469   Int             m_refFrameNum;
    470   Int             m_nonRefFrameNum;
    471   Int             m_numOfPixels;
    472   Int             m_sourceWidthInLCU;
    473   Int             m_sourceHeightInLCU;     
    474   Int             m_sizeGOP;
    475   Int             m_indexGOP;
    476   Int             m_indexFrame;
    477   Int             m_indexLCU;
    478   Int             m_indexUnit;
    479   Int             m_indexRefFrame;
    480   Int             m_indexNonRefFrame;
    481   Int             m_indexPOCInGOP;
    482   Int             m_indexPrevPOCInGOP;
    483   Int             m_occupancyVB;
    484   Int             m_initialOVB;
    485   Int             m_targetBufLevel;
    486   Int             m_initialTBL;
    487   Int             m_remainingBitsInGOP;
    488   Int             m_remainingBitsInFrame;
    489   Int             m_occupancyVBInFrame;
    490   Int             m_targetBits;
    491   Int             m_numUnitInFrame;
    492   Int             m_codedPixels;
    493   Bool            m_activeUnitLevelOn;
    494   Double          m_costNonRefAvgWeighting;
    495   Double          m_costRefAvgWeighting;
    496   Double          m_costAvgbpp;         
    497  
    498   FrameData*      m_pcFrameData;
    499   LCUData*        m_pcLCUData;
    500 
    501   MADLinearModel              m_cMADLinearModel;
    502   PixelBaseURQQuadraticModel  m_cPixelURQQuadraticModel;
    503  
    504 public:
    505   TEncRateCtrl         () {};
    506   virtual ~TEncRateCtrl() {};
    507 
    508   Void          create                (Int sizeIntraPeriod, Int sizeGOP, Int frameRate, Int targetKbps, Int qp, Int numLCUInBasicUnit, Int sourceWidth, Int sourceHeight, Int maxCUWidth, Int maxCUHeight);
    509   Void          destroy               ();
    510 
    511   Void          initFrameData         (Int qp = 0);
    512   Void          initUnitData          (Int qp = 0);
    513   Int           getFrameQP            (Bool isReferenced, Int POC);
    514   Bool          calculateUnitQP       ();
    515   Int           getUnitQP             ()                                          { return m_pcLCUData[m_indexLCU].m_qp;  }
    516   Void          updateRCGOPStatus     ();
    517   Void          updataRCFrameStatus   (Int frameBits, SliceType eSliceType);
    518   Void          updataRCUnitStatus    ();
    519   Void          updateLCUData         (TComDataCU* pcCU, UInt64 actualLCUBits, Int qp);
    520   Void          updateFrameData       (UInt64 actualFrameBits);
    521   Double        xAdjustmentBits       (Int& reductionBits, Int& compensationBits);
    522   Int           getGOPId              ()                                          { return m_indexFrame; }
    523 };
    524333#endif
    525334
    526 #endif
    527 
    528 
     335
Note: See TracChangeset for help on using the changeset viewer.