⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gopdecoder.h

📁 JVT-Z203_jsvm.rar
💻 H
📖 第 1 页 / 共 2 页
字号:
  ErrVal              xDeleteData             ();
  
  ErrVal              xClearBuffer            (); // remove non-ref frames that are not output pictures
  ErrVal              xUpdateMemory           ( SliceHeader*                pcSliceHeader );
  ErrVal              xSlidingWindow          ();
  ErrVal              xMMCO                   ( SliceHeader*                pcSliceHeader );

  ErrVal              xMarkShortTermUnusedBase( const PicType               ePicType,
                                                UInt						            mCurrFrameNum,  
                                                UInt                        uiDiffOfPicNums );
  ErrVal              xMarkShortTermUnused    ( const PicType               ePicType,
                                                const DPBUnit*              pcCurrentDPBUnit,
                                                UInt                        uiDiffOfPicNums );
  
  ErrVal              xOutput                 ( PicBufferList&              rcOutputList,
                                                PicBufferList&              rcUnusedList );
  ErrVal              xClearOutputAll         ( PicBufferList&              rcOutputList,
                                                PicBufferList&              rcUnusedList,
                                                Bool                        bFinal );            


  ErrVal              xStorePicture           ( DPBUnit*                    pcDPBUnit, // just for checking
                                                PicBufferList&              rcOutputList,
                                                PicBufferList&              rcUnusedList,
                                                Bool                        bTreatAsIdr,
                                                Bool                        bFrameMbsOnlyFlag,
                                                Bool                        bRefinement );
  ErrVal              xCheckMissingPics       ( const SliceHeader*          pcSliceHeader,
                                                PicBufferList&              rcOutputList,
                                                PicBufferList&              rcUnusedList );


  ErrVal              xInitPrdListPSlice      ( RefFrameList&               rcList0,
                                                Frame*                      pcCurrentFrame,
                                                PicType                     eCurrentPicType,
																						    SliceType                   eSliceType );
  ErrVal              xInitPrdListsBSlice     ( RefFrameList&               rcList0,
                                                RefFrameList&               rcList1,
                                                Frame*                      pcCurrentFrame,
                                                PicType                     eCurrentPicType,
																						    SliceType                   eSliceType );

  ErrVal              xSetInitialRefFieldList ( RefFrameList&               rcList,
                                                Frame*                      pcCurrentFrame,
                                                PicType                     eCurrentPicType,
																						    SliceType                   eSliceType );
  ErrVal              xPrdListRemapping       ( RefFrameList&               rcList,
                                                ListIdx                     eListIdx,
                                                SliceHeader*                pcSliceHeader );
  ErrVal              xUpdateDPBUnitList      ( DPBUnit                     *pcDPBUNit  );
  
  //===== debugging ======
  ErrVal              xDumpDPB                ();
  ErrVal              xDumpRefList            ( RefFrameList&               rcList,
		                                            ListIdx                     eListIdx );
private:
  Bool                m_bInitDone;
  YuvBufferCtrl*      m_pcYuvBufferCtrl;

  UInt                m_uiLayer;
  UInt                m_uiNumRefFrames;
  UInt                m_uiMaxFrameNum;
  UInt                m_uiLastRefFrameNum;
  DPBUnitList         m_cUsedDPBUnitList;
  DPBUnitList         m_cFreeDPBUnitList;
  DPBUnit*            m_pcCurrDPBUnit;
  DPBUnit*            m_pcLastDPBUnit;
  PicBufferList       m_cPicBufferList;
};



class H264AVCDECODERLIB_API MbStatus
{
public:
  MbStatus();
  virtual ~MbStatus();

  Void    reset           ();
  Bool    canBeUpdated    ( const SliceHeader*  pcSliceHeader );
  ErrVal  update          ( SliceHeader*        pcSliceHeader );

  SliceHeader*        getSliceHeader    ()        { return    m_pcSliceHeader; }
  const SliceHeader*  getSliceHeader    ()  const { return    m_pcSliceHeader; }
  UInt                getSliceIdc       ()  const { return    m_uiSliceIdc; }
  UInt                getFirstMbInSlice ()  const { return    m_uiSliceIdc >> 7; }
  UInt                getDQId           ()  const { return    m_uiSliceIdc        & 0x7F; }
  UInt                getDependencyId   ()  const { return  ( m_uiSliceIdc >> 4 ) & 0x7; }
  UInt                getQualityId      ()  const { return    m_uiSliceIdc        & 0xF; }
  Bool                isCoded           ()  const { return    m_bIsCoded; }

private:
  UInt          m_uiSliceIdc;
  Bool          m_bIsCoded;
  SliceHeader*  m_pcSliceHeader;
};



class H264AVCDECODERLIB_API LayerDecoder
{ 
  enum { NUM_TMP_FRAMES = 2 };

protected:
	LayerDecoder         ();
	virtual ~LayerDecoder();

public:
  //===== general functions ======
  static  ErrVal  create        ( LayerDecoder*&          rpcLayerDecoder );
  ErrVal          destroy       ();
  ErrVal          init          ( UInt                    uiDependencyId,
                                  H264AVCDecoder*         pcH264AVCDecoder,
                                  NalUnitParser*          pcNalUnitParser,
                                  SliceReader*            pcSliceReader,
                                  SliceDecoder*           pcSliceDecoder,
                                  ControlMngIf*           pcControlMng,
                                  LoopFilter*             pcLoopFilter,
                                  HeaderSymbolReadIf*     pcHeaderSymbolReadIf,
                                  ParameterSetMng*        pcParameterSetMng,
                                  PocCalculator*          pcPocCalculator,
                                  YuvBufferCtrl*          pcYuvFullPelBufferCtrl,
                                  DecodedPicBuffer*       pcDecodedPictureBuffer,
                                  MotionCompensation*     pcMotionCompensation,
								                  ReconstructionBypass*   pcReconstructionBypass
#ifdef SHARP_AVC_REWRITE_OUTPUT
                                  ,RewriteEncoder*        pcRewriteEncoder
#endif
                                  );
  ErrVal          uninit        ();

  //===== main processing functions =====
  ErrVal  processSliceData      ( PicBuffer*              pcPicBuffer,
                                  PicBufferList&          rcPicBufferOutputList,
                                  PicBufferList&          rcPicBufferUnusedList,
                                  BinDataList&            rcBinDataList,
                                  SliceDataNALUnit&       rcSliceDataNALUnit );
  ErrVal  finishProcess         ( PicBufferList&          rcPicBufferOutputList,
                                  PicBufferList&          rcPicBufferUnusedList );

  //===== returning data =====
  ErrVal            getBaseLayerData              ( SliceHeader&      rcELSH,
                                                    Frame*&           pcFrame,
                                                    Frame*&           pcResidual,
                                                    MbDataCtrl*&      pcMbDataCtrl,
                                                    ResizeParameters& rcResizeParameters );
  ErrVal            getBaseSliceHeader            ( SliceHeader*&     rpcSliceHeader );

  UInt              getFrameWidth                 ()  const { return m_uiFrameWidthInMb*16; }
  UInt              getFrameHeight                ()  const { return m_uiFrameHeightInMb*16; }

private:
  //===== create data arrays =====
  ErrVal  xCreateData                 ( const SequenceParameterSet&   rcSPS );
  ErrVal  xDeleteData                 ();

  //===== initialization =====
  ErrVal  xReadSliceHeader            ( SliceHeader*&           rpcSliceHeader,
                                        SliceDataNALUnit&       rcSliceDataNalUnit );
  ErrVal  xInitSliceHeader            ( SliceHeader&            rcSliceHeader,
                                        const SliceDataNALUnit& rcSliceDataNalUnit );
  ErrVal  xInitSPS                    ( const SliceHeader&      rcSliceHeader );
  ErrVal  xInitDPBUnit                ( SliceHeader&            rcSliceHeader,
                                        PicBuffer*              pcPicBuffer,
                                        PicBufferList&          rcPicBufferOutputList,
                                        PicBufferList&          rcPicBufferUnusedList );

  //===== slice processing =====
  ErrVal  xInitSlice                  ( SliceHeader*&           rpcSliceHeader,
                                        PicBuffer*              pcPicBuffer,
                                        PicBufferList&          rcPicBufferOutputList,
                                        PicBufferList&          rcPicBufferUnusedList,
                                        SliceDataNALUnit&       rcSliceDataNalUnit );
  ErrVal  xParseSlice                 ( SliceHeader&            rcSliceHeader );
  ErrVal  xDecodeSlice                ( SliceHeader&            rcSliceHeader,
                                        const SliceDataNALUnit& rcSliceDataNalUnit,
                                        Bool                    bFirstSliceInLayerRepresentation );
  ErrVal  xFinishLayerRepresentation  ( SliceHeader&            rcSliceHeader,
                                        PicBufferList&          rcPicBufferOutputList,
                                        PicBufferList&          rcPicBufferUnusedList,
                                        const SliceDataNALUnit& rcSliceDataNalUnit,
                                        BinDataList&            rcBinDataList );
  ErrVal  xFinishSlice                ( SliceHeader&            rcSliceHeader,
                                        PicBufferList&          rcPicBufferOutputList,
                                        PicBufferList&          rcPicBufferUnusedList,
                                        const SliceDataNALUnit& rcSliceDataNalUnit,
                                        BinDataList&            rcBinDataList );

  //===== picture processing =====
  ErrVal  xCheckForMissingSlices      ( const SliceDataNALUnit& rcSliceDataNalUnit );
  ErrVal  xSetLoopFilterQPs           ( SliceHeader&            rcSliceHeader,
                                        MbDataCtrl&             rcMbDataCtrl );
#ifdef SHARP_AVC_REWRITE_OUTPUT
  ErrVal  xRewritePicture             ( BinDataList&            rcBinDataList,
                                        MbDataCtrl&             rcMbDataCtrl );
#endif

  //===== base layer processing =====
  ErrVal  xInitESSandCroppingWindow   ( SliceHeader&            rcSliceHeader,
                                        MbDataCtrl&             rcMbDataCtrl,
                                        ControlData&            rcControlData ); 
  ErrVal  xInitBaseLayer              ( ControlData&            rcControlData,
                                        Bool                    bFirstSliceInLayerRepresentation );
  ErrVal  xGetBaseLayerData           ( ControlData&            rcControlData,
                                        Frame*&                 rpcBaseFrame,
                                        Frame*&                 rpcBaseResidual,
                                        MbDataCtrl*&            rpcBaseDataCtrl,
                                        ResizeParameters&       rcResizeParameters );
  Void    xSetMCResizeParameters      ( ResizeParameters&				rcResizeParameters );

protected:
  //----- references -----
  H264AVCDecoder*       m_pcH264AVCDecoder;
  NalUnitParser*        m_pcNalUnitParser;
  SliceReader*          m_pcSliceReader;
  SliceDecoder*         m_pcSliceDecoder;
  ControlMngIf*         m_pcControlMng;
  LoopFilter*           m_pcLoopFilter;
  HeaderSymbolReadIf*   m_pcHeaderSymbolReadIf;
  ParameterSetMng*      m_pcParameterSetMng;
  PocCalculator*        m_pcPocCalculator;
  YuvBufferCtrl*        m_pcYuvFullPelBufferCtrl;
  DecodedPicBuffer*     m_pcDecodedPictureBuffer;
  MotionCompensation*   m_pcMotionCompensation;
  ReconstructionBypass* m_pcReconstructionBypass;
#ifdef SHARP_AVC_REWRITE_OUTPUT
  RewriteEncoder*       m_pcRewriteEncoder;
#endif
  DownConvert           m_cDownConvert;

  //----- general parameters -----
  Bool                  m_bInitialized;
  Bool                  m_bSPSInitialized;
  Bool                  m_bDependencyRepresentationInitialized;
  Bool                  m_bLayerRepresentationInitialized;
  UInt                  m_uiFrameWidthInMb;
  UInt                  m_uiFrameHeightInMb;
  UInt                  m_uiMbNumber;
  UInt                  m_uiDependencyId;
  UInt                  m_uiQualityId;

  //----- macroblock status and slice headers -----
  MbStatus*             m_pacMbStatus;
  MyList<SliceHeader*>  m_cSliceHeaderList;

  //----- frame memories, control data, and references  -----
  ResizeParameters      m_cResizeParameters;
  DPBUnit*              m_pcCurrDPBUnit;
  MbDataCtrl*           m_pcBaseLayerCtrl;
  MbDataCtrl*           m_pcBaseLayerCtrlField;
  Frame*                m_pcResidual;
  Frame*                m_pcILPrediction;
  Frame*                m_pcBaseLayerFrame;
  Frame*                m_pcBaseLayerResidual;
  Frame*                m_apcFrameTemp[NUM_TMP_FRAMES];
};

H264AVC_NAMESPACE_END


#endif // !defined(AFX_GOPDECODER_H__339878FC_BA98_4ABE_8530_E1676196576F__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -