http://blog.csdn.net/u012539514/article/details/17952873
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()
{}
[cpp] view plain copy
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; }
//...後面省略