gopdecoder.h
来自「SVC最新更新代码」· C头文件 代码 · 共 620 行 · 第 1/3 页
H
620 行
virtual ~CurrDPBUnit();
public:
static ErrVal create ( CurrDPBUnit*& rpcCurrDPBUnit,
YuvBufferCtrl& rcYuvBufferCtrl,
const SequenceParameterSet& rcSPS,
Bool bCreateRefBasePicBuffer,
Bool bBaseLayer );
virtual ErrVal destroy ();
ErrVal init ( SliceHeader& rcSliceHeader );
ErrVal reinit ( SliceHeader& rcSliceHeader,
Bool bNewLayerRepresentation );
ErrVal resetMMCO5 ( SliceHeader& rcSliceHeader );
ErrVal setComplete ( CurrDPBUnit& rcILPredUnit,
Bool bDependencyRepresentationFinished );
ErrVal store ( DPBUnit& rcDPBUnit,
Bool bRefBasePic = false );
ErrVal uninit ();
Frame* getRefBasePic () { return m_pcRefBasePicFrame; }
ControlData& getCtrlData () { return *m_pcControlData; }
SliceHeader* getSliceHeader () { return m_pcControlData->getSliceHeader (); }
MbDataCtrl* getMbDataCtrl () { return m_pcControlData->getMbDataCtrl (); }
const Frame* getRefBasePic () const { return m_pcRefBasePicFrame; }
const ControlData& getCtrlData () const { return *m_pcControlData; }
const SliceHeader* getSliceHeader () const { return m_pcControlData->getSliceHeader (); }
const MbDataCtrl* getMbDataCtrl () const { return m_pcControlData->getMbDataCtrl (); }
Bool inCurrentUse () const { return m_bInUse && !m_bCompleted; }
Bool isCompleted () const { return m_bInUse && m_bCompleted; }
Bool isUninitialized () const { return !m_bInUse && !m_bCompleted; }
protected:
ErrVal xCreateData ( const SequenceParameterSet& rcSPS,
Bool bCreateRefBasePicBuffer,
Bool bBaseLayer );
ErrVal xDeleteData ();
ErrVal xStoreFrame ( DPBUnit& rcDPBUnit,
Bool bRefBasePic );
ErrVal xStore2ndField ( DPBUnit& rcDPBUnit,
Bool bRefBasePic );
private:
Bool m_bInUse;
Bool m_bRefBasePicInUse;
Bool m_bCompleted;
UInt m_uiQualityId;
ControlData* m_pcControlData;
Frame* m_pcRefBasePicFrame;
};
class H264AVCDECODERLIB_API RefPicEntry
{
public:
RefPicEntry ( PicType ePicType, DPBUnit* pcDPBUnit );
RefPicEntry ( const RefPicEntry& rcRefPicEntry );
~RefPicEntry();
PicType getPicType() { return m_ePicType; }
DPBUnit* getDPBUnit() { return m_pcDPBUnit; }
private:
PicType m_ePicType;
DPBUnit* m_pcDPBUnit;
};
typedef MyList<DPBUnit*> DPBUnitList;
typedef MyList<RefPicEntry> RefPicEntryList;
class H264AVCDECODERLIB_API DecodedPicBuffer
{
protected:
DecodedPicBuffer ();
virtual ~DecodedPicBuffer ();
public:
static ErrVal create ( DecodedPicBuffer*& rpcDecodedPicBuffer );
virtual ErrVal destroy ();
ErrVal init ( YuvBufferCtrl* pcYuvBufferCtrl,
UInt uiDependencyId );
ErrVal uninit ();
ErrVal initCurrDPBUnit ( CurrDPBUnit*& rpcCurrDPBUnit,
PicBuffer*& rpcPicBuffer,
SliceHeader& rcSliceHeader,
PocCalculator& rcPocCalculator,
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList,
Bool bFirstSliceInDependencyRepresentation,
Bool bFirstSliceInLayerRepresentation );
ErrVal storeCurrDPBUnit ( Bool bDependencyRepresentationFinished );
ErrVal updateBuffer ( PocCalculator& rcPocCalculator,
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList );
ErrVal finish ( PicBufferList& rcOutputList,
PicBufferList& rcUnusedList );
ErrVal setPrdRefLists ( CurrDPBUnit* pcCurrDPBUnit );
CurrDPBUnit* getILPredDPBUnit ();
protected:
//===== data creation/deletion =====
Bool xNewBufferDimension ( const SequenceParameterSet& rcSPS );
ErrVal xInitBuffer ( const SliceHeader& rcSliceHeader );
ErrVal xCreateData ( const SequenceParameterSet& rcSPS,
UInt uiDPBSizeInFrames,
Bool bBaseLayer );
ErrVal xDeleteData ();
//===== check for complementary field pair =====
Bool xIs2ndFieldOfCompFieldPair( const SliceHeader& rcSliceHeader );
Bool xIs2ndFieldOfCompFieldPair( Bool bRefBasePic = false );
//===== insert pictures =====
ErrVal xInsertNonExistingFrame ( const SliceHeader* pcSliceHeader,
UInt uiFrameNum );
ErrVal xInsertCurrentInNewBuffer ( DPBUnit*& rpcStoredDPBUnit,
Bool bRefBasePic = false );
//===== update and check buffer status ======
ErrVal xCheckGapsInFrameNum ( const SliceHeader& rcSliceHeader,
PocCalculator& rcPocCalculator,
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList );
ErrVal xUpdateAndStoreCurrentPic ( PocCalculator& rcPocCalculator,
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList );
ErrVal xCheckBufferStatus ();
//===== output =====
ErrVal xBumpingOutput ( PicBufferList& rcOutputList,
PicBufferList& rcUnusedList,
Bool bOutputAll = false );
//===== memory management =====
ErrVal xMarkAllUnusedForRef ( Bool bRemoveOutputFlag = false );
ErrVal xSlidingWindow ( UInt uiCurrFrameNum );
ErrVal xMMCO ( PocCalculator& rcPocCalculator,
SliceHeader& rcSliceHeader,
Bool& rbMMCO6,
Bool bRefBasePic = false );
ErrVal xMarkShortTermUnused ( UInt uiCurrFrameNum, // MMCO 1
PicType eCurrPicType,
UInt uiPicNumDiff,
Bool bRefBasePic );
ErrVal xMarkLongTermUnused ( PicType eCurrPicType, // MMCO 2
UInt uiLongTermPicNum,
Bool bRefBasePic );
ErrVal xAssignLongTermIndex ( UInt uiCurrFrameNum, // MMCO 3
PicType eCurrPicType,
UInt uiPicNumDiff,
UInt uiLongTermFrameIndex );
ErrVal xSetMaxLongTermIndex ( UInt uiMaxLongTermFrameIdxPlus1 ); // MMCO 4
ErrVal xReset ( PocCalculator& rcPocCalculator, // MMCO 5
SliceHeader& rcSliceHeader );
ErrVal xStoreCurrentLongTerm ( UInt uiLongTermFrameIndex, // MMCO 6
Bool bStoreRefBasePic );
//===== reference list construction =====
Bool xExistsRefBasePicShortTerm( UInt uiFrameNum );
Bool xExistsRefBasePicLongTerm ( Int iLongTermFrameIdx );
Bool xIsAvailableForRefLists ( const DPBUnit* pcDPBUnit,
Bool bFieldPicture,
Bool bExcludeNonExisting,
Bool bUseRefBasePic );
ErrVal xCreateOrderedDPBUnitLists( DPBUnitList& rcOrderedShortTermList0,
DPBUnitList& rcOrderedShortTermList1,
DPBUnitList& rcOrderedLongTermList,
Bool& rbShortTermListIdentical,
SliceHeader& rcSliceHeader );
DPBUnit* xGetDPBEntry ( DPBUnitList& rcDPBUnitList,
UInt uiIndex );
ErrVal xGetRefPicEntryList ( RefPicEntryList& rcRefPicEntryList,
DPBUnitList& rcDPBUnitList,
PicType eCurrPicType );
ErrVal xCreateInitialRefPicLists ( RefPicEntryList& rcRefPicEntryList0,
RefPicEntryList& rcRefPicEntryList1,
SliceHeader& rcSliceHeader );
ErrVal xModifyRefPicList ( RefPicEntryList& rcRefPicEntryList,
UInt& ruiRefIdx,
Bool bLongTerm,
PicType ePicType,
UInt uiFrameNumOrLTIdx );
ErrVal xRefPicListModification ( RefPicEntryList& rcRefPicEntryList,
SliceHeader& rcSliceHeader,
ListIdx eListIdx );
ErrVal xSetReferencePictureList ( RefFrameList& rcRefFrameList,
RefPicEntryList& rcRefPicEntryList,
UInt uiNumActiveEntries );
ErrVal xSetMbDataCtrlEntry0 ( MbDataCtrl*& rpcMbDataCtrl,
RefPicEntryList& rcRefPicEntryList );
//===== debugging =====
ErrVal xDumpDPB ( const Char* pcString = 0 );
ErrVal xDumpRefPicList ( RefFrameList& rcRefFrameList,
ListIdx eListIdx,
const Char* pcString = 0 );
private:
Bool m_bInitDone;
Bool m_bInitBufferDone;
Bool m_bDebugOutput;
YuvBufferCtrl* m_pcYuvBufferCtrl;
UInt m_uiDependencyId;
UInt m_uiFrameWidthInMbs;
UInt m_uiFrameHeightInMbs;
UInt m_uiBufferSizeInFrames;
UInt m_uiDPBSizeInFrames;
UInt m_uiMaxNumRefFrames;
UInt m_uiMaxFrameNum;
UInt m_uiLastRefFrameNum;
Int m_iMaxLongTermFrameIdx;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?