📄 h264avcdecoder.h
字号:
ErrVal getBaseLayerDataAvailability ( IntFrame*& pcFrame,
IntFrame*& pcResidual,
MbDataCtrl*& pcMbDataCtrl,
Bool& bBaseDataAvailable,
Bool& rbSpatialScalability,
UInt uiLayerId,
UInt uiBaseLayerId,
Int iPoc,
UInt uiBaseQualityLevel );
ErrVal getBaseLayerPWTable ( SliceHeader::PredWeightTable*& rpcPredWeightTable,
UInt uiBaseLayerId,
ListIdx eListIdx,
Int iPoc );
ErrVal replaceSNRCGSBaseFrame ( IntFrame* pcELFrame,
const PicType ePicType, //TMM_INTERLACE
const Bool bFrameMbsOnlyFlag //TMM_INTERLACE
); // MGS fix by Heiko Schwarz
Void setBaseAVCCompatible ( Bool bAVCCompatible ) { m_bBaseLayerIsAVCCompatible = bAVCCompatible; }
Void setReconstructionLayerId ( UInt uiLayerId ) { m_uiRecLayerId = uiLayerId; }
Void setVeryFirstSPS ( const SequenceParameterSet* pcSPS ) { m_pcVeryFirstSPS = pcSPS; }
ErrVal calculatePoc ( NalUnitType eNalUnitType,
SliceHeader& rcSliceHeader,
Int& slicePoc );
ErrVal checkSliceLayerDependency ( BinDataAccessor* pcBinDataAccessor,
Bool& bFinishChecking);
// TMM_EC {{
Bool checkSEIForErrorConceal();
ErrVal checkSliceGap ( BinDataAccessor* pcBinDataAccessor,
MyList<BinData*>& cVirtualSliceList );
ErrVal setec( UInt uiErrorConceal)
{
m_eErrorConceal = (ERROR_CONCEAL)(EC_NONE + uiErrorConceal);
if ( m_eErrorConceal == EC_NONE) m_bNotSupport = true;
return Err::m_nOK;
}
ErrVal getBaseLayerUnit(UInt uiBaseLayerId,
Int iPoc,
DPBUnit *&pcBaseDPBUnit);
UInt m_uiNextFrameNum;
UInt m_uiNextLayerId;
UInt m_uiNextPoc;
UInt m_uiNextTempLevel;
UInt *m_pauiPocInGOP[MAX_LAYERS];
UInt *m_pauiFrameNumInGOP[MAX_LAYERS];
UInt *m_pauiTempLevelInGOP[MAX_LAYERS];
UInt m_uiDecompositionStages[MAX_LAYERS];
UInt m_uiNumLayers;
UInt m_uiFrameIdx[MAX_LAYERS];
ERROR_CONCEAL m_eErrorConceal;
UInt m_uiDefNumLayers;
UInt m_uiDefDecompositionStages[MAX_LAYERS];
UInt m_uiMaxDecompositionStages;
UInt m_uiMaxGopSize;
UInt m_uiGopSize[MAX_LAYERS];
Bool m_bNotSupport;
UInt m_uiMaxLayerId;
UInt m_baseMode;
// TMM_EC }}
Void setQualityLevelForPrediction( UInt ui ) { m_uiQualityLevelForPrediction = ui; }
UInt isNonRequiredPic() { return m_uiNonRequiredPic; } //NonRequired JVT-Q066
Bool isRedundantPic() { return m_bRedundantPic; } // JVT-Q054 Red. Picture
ErrVal checkRedundantPic(); // JVT-Q054 Red. Picture
Void setFGSRefInAU(Bool &b); //JVT-T054
//JVT-T054_FIX{
ErrVal UpdateAVCList(SliceHeader *pcSliceHeader);
ErrVal getAVCFrame( IntFrame*& pcFrame,
IntFrame*& pcResidual,
MbDataCtrl*& pcMbDataCtrl,
Int iPoc);
MCTFDecoder *getMCTFDecoder(UInt uiLayer) { return m_apcMCTFDecoder[uiLayer];}
Bool getBaseSVCActive() { return m_bBaseSVCActive;} //JVT-T054_FIX
//JVt-T054}
#ifdef SHARP_AVC_REWRITE_OUTPUT
ErrVal xStartAvcRewrite(UChar*& avcRewriteBinDataBuffer, BinData*& avcRewriteBinData, ExtBinDataAccessor* avcRewriteBinDataAcessor);
ErrVal xCloseAvcRewriteEncoder();
ErrVal xInitSliceForAvcRewriteCoding(const SliceHeader& rcSH);
bool xWriteAvcRewriteParameterSets(NalUnitType nal_unit_type, UInt index);
bool xGetAvcRewriteFlag();
#endif
protected:
ErrVal xInitSlice ( SliceHeader* pcSliceHeader );
ErrVal xStartSlice ( Bool& bPreParseHeader, Bool& bFirstFragment, Bool& bLastFragment, Bool* pbFgsParallelDecoding, Bool& bDiscardable ); //FRAG_FIX //TMM_EC//JVT-S036 lsj
// TMM_EC {{
ErrVal xProcessSliceVirtual ( SliceHeader& rcSH,
SliceHeader* pcPrevSH,
PicBuffer* & rpcPicBuffer);
// TMM_EC }}
ErrVal xProcessSlice ( SliceHeader& rcSH,
SliceHeader* pcPrevSH,
PicBuffer*& rpcPicBuffer,
Bool bHighestLayer); //JVT-T054
ErrVal xReconstructLastFGS (Bool bHighestLayer, SliceHeader* pcRCDOSliceHeader); //JVT-T054
ErrVal xDecodeFGSRefinement ( SliceHeader*& rpcSliceHeader,
PicBuffer*& rpcPicBuffer );
ErrVal xZeroIntraMacroblocks ( IntFrame* pcFrame,
MbDataCtrl* pcMbDataCtrl,
SliceHeader* pcSliceHeader );
ErrVal setDiffPrdRefLists ( RefFrameList& diffPrdRefList,
YuvBufferCtrl* pcYuvFullPelBufferCtrl);
ErrVal freeDiffPrdRefLists ( RefFrameList& diffPrdRefList);
ErrVal xInitParameters(SliceHeader* pcSliceHeader);
protected:
SliceReader* m_pcSliceReader;
SliceDecoder* m_pcSliceDecoder;
FrameMng* m_pcFrameMng;
NalUnitParser* m_pcNalUnitParser;
ControlMngIf* m_pcControlMng;
LoopFilter* m_pcLoopFilter;
HeaderSymbolReadIf* m_pcHeaderSymbolReadIf;
ParameterSetMng* m_pcParameterSetMng;
PocCalculator* m_pcPocCalculator;
SliceHeader* m_pcSliceHeader;
SliceHeader* m_pcPrefixSliceHeader;//prefix unit
SliceHeader* m_pcPrevSliceHeader;
SliceHeader* m_pcTempSliceHeader; //EIDR bug-fix
SliceHeader* m_pcSliceHeader_backup; //JVT-Q054 Red. Picture
Bool m_bFirstSliceHeaderBackup; //JVT-Q054 Red. Picture
Bool m_bRedundantPic; // JVT-Q054 Red. Picture
Bool m_bInitDone;
Bool m_bLastFrame;
Bool m_bFrameDone;
MotionCompensation* m_pcMotionCompensation;
MCTFDecoder* m_apcMCTFDecoder[MAX_LAYERS];
RQFGSDecoder* m_pcRQFGSDecoder;
PicBuffer* m_pcFGSPicBuffer;
Bool m_bEnhancementLayer;
Bool m_bSpatialScalability;
Bool m_bActive;
Bool m_bReconstruct;
Bool m_bBaseLayerIsAVCCompatible;
Bool m_bNewSPS;
UInt m_uiRecLayerId;
UInt m_uiLastLayerId;
const SequenceParameterSet* m_pcVeryFirstSPS;
SliceHeader* m_pcVeryFirstSliceHeader;
Bool m_bCheckNextSlice;
Bool m_bDependencyInitialized;
Int m_iLastPocChecked;
Int m_iFirstSlicePoc;
Int m_iFirstLayerIdx;
Int m_iLastLayerIdx;
Bool m_bBaseLayerAvcCompliant;
Int m_auiBaseLayerId[MAX_LAYERS];
Int m_auiBaseQualityLevel[MAX_LAYERS];
// should this layer be decoded at all, and up to which FGS layer should be decoded
UInt m_uiQualityLevelForPrediction;
Bool m_bFGSCodingMode;
UInt m_uiGroupingSize;
UInt m_uiPosVect[16];
SEI::NonRequiredSei* m_pcNonRequiredSei;
UInt m_uiNonRequiredSeiReadFlag;
UInt m_uiNonRequiredSeiRead;
UInt m_uiNonRequiredPic; //NonRequired JVT-Q066
UInt m_uiPrevPicLayer;
UInt m_uiCurrPicLayer;
//JVT-P031
UInt m_uiFirstFragmentPPSId;
UInt m_uiFirstFragmentNumMbsInSlice;
Bool m_bFirstFragmentFGSCompSep;
UInt m_uiLastFragOrder;
UInt m_uiNumberOfFragment[MAX_LAYERS][MAX_QUALITY_LEVELS];
UInt m_uiNumberOfSPS;
UInt m_uiSPSId[MAX_LAYERS];
UInt m_uiDecodedLayer;
UInt m_uiNumOfNALInAU;
SliceHeader* m_pcSliceHeaderStored;
//~JVT-P031
SliceHeader::PredWeightTable m_acLastPredWeightTable[2];
// ROI DECODE ICU/ETRI
int m_iCurNalSpatialLayer;
int m_iNextNalSpatialLayer;
int m_iCurNalPOC;
int m_iNextNalPOC;
int m_iCurNalFirstMb;
bool m_bCurNalIsEndOfPic;
bool m_bFirstFGS;
#ifdef SHARP_AVC_REWRITE_OUTPUT
H264AVCEncoder* m_pcAvcRewriteEncoder;
UChar* m_avcRewriteBinDataBuffer;
BinData* m_avcRewriteBindata;
ExtBinDataAccessor* m_avcRewriteBinDataAccessor;
int m_avcRewriteBufsize;
bool m_avcRewriteFlag;
#endif
//JVT-T054{
Bool m_bLastNalInAU;
Bool m_bFGSRefInAU;
Bool m_bCGSSNRInAU;
//JVT-T054}
Bool m_bBaseSVCActive; //JVT-T054_FIX
Bool m_bLastFrameReconstructed; //JVT-T054_FIX
public:
MbDataCtrl* m_pcBaseLayerCtrlEL;
};
H264AVC_NAMESPACE_END
#endif // !defined(AFX_H264AVCDECODER_H__FBF0345F_A5E5_4D18_8BEC_4A68790901F7__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -