关于HM配置文件的TEncCfg类

在使用HM的过程中,某函数体内经常会有配置文件中的参数传递,涉及到的类就是TEncCfg,详细如下:

class TEncCfg
{
protected:
  //==== File I/O ========
  Int       m_iFrameRate;//帧率
  Int       m_FrameSkip;//跳帧
  Int       m_iSourceWidth;//宽度
  Int       m_iSourceHeight;//高度
  Int       m_conformanceMode;
  Window    m_conformanceWindow;
  Int       m_framesToBeEncoded;//待编码帧数
  Double    m_adLambdaModifier[ MAX_TLAYER ];

  /* profile & level */
  Profile::Name m_profile;
  Level::Tier   m_levelTier;
  Level::Name   m_level;
#if L0046_CONSTRAINT_FLAGS//若无定义,则不预编译
  Bool m_progressiveSourceFlag;
  Bool m_interlacedSourceFlag;
  Bool m_nonPackedConstraintFlag;
  Bool m_frameOnlyConstraintFlag;
#endif

  //====== Coding Structure ========
  UInt      m_uiIntraPeriod;//帧内间隔,用来设定I帧间隔
  UInt      m_uiDecodingRefreshType;///< the type of decoding refresh employed for the random access.
  Int       m_iGOPSize;//GOP大小
  GOPEntry  m_GOPList[MAX_GOP];
  Int       m_extraRPSs;
  Int       m_maxDecPicBuffering[MAX_TLAYER];
  Int       m_numReorderPics[MAX_TLAYER];
  
  Int       m_iQP;        //  if (AdaptiveQP == OFF)
  
  Int       m_aiPad[2];
 Int       m_iMaxRefPicNum;///< this is used to mimic the sliding mechanism used by the decoder
                          // TODO: We need to have a common sliding mechanism used by both the encoder and decoder


  Int       m_maxTempLayer;  ///< Max temporal layer
  Bool m_useAMP;
  //======= Transform =============
  UInt      m_uiQuadtreeTULog2MaxSize;
  UInt      m_uiQuadtreeTULog2MinSize;
  UInt      m_uiQuadtreeTUMaxDepthInter;
  UInt      m_uiQuadtreeTUMaxDepthIntra;
  
  //====== Loop/Deblock Filter ========
  Bool      m_bLoopFilterDisable;
  Bool      m_loopFilterOffsetInPPS;
  Int       m_loopFilterBetaOffsetDiv2;
  Int       m_loopFilterTcOffsetDiv2;
  Bool      m_DeblockingFilterControlPresent;
  Bool      m_bUseSAO;
  Int       m_maxNumOffsetsPerPic;
  Bool      m_saoLcuBoundary;
  Bool      m_saoLcuBasedOptimization;


  //====== Lossless ========
  Bool      m_useLossless;
  //====== Motion search ========
  Int       m_iFastSearch;          //  0:Full search  1:Diamond  2:PMVFAST
  Int       m_iSearchRange;        //  0:Full frame
  Int       m_bipredSearchRange;


  //====== Quality control ========
  Int       m_iMaxDeltaQP;        //  Max. absolute delta QP (1:default)
  Int       m_iMaxCuDQPDepth;     //  Max. depth for a minimum CuDQP (0:default)


  Int       m_chromaCbQpOffset;   //  Chroma Cb QP Offset (0:default)
  Int       m_chromaCrQpOffset;  //  Chroma Cr Qp Offset (0:default)


#if ADAPTIVE_QP_SELECTION
  Bool      m_bUseAdaptQpSelect;
#endif


  Bool      m_bUseAdaptiveQP;
  Int       m_iQPAdaptationRange;
  
  //====== Tool list ========
  Bool      m_bUseSBACRD;
  Bool      m_bUseASR;//使用ASR
  Bool      m_bUseHADME;//
  Bool      m_bUseLComb;
  Bool      m_useRDOQ;//使用RDOQ
  Bool      m_useRDOQTS;
#if L0232_RD_PENALTY
  UInt      m_rdPenalty;
#endif
  Bool      m_bUseFastEnc;//FE快速算法
  Bool      m_bUseEarlyCU;//EU快速算法
  Bool      m_useFastDecisionForMerge;//FDM快速算法
  Bool      m_bUseCbfFastMode;//CFM快速算法
  Bool      m_useEarlySkipDetection;//ESD快速算法
  Bool      m_useTransformSkip;//TS快速算法
  Bool      m_useTransformSkipFast;//TSF快速算法
  Int*      m_aidQP;
  UInt      m_uiDeltaQpRD;
  
  Bool      m_bUseConstrainedIntraPred;
  Bool      m_usePCM;
  UInt      m_pcmLog2MaxSize;
  UInt      m_uiPCMLog2MinSize;
  //====== Slice ========
  Int       m_sliceMode;
  Int       m_sliceArgument; 
  //====== Dependent Slice ========
  Int       m_sliceSegmentMode;
  Int       m_sliceSegmentArgument;
  Bool      m_bLFCrossSliceBoundaryFlag;


  Bool      m_bPCMInputBitDepthFlag;
  UInt      m_uiPCMBitDepthLuma;
  UInt      m_uiPCMBitDepthChroma;
  Bool      m_bPCMFilterDisableFlag;
  Bool      m_loopFilterAcrossTilesEnabledFlag;
  Int       m_iUniformSpacingIdr;
  Int       m_iNumColumnsMinus1;
  UInt*     m_puiColumnWidth;
  Int       m_iNumRowsMinus1;
  UInt*     m_puiRowHeight;


  Int       m_iWaveFrontSynchro;
  Int       m_iWaveFrontSubstreams;


  Int       m_decodedPictureHashSEIEnabled;///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message
  Int       m_bufferingPeriodSEIEnabled;
  Int       m_pictureTimingSEIEnabled;
  Int       m_recoveryPointSEIEnabled;
  Int       m_framePackingSEIEnabled;
  Int       m_framePackingSEIType;
  Int       m_framePackingSEIId;
  Int       m_framePackingSEIQuincunx;
  Int       m_framePackingSEIInterpretation;
  Int       m_displayOrientationSEIAngle;
  Int       m_temporalLevel0IndexSEIEnabled;
  Int       m_gradualDecodingRefreshInfoEnabled;
  Int       m_decodingUnitInfoSEIEnabled;
  //====== Weighted Prediction ========
  Bool      m_useWeightedPred;    //< Use of Weighting Prediction (P_SLICE)
  Bool      m_useWeightedBiPred; //< Use of Bi-directional Weighting Prediction (B_SLICE)
  UInt      m_log2ParallelMergeLevelMinus2; ///< Parallel merge estimation region
  UInt      m_maxNumMergeCand;             ///< Maximum number of merge candidates
  Int       m_useScalingListId;    ///< Using quantization matrix i.e. 0=off, 1=default, 2=file.
  Char*     m_scalingListFile;    ///< quantization matrix file name
  Int       m_TMVPModeId;
  Int       m_signHideFlag;
#if RATE_CONTROL_LAMBDA_DOMAIN
  Bool      m_RCEnableRateControl;
  Int       m_RCTargetBitrate;
  Bool      m_RCKeepHierarchicalBit;
  Bool      m_RCLCULevelRC;
  Bool      m_RCUseLCUSeparateModel;
  Int       m_RCInitialQP;
  Bool      m_RCForceIntraQP;
#else
  Bool      m_enableRateCtrl;  ///< Flag for using rate control algorithm
  Int       m_targetBitrate;   ///< target bitrate
  Int       m_numLCUInUnit;   //< Total number of LCUs in a frame should be divided by the NumLCUInUnit
#endif
//...中间部分省略
public:
  TEncCfg()
  : m_puiColumnWidth()
  , m_puiRowHeight()
  {}

  virtual ~TEncCfg()
  {
    delete[] m_puiColumnWidth;
    delete[] m_puiRowHeight;
  }
  
  Void setProfile(Profile::Name profile) { m_profile = profile; }
  Void setLevel(Level::Tier tier, Level::Name level) { m_levelTier = tier; m_level = level; }


  Void  setFrameRate ( Int   i )      { m_iFrameRate = i; }//设定帧率
  Void  setFrameSkip ( UInt i ) { m_FrameSkip = i; }//设置跳帧数目
  Void  setSourceWidth  ( Int   i )   { m_iSourceWidth = i; }//设定宽度
  Void  setSourceHeight ( Int   i )   { m_iSourceHeight = i; }//设定高度

//...中间部分省略 
  //====== Loop/Deblock Filter ========
  Void  setLoopFilterDisable            ( Bool  b )      { m_bLoopFilterDisable       = b; }
  Void  setLoopFilterOffsetInPPS        ( Bool  b )      { m_loopFilterOffsetInPPS      = b; }
  Void  setLoopFilterBetaOffset         ( Int   i )      { m_loopFilterBetaOffsetDiv2  = i; }
  Void  setLoopFilterTcOffset           ( Int   i )      { m_loopFilterTcOffsetDiv2    = i; }
  Void  setDeblockingFilterControlPresent ( Bool b ) { m_DeblockingFilterControlPresent = b; }


  //====== Motion search ========
  Void setFastSearch  ( Int   i )      { m_iFastSearch = i; }
  Void setSearchRange  ( Int   i )      { m_iSearchRange = i; }//设定搜索范围
  Void setBipredSearchRange  ( Int   i ){ m_bipredSearchRange = i; }//设定双向搜索范围


  //====== Quality control ========
  Void  setMaxDeltaQP                   ( Int   i )      { m_iMaxDeltaQP = i; }
  Void  setMaxCuDQPDepth                ( Int   i )      { m_iMaxCuDQPDepth = i; }


  Void  setChromaCbQpOffset             ( Int   i )      { m_chromaCbQpOffset = i; }
  Void  setChromaCrQpOffset             ( Int   i )      { m_chromaCrQpOffset = i; }


#if ADAPTIVE_QP_SELECTION
  Void  setUseAdaptQpSelect             ( Bool   i ) { m_bUseAdaptQpSelect    = i; }
  Bool  getUseAdaptQpSelect             ()           { return   m_bUseAdaptQpSelect; }
#endif


  Void  setUseAdaptiveQP                ( Bool  b )      { m_bUseAdaptiveQP = b; }
  Void  setQPAdaptationRange            ( Int   i )      { m_iQPAdaptationRange = i; }
  
  //====== Lossless ========
  Void      setUseLossless                  (Bool    b  )        { m_useLossless = b;  }
  //====== Sequence ========
  Int getFrameRate () { return  m_iFrameRate; }//获得帧率
  UInt getFrameSkip() { return  m_FrameSkip; }//获得跳帧数目
  Int getSourceWidth () { return  m_iSourceWidth; }//获得宽度
  Int getSourceHeight () { return  m_iSourceHeight; }//获得高度
  Int getFramesToBeEncoded () { return  m_framesToBeEncoded; }//获得待编码数目
  void setLambdaModifier ( UInt uiIndex, Double dValue ){ m_adLambdaModifier[ uiIndex ] = dValue;}
  Double getLambdaModifier( UInt uiIndex ) const { return m_adLambdaModifier[ uiIndex ]; }


  //==== Coding Structure ========
  UInt getIntraPeriod ()      { return  m_uiIntraPeriod; }//获得帧内间隔
  UInt getDecodingRefreshType ()      { return  m_uiDecodingRefreshType; }
  Int  getGOPSize ()      { return  m_iGOPSize; }//获得GOP大小
  Int  getMaxDecPicBuffering (UInt tlayer) { return m_maxDecPicBuffering[tlayer]; }
  Int  getNumReorderPics  (UInt tlayer) { return m_numReorderPics[tlayer]; }
  Int  getQP  ()      { return  m_iQP; }//获得QP
  
  Int  getPad  ( Int i )  { assert (i < 2 );    return  m_aiPad[i]; }
  
  //======== Transform =============
  UInt  getQuadtreeTULog2MaxSize ()const { return m_uiQuadtreeTULog2MaxSize; }
  UInt  getQuadtreeTULog2MinSize ()const { return m_uiQuadtreeTULog2MinSize; }
  UInt  getQuadtreeTUMaxDepthInter ()const { return m_uiQuadtreeTUMaxDepthInter; }
  UInt  getQuadtreeTUMaxDepthIntra ()const { return m_uiQuadtreeTUMaxDepthIntra; }
  
  //==== Loop/Deblock Filter ========
  Bool  getLoopFilterDisable ()      { return  m_bLoopFilterDisable;       }
  Bool  getLoopFilterOffsetInPPS ()  { return m_loopFilterOffsetInPPS; }
  Int   getLoopFilterBetaOffset  ()  { return m_loopFilterBetaOffsetDiv2; }
  Int   getLoopFilterTcOffset    ()  { return m_loopFilterTcOffsetDiv2; }
  Bool  getDeblockingFilterControlPresent()  { return  m_DeblockingFilterControlPresent; }


  //==== Motion search ========
  Int       getFastSearch                   ()      { return  m_iFastSearch; }
  Int       getSearchRange                  ()      { return  m_iSearchRange; }


  //==== Quality control ========
  Int       getMaxDeltaQP                   ()      { return  m_iMaxDeltaQP; }
  Int       getMaxCuDQPDepth                ()      { return  m_iMaxCuDQPDepth; }
  Bool      getUseAdaptiveQP                ()      { return  m_bUseAdaptiveQP; }
  Int       getQPAdaptationRange            ()      { return  m_iQPAdaptationRange; }
  //====== Lossless ========
  Bool      getUseLossless                  ()      { return  m_useLossless;  }
  
  //==== Tool list ========
  Void      setUseSBACRD                    ( Bool  b )     { m_bUseSBACRD  = b; }
  Void      setUseASR                       ( Bool  b )     { m_bUseASR     = b; }
  Void      setUseHADME                     ( Bool  b )     { m_bUseHADME   = b; }
  Void      setUseLComb                     ( Bool  b )     { m_bUseLComb   = b; }
  Void      setUseRDOQ                      ( Bool  b )     { m_useRDOQ    = b; }
  Void      setUseRDOQTS                    ( Bool  b )     { m_useRDOQTS  = b; }
#if L0232_RD_PENALTY
  Void      setRDpenalty                 ( UInt  b )     { m_rdPenalty  = b; }
#endif
  Void  setUseFastEnc                   ( Bool  b )     { m_bUseFastEnc = b; }
  Void  setUseEarlyCU                   ( Bool  b )     { m_bUseEarlyCU = b; }
  Void  setUseFastDecisionForMerge      ( Bool  b )     { m_useFastDecisionForMerge = b; }
  Void  setUseCbfFastMode            ( Bool  b )     { m_bUseCbfFastMode = b; }
  Void  setUseEarlySkipDetection        ( Bool  b )     { m_useEarlySkipDetection = b; }
  Void  setUseConstrainedIntraPred      ( Bool  b )     { m_bUseConstrainedIntraPred = b; }
  Void  setPCMInputBitDepthFlag         ( Bool  b )     { m_bPCMInputBitDepthFlag = b; }
  Void  setPCMFilterDisableFlag         ( Bool  b )     {  m_bPCMFilterDisableFlag = b; }
  Void  setUsePCM                       ( Bool  b )     {  m_usePCM = b;               }
  Void  setPCMLog2MaxSize               ( UInt u )      { m_pcmLog2MaxSize = u;      }
  Void  setPCMLog2MinSize               ( UInt u )     { m_uiPCMLog2MinSize = u;      }
  Void  setdQPs                         ( Int*  p )     { m_aidQP       = p; }
  Void  setDeltaQpRD                    ( UInt  u )     {m_uiDeltaQpRD  = u; }
  Bool  getUseSBACRD                    ()      { return m_bUseSBACRD;  }
  Bool  getUseASR                       ()      { return m_bUseASR;     }
  Bool  getUseHADME                     ()      { return m_bUseHADME;   }
  Bool  getUseLComb                     ()      { return m_bUseLComb;   }
  Bool  getUseRDOQ                      ()      { return m_useRDOQ;    }
  Bool  getUseRDOQTS                    ()      { return m_useRDOQTS;  }
#if L0232_RD_PENALTY
  Int      getRDpenalty                  ()      { return m_rdPenalty;  }
#endif
  Bool getUseFastEnc () { return m_bUseFastEnc; }//获得是否进行FE算法的标志
  Bool getUseEarlyCU () { return m_bUseEarlyCU; }//获得是否进行EC算法的标志
  Bool getUseFastDecisionForMerge (){ return m_useFastDecisionForMerge; }//获得是否进行FDM算法的标志
  Bool getUseCbfFastMode () { return m_bUseCbfFastMode; }//获得是否进行CFM算法的标志
  Bool getUseEarlySkipDetection (){ return m_useEarlySkipDetection; }//获得是否进行ESD算法的标志
  Bool getUseConstrainedIntraPred () { return m_bUseConstrainedIntraPred; }
  Bool getPCMInputBitDepthFlag () { return m_bPCMInputBitDepthFlag;   }
  Bool getPCMFilterDisableFlag () { return m_bPCMFilterDisableFlag;   } 
  Bool getUsePCM () { return m_usePCM;                 }
  UInt getPCMLog2MaxSize () { return m_pcmLog2MaxSize;  }
  UInt getPCMLog2MinSize () { return  m_uiPCMLog2MinSize;  }
//...后面省略



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值