gopdecoder.h
来自「JVT-S203 contains the JSVM 6 reference s」· C头文件 代码 · 共 504 行 · 第 1/2 页
H
504 行
UInt uiDiffOfPicNums );
ErrVal xOutput ( PicBufferList& rcOutputList,
PicBufferList& rcUnusedList );
ErrVal xClearOutputAll ( PicBufferList& rcOutputList,
PicBufferList& rcUnusedList,
Int& riMaxPoc );
ErrVal xStorePicture ( DPBUnit* pcDPBUnit, // just for checking
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList,
Bool bTreatAsIdr );
ErrVal xCheckMissingPics ( SliceHeader* pcSliceHeader,
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList );
ErrVal xInitPrdListPSlice ( RefFrameList& rcList );
ErrVal xInitPrdListsBSlice ( RefFrameList& rcList0,
RefFrameList& rcList1 );
ErrVal xPrdListRemapping ( RefFrameList& rcList,
ListIdx eListIdx,
SliceHeader* pcSliceHeader );
//===== debugging ======
ErrVal xDumpDPB ();
ErrVal xDumpRefList ( ListIdx eListIdx,
RefFrameList& rcList );
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;
PicBufferList m_cPicBufferList;
};
class H264AVCDECODERLIB_API MCTFDecoder
{
enum
{
NUM_TMP_FRAMES = 5 // JVT-Q054 Red. Picture
// NUM_TMP_FRAMES = 3 // Hanke@RWTH
};
enum NextNalType
{
ALL = 0x00,
LOW_PASS = 0x01,
LOW_PASS_IDR = 0x02
};
public:
//TMM_EC {{
ErrVal getECMethod( SliceHeader *rpcSliceHeader, ERROR_CONCEAL &m_eErrorConceal);
UInt m_bBaseLayerLost;
SliceHeader *m_pcVeryFirstSliceHeader;
FrameMng *m_pcFrameMng;
ERROR_CONCEAL m_eErrorConcealTemp;
UInt m_uiDecompositionStages;
UInt m_uiDecompositionStagesBase;
ERROR_CONCEAL m_eErrorConceal;
//TMM_EC }}
protected:
MCTFDecoder ();
virtual ~MCTFDecoder();
public:
//===== general functions ======
static ErrVal create ( MCTFDecoder*& rpcMCTFDecoder );
ErrVal destroy ();
ErrVal init ( H264AVCDecoder* pcH264AVCDecoder,
SliceReader* pcSliceReader,
SliceDecoder* pcSliceDecoder,
RQFGSDecoder* pcRQFGSDecoder,
NalUnitParser* pcNalUnitParser,
ControlMngIf* pcControlMng,
LoopFilter* pcLoopFilter,
HeaderSymbolReadIf* pcHeaderSymbolReadIf,
ParameterSetMng* pcParameterSetMng,
PocCalculator* pcPocCalculator,
YuvBufferCtrl* pcYuvFullPelBufferCtrl,
DecodedPicBuffer* pcDecodedPictureBuffer,
MotionCompensation* pcMotionCompensation,
QuarterPelFilter* pcQuarterPelFilter );
ErrVal uninit ();
ErrVal initSlice0 ( SliceHeader* pcSliceHeader );
ErrVal initSlice ( SliceHeader* pcSliceHeader,
UInt uiLastLayer );
ErrVal process ( SliceHeader*& rpcSliceHeader,
PicBuffer* pcPicBuffer,
PicBufferList& rcPicBufferOutputList,
PicBufferList& rcPicBufferUnusedList,
Bool bReconstructionLayer );
ErrVal finishProcess ( PicBufferList& rcPicBufferOutputList,
PicBufferList& rcPicBufferUnusedList,
Int& riMaxPoc );
Bool isActive () { return m_bActive; }
UInt getFrameWidth () { return m_uiFrameWidthInMb*16; }
UInt getFrameHeight () { return m_uiFrameHeightInMb*16; }
ErrVal getBaseLayerData ( IntFrame*& pcFrame,
IntFrame*& pcResidual,
MbDataCtrl*& pcMbDataCtrl,
Bool& rbConstrainedIPred,
Bool bSpatialScalability,
Int iPoc );
ErrVal getBaseLayerPWTable ( SliceHeader::PredWeightTable*& rpcPredWeightTable,
ListIdx eListIdx,
Int iPoc );
Void setQualityLevelForPrediction ( UInt ui ) { m_uiQualityLevelForPrediction = ui; }
#if MULTIPLE_LOOP_DECODING
Void setCompletelyDecodeLayer ( Bool b ) { m_bCompletelyDecodeLayer = b; }
#endif
PocCalculator* getPocCalculator () { return m_pcPocCalculator; }
// TMM_ESS {
Void setResizeParameters ( ResizeParameters* params ) { m_pcResizeParameter = params; }
ResizeParameters* getResizeParameters () { return m_pcResizeParameter; }
Int getSpatialScalabilityType() { return m_pcResizeParameter->m_iSpatialScalabilityType; }
// TMM_ESS }
Void setWaitForIdr(Bool b) { m_bWaitForIdr = b;}
Bool getWaitForIdr() { return m_bWaitForIdr;}
ErrVal setDiffPrdRefLists ( RefFrameList& diffPrdRefList,
YuvBufferCtrl* pcYuvFullPelBufferCtrl);
ErrVal freeDiffPrdRefLists ( RefFrameList& diffPrdRefList);
protected:
//===== create and initialize data arrays =====
ErrVal xCreateData ( const SequenceParameterSet& rcSPS );
ErrVal xDeleteData ();
ErrVal xZeroIntraMacroblocks ( IntFrame* pcFrame,
ControlData& rcCtrlData );
ErrVal xAddBaseLayerResidual ( ControlData& rcControlData,
IntFrame* pcFrame );
//TMM_EC
ErrVal xInitBaseLayer ( ControlData& rcControlData, SliceHeader *&rcSliceHeaderBase);
#if INDEPENDENT_PARSING
ErrVal xInitESSandCroppingWindow ( SliceHeader& rcSliceHeader,
MbDataCtrl& rcMbDataCtrl );
#endif
//===== decode pictures / subbands =====
ErrVal xDecodeSuffixUnit ( SliceHeader*& rpcSliceHeader,
PicBuffer*& rpcPicBuffer,
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList,
Bool bReconstructionLayer ); //JVT-S036 lsj
ErrVal xDecodeBaseRepresentation ( SliceHeader*& rpcSliceHeader,
PicBuffer*& rpcPicBuffer,
PicBufferList& rcOutputList,
PicBufferList& rcUnusedList,
Bool bReconstructionLayer );
ErrVal xDecodeFGSRefinement ( SliceHeader*& rpcSliceHeader );
ErrVal xReconstructLastFGS ( Bool bHighestLayer );
ErrVal xMotionCompensation ( IntFrame* pcMCFrame,
RefFrameList& rcRefFrameList0,
RefFrameList& rcRefFrameList1,
MbDataCtrl* pcMbDataCtrl,
SliceHeader& rcSH );
ErrVal xFixMCPrediction ( IntFrame* pcMCFrame,
ControlData& rcControlData );
Bool isPictureDecComplete(SliceHeader* rpcSliceHeader);
const Bool isNewPictureStart(SliceHeader* rpcSliceHeader);
ErrVal InitWhenNewPictureStart(SliceHeader* pcSliceHeader, MbDataCtrl* pcMbDataCtrl);
protected:
//----- references -----
H264AVCDecoder* m_pcH264AVCDecoder;
SliceReader* m_pcSliceReader;
SliceDecoder* m_pcSliceDecoder;
RQFGSDecoder* m_pcRQFGSDecoder;
NalUnitParser* m_pcNalUnitParser;
ControlMngIf* m_pcControlMng;
LoopFilter* m_pcLoopFilter;
HeaderSymbolReadIf* m_pcHeaderSymbolReadIf;
ParameterSetMng* m_pcParameterSetMng;
PocCalculator* m_pcPocCalculator;
YuvBufferCtrl* m_pcYuvFullPelBufferCtrl;
DecodedPicBuffer* m_pcDecodedPictureBuffer;
MotionCompensation* m_pcMotionCompensation;
QuarterPelFilter* m_pcQuarterPelFilter;
DownConvert m_cDownConvert;
//----- general parameters -----
Bool m_bInitDone;
Bool m_bCreateDone;
Bool m_bWaitForIdr;
Bool m_bReconstructAll;
UInt m_uiFrameWidthInMb;
UInt m_uiFrameHeightInMb;
UInt m_uiMbNumber;
Bool m_bActive;
UInt m_uiLayerId;
//----- frame memories and control data -----
IntFrame* m_apcFrameTemp [NUM_TMP_FRAMES];
IntFrame* m_pcResidual;
IntFrame* m_pcILPrediction;
IntFrame* m_pcPredSignal;
IntFrame* m_pcBaseLayerFrame;
IntFrame* m_pcBaseLayerResidual;
MbDataCtrl* m_pcBaseLayerCtrl;
DPBUnit* m_pcCurrDPBUnit;
UInt m_uiNumLayers[2];
// TMM_ESS
ResizeParameters* m_pcResizeParameter;
// should this layer be decoded at all, and up to which FGS layer should be decoded
Int m_uiQualityLevelForPrediction;
#if MULTIPLE_LOOP_DECODING
Bool m_bCompletelyDecodeLayer;
#endif
// ROI DECODE ICU/ETRI
Int m_iMbProcessed;
Bool m_bIsNewPic;
};
H264AVC_NAMESPACE_END
#endif // !defined(AFX_GOPDECODER_H__339878FC_BA98_4ABE_8530_E1676196576F__INCLUDED_)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?