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

📄 createrh264avcdecoder.h

📁 SVC最新更新代码
💻 H
📖 第 1 页 / 共 2 页
字号:
  Void  setLastSliceInLayerRepresentation     ( Bool  bLastSliceInLayerRepresentation       ) { m_bLastSliceInLayerRepresentation       = bLastSliceInLayerRepresentation; }
  Void  setLastSliceInDependencyRepresentation( Bool  bLastSliceInDependencyRepresentation  ) { m_bLastSliceInDependencyRepresentation  = bLastSliceInDependencyRepresentation; }
  Void  setLastSliceInAccessUnit              ( Bool  bLastSliceInAccessUnit                ) { m_bLastSliceInAccessUnit                = bLastSliceInAccessUnit; }
  Void  setLastAccessUnitInStream             ( Bool  bLastAccessUnitInStream               ) { m_bLastAccessUnitInStream               = bLastAccessUnitInStream; }
  Void  setPartOfIDRAccessUnit                ( Bool  bPartOfIDRAccessUnit                  ) { m_bPartOfIDRAccessUnit                  = bPartOfIDRAccessUnit; }
  Void  setHighestRewriteLayer                ( Bool  bHighestRewriteLayer                  ) { m_bHighestRewriteLayer                  = bHighestRewriteLayer; }

private:
  //===== slice based parameters =====
  BinData*    m_pcBinDataPrefix;
  BinData*    m_pcBinData;
  NalRefIdc   m_eNalRefIdc;
  NalUnitType m_eNalUnitType;
  Bool        m_bIdrFlag;
  UInt        m_uiPriorityId;
  Bool        m_bNoInterLayerPredFlag;
  UInt        m_uiDependencyId;
  UInt        m_uiQualityId;
  UInt        m_uiTemporalId;
  Bool        m_bUseRefBasePicFlag;
  Bool        m_bDiscardableFlag;
  Bool        m_bOutputFlag;
  Bool        m_bTCoeffLevelPredictionFlag;
  UInt        m_uiPPSId;
  UInt        m_uiSPSId;
  UInt        m_uiFrameNum;
  UInt        m_uiRedundantPicCnt;
  UInt        m_uiRefLayerDQId;
  UInt        m_uiFrameWidthInMb;
  UInt        m_uiFrameHeightInMb;
  UInt        m_auiCroppingRectangle[4];
  //===== access unit based parameters =====
  Bool        m_bIsDQIdMax;
  Bool        m_bIsDependencyIdMax;
  Bool        m_bLastSliceInLayerRepresentation;
  Bool        m_bLastSliceInDependencyRepresentation;
  Bool        m_bLastSliceInAccessUnit;
  Bool        m_bLastAccessUnitInStream;
  Bool        m_bPartOfIDRAccessUnit;
  Bool        m_bHighestRewriteLayer;
};


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

  ErrVal  update( BinData* pcBinData, PrefixHeader& rcPrefixHeader );
  ErrVal  update( BinData* pcBinData, SliceHeader&  rcSliceHeader );
  ErrVal  update( BinData* pcBinData = 0 );
  
  ErrVal  getAndRemoveNextNalUnit( NALUnit*& rpcNalUnit );

  Bool                    isEndOfStream       ()  const   { return m_bEndOfStream; }
  Bool                    isComplete          ()  const   { return m_bComplete; }
  Bool                    isEmpty             ()  const   { return m_cNalUnitList.empty(); }
  const SliceDataNALUnit* getLastVCLNalUnit   ()  const   { return m_pcLastVCLNALUnit; }
  const PrefixHeader*     getLastPrefixHeader ()  const   { return m_pcLastPrefixHeader; }
  const SliceHeader*      getLastSliceHeader  ()  const   { return m_pcLastSliceHeader; }

private:
  Void  xSetComplete      ( SliceDataNALUnit* pcFirstSliceDataNALUnitOfNextAccessUnit = 0,
                            SliceHeader*      pcFirstSliceHeaderOfNextAccessUnit      = 0 );
  Void  xSetParameters    ();
  Void  xRemoveRedundant  ();
  Void  xReInit           ();

private:
  Bool              m_bEndOfStream;
  Bool              m_bComplete;
  MyList<NALUnit*>  m_cNalUnitList;
  MyList<NALUnit*>  m_cStartOfNewAccessUnit;
  SliceDataNALUnit* m_pcLastVCLNALUnit;
  PrefixHeader*     m_pcLastPrefixHeader;
  SliceHeader*      m_pcLastSliceHeader;
};


class H264AVCDECODERLIB_API CreaterH264AVCDecoder
{
protected:
  CreaterH264AVCDecoder();
  virtual ~CreaterH264AVCDecoder();

public:
  static ErrVal create  ( CreaterH264AVCDecoder*& rpcCreaterH264AVCDecoder );
  ErrVal        destroy ();
  ErrVal        init    ( Bool bOpenTrace  );
  ErrVal        uninit  ( Bool bCloseTrace );

  ErrVal  initNALUnit     ( BinData*&         rpcBinData,
                            AccessUnit&       rcAccessUnit );
  ErrVal  processNALUnit  ( PicBuffer*        pcPicBuffer,
                            PicBufferList&    rcPicBufferOutputList,
                            PicBufferList&    rcPicBufferUnusedList,
                            BinDataList&      rcBinDataList,
                            NALUnit&          rcNALUnit );

protected:
  ErrVal  xCreateDecoder  ();

protected:
  H264AVCDecoder*           m_pcH264AVCDecoder;
  DecodedPicBuffer*         m_apcDecodedPicBuffer     [MAX_LAYERS];
  LayerDecoder*             m_apcLayerDecoder         [MAX_LAYERS];
  ParameterSetMng*          m_pcParameterSetMngAUInit;
  ParameterSetMng*          m_pcParameterSetMngDecode;
  PocCalculator*            m_apcPocCalculator        [MAX_LAYERS];
  SliceReader*              m_pcSliceReader;
  NalUnitParser*            m_pcNalUnitParser;
  SliceDecoder*             m_pcSliceDecoder;
  ControlMngH264AVCDecoder* m_pcControlMng;
  BitReadBuffer*            m_pcBitReadBuffer;
  UvlcReader*               m_pcUvlcReader;
  MbParser*                 m_pcMbParser;
  LoopFilter*               m_pcLoopFilter;
  MbDecoder*                m_pcMbDecoder;
  Transform*                m_pcTransform;
  IntraPrediction*          m_pcIntraPrediction;
  MotionCompensation*       m_pcMotionCompensation;
  YuvBufferCtrl*            m_apcYuvFullPelBufferCtrl [MAX_LAYERS];
  QuarterPelFilter*         m_pcQuarterPelFilter;
  CabacReader*              m_pcCabacReader;
  SampleWeighting*          m_pcSampleWeighting;
  ReconstructionBypass*     m_pcReconstructionBypass;
#ifdef SHARP_AVC_REWRITE_OUTPUT
  RewriteEncoder*           m_pcRewriteEncoder;
#endif
};







struct PacketDescription
{
  Bool  ParameterSet;
  Bool  Scalable;
  UInt  Layer;
  UInt  Level;
  UInt  FGSLayer;
  Bool  ApplyToNext;
  UInt  NalUnitType;
  UInt  SPSid;
  UInt  PPSid;
  UInt  SPSidRefByPPS[256];
	UInt  auiPriorityLevelPR[MAX_NUM_RD_LEVELS];
  UInt  uiNumLevelsQL;
  UInt  uiPId;
  Bool  bDiscardable;
  UInt  uiFirstMb;
  Bool  bDiscardableHRDSEI;
};



class H264AVCDECODERLIB_API H264AVCPacketAnalyzer
{
protected:
  H264AVCPacketAnalyzer();
  virtual ~H264AVCPacketAnalyzer();

public:
  static ErrVal create  ( H264AVCPacketAnalyzer*&  rpcH264AVCPacketAnalyzer );
  ErrVal        destroy ();
  ErrVal        init    ();
  ErrVal        uninit  ();
  ErrVal        process ( BinData*              pcBinData,
                          PacketDescription&    rcPacketDescription,
                          SEI::SEIMessage*&     pcScalableSEIMessage );
  
  SEI::NonRequiredSei*  getNonRequiredSEI     ()  { return m_pcNonRequiredSEI; }
  UInt                  getNonRequiredSeiFlag ()  { return m_uiNonRequiredSeiFlag; }

  //==== VERY BAD: public members !!!!! =====
  Int     m_layer_id;
  UInt    m_uiNum_layers;
  UInt    m_uiNumSliceGroupsMinus1;
  Int     m_ID_ROI              [MAX_SCALABLE_LAYERS];
  Int     m_ID_Dependency       [MAX_SCALABLE_LAYERS];
  Int     m_silceIDOfSubPicLayer[MAX_SCALABLE_LAYERS];
  UInt    uiaAddrFirstMBofROIs  [256][MAX_ROI_NUM];

protected:
  ErrVal  xCreate ();

protected:
  BitReadBuffer*        m_pcBitReadBuffer;
  UvlcReader*           m_pcUvlcReader;
  NalUnitParser*        m_pcNalUnitParser;
  UInt                  m_uiStdAVCOffset;
  SEI::NonRequiredSei*  m_pcNonRequiredSEI;
  UInt                  m_uiNonRequiredSeiFlag;
  UInt                  m_uiPrevPicLayer;
  UInt                  m_uiCurrPicLayer;
};


H264AVC_NAMESPACE_END


#endif // !defined(AFX_CREATERH264AVCDECODER_H__0366BFA9_45D9_4834_B404_8DE3914C1E58__INCLUDED_)

⌨️ 快捷键说明

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