在使用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; } //...后面省略