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 + -
显示快捷键?