📄 framemng.h
字号:
{
return iter;
}
}
return end();
}
Void setRefFrameListFGSMVCView( RefPicList<Frame*>& rcRefFrameList,
SliceHeader& rcSH, enum ListIdx eListIdx ) // memory
{
Bool bAnchor =rcSH.getAnchorPicFlag() ;
UInt n = rcSH.getSPS().getSpsMVC()->getNumRefsForListX(rcSH.getViewId(), eListIdx, bAnchor);
for( UInt ui = 0; ui < n; ui++)
{
for( iterator iter = begin(); iter != end(); iter++ )
{
FrameUnit* pcFU = (*iter);
if( pcFU->isUsed() && !pcFU->getBaseRep() ) //JVT-S036 lsj
{
if((/*pcFU->getFGSPicBuffer() || */pcFU->getPicBuffer()) &&
rcSH.getSPS().getSpsMVC()->getViewIDByViewIndex(rcSH.getViewId(), ui, eListIdx, bAnchor)== pcFU->getFrame().getViewId()
&& rcSH.getPoc() == pcFU->getFrame().getPOC() && pcFU->getFrame().getInterViewFlag()) //JVT-W056
{
rcRefFrameList.add( & pcFU->getFrame() ); // rcRefFrameList.add( &( pcFU->getFGSPicBuffer() ? pcFU->getFGSFrame() : pcFU->getFrame() ) );
}
}
}
}
}
Void setRefFrameListFGSMVCViewNonRef(RefPicList<Frame*>& rcRefFrameList,
SliceHeader& rcSH, enum ListIdx eListIdx ) //memory
{
Bool bAnchor =rcSH.getAnchorPicFlag() ;
UInt n = rcSH.getSPS().getSpsMVC()->getNumRefsForListX(rcSH.getViewId(), eListIdx, bAnchor);
for( UInt ui = 0; ui < n; ui++)
{
for( iterator iter = begin(); iter != end(); iter++ )
{
FrameUnit* pcFU = (*iter);
if((/*pcFU->getFGSPicBuffer() || */pcFU->getPicBuffer()) &&
rcSH.getSPS().getSpsMVC()->getViewIDByViewIndex(rcSH.getViewId(), ui, eListIdx, bAnchor) == pcFU->getFrame().getViewId()
&& rcSH.getPoc() == pcFU->getFrame().getPOC() )
{
//rcRefFrameList.add( &( pcFU->getFGSPicBuffer() ? pcFU->getFGSFrame() : pcFU->getFrame() ) );
rcRefFrameList.add( & pcFU->getFrame() ); // memory
}
}
}
}
//JVT-V043 }}
};
typedef FUList::iterator FUIter;
typedef FUList::reverse_iterator FURIter;
class FrameUnitBuffer
{
public:
FrameUnitBuffer();
~FrameUnitBuffer();
ErrVal init( YuvBufferCtrl* pcYuvFullPelBufferCtrl, YuvBufferCtrl* pcYuvHalfPelBufferCtrl );
ErrVal uninit();
ErrVal getFrameUnit( FrameUnit*& rpcFrameUnit );
ErrVal releaseFrameUnit( FrameUnit* pcFrameUnit );
YuvBufferCtrl* getYuvFullPelBufferCtrl() { return m_pcYuvFullPelBufferCtrl; }
protected:
FUList m_cFreeList;
YuvBufferCtrl* m_pcYuvFullPelBufferCtrl;
YuvBufferCtrl* m_pcYuvHalfPelBufferCtrl;
};
class PocOrder
{
public:
Int operator() ( const Frame* pcFrame1, const Frame* pcFrame2 )
{
return pcFrame1->getPOC() < pcFrame2->getPOC();
}
};
protected:
FrameMng ();
virtual ~FrameMng ();
public:
FrameUnit* getCurrentFrameUnit () { return m_pcCurrentFrameUnit; }
IntFrame* getRefinementIntFrame () { return m_pcRefinementIntFrame; }
IntFrame* getRefinementIntFrame2() { return m_pcRefinementIntFrameSpatial; }
IntFrame* getPredictionIntFrame() { return m_pcPredictionIntFrame; }
ErrVal xSlidingWindowUpdateBase ( UInt mCurrFrameNum); //JVT-S036
ErrVal xMMCOUpdateBase ( SliceHeader* rcSH ); //JVT-S036
ErrVal initSlice( SliceHeader *rcSH );
ErrVal initSPS( const SequenceParameterSet& rcSPS );
ErrVal initFrame( SliceHeader& rcSH, PicBuffer* pcPicBuffer );
ErrVal initPic( SliceHeader& rcSH );
static ErrVal create ( FrameMng*& rpcFrameMng );
static UInt MaxRefFrames ( UInt uiLevel, UInt uiNumMbs );
ErrVal storePicture( const SliceHeader& rcSH );
// ErrVal storeFGSPicture( PicBuffer* pcPicBuffer );
ErrVal setRefPicLists( SliceHeader& rcSH, Bool bDoNotRemap );
ErrVal destroy ();
ErrVal init ( YuvBufferCtrl* pcYuvFullPelBufferCtrl, YuvBufferCtrl* pcYuvHalfPelBufferCtrl = NULL, QuarterPelFilter* pcQuarterPelFilter = NULL );
ErrVal uninit ();
ErrVal RefreshOrederedPOCList (); //JVT-S036
ErrVal setPicBufferLists ( PicBufferList& rcPicBufferOutputList, PicBufferList& rcPicBufferUnusedList );
ErrVal outputAll ();
ErrVal getRecYuvBuffer ( YuvPicBuffer*& rpcRecYuvBuffer );
FrameUnit* getReconstructedFrameUnit( Int iPoc );
YuvBufferCtrl* getYuvFullPelBufferCtrl() { return m_cFrameUnitBuffer.getYuvFullPelBufferCtrl(); }
//void SetCodeAsVFrameFlag(const bool flag) { m_codeAsVFrame = flag; }
//bool CodeAsVFrameP() const {return m_codeAsVFrame; }
protected:
ErrVal xCheckMissingFrameNums( SliceHeader& rcSH );
ErrVal xSetReferenceLists ( SliceHeader& rcSH );
ErrVal xSetReferenceListsMVC ( SliceHeader& rcSH );
ErrVal xClearListsIDR ( const SliceHeader& rcSH );
ErrVal xManageMemory ( const SliceHeader& rcSH );
ErrVal xSlidingWindowUpdate ();
ErrVal xStoreCurrentPicture ( const SliceHeader& rcSH ); // MMCO 6
ErrVal xReferenceListRemapping ( SliceHeader& rcSH, ListIdx eListIdx );
ErrVal xMmcoMarkShortTermAsUnused( const FrameUnit* pcCurrFrameUnit, UInt uiDiffOfPicNums );
ErrVal xMmcoMarkShortTermAsUnusedBase( const FrameUnit* pcCurrFrameUnit, UInt uiDiffOfPicNums ); //JVT-S036
ErrVal xSetOutputListMVC ( FrameUnit* pcFrameUnit, UInt uiNumOfViews );
private:
UInt xSortPocOrderedList ();
ErrVal xSetInitialReferenceListPFrame ( SliceHeader& rcSH );
ErrVal xSetInitialReferenceListBFrame ( SliceHeader& rcSH );
__inline ErrVal xRemoveFromRefList( FUList& rcFUList, FUIter iter );
__inline ErrVal xRemoveFromRefList( FUList& rcFUList );
__inline ErrVal xRemove ( FrameUnit* pcFrameUnit );
__inline ErrVal xAddToFreeList ( FrameUnit* pcFrameUnit );
__inline ErrVal xAddToFreeList ( FUList& rcFUList );
__inline Bool xFindAndErase ( FUList& rcFUList, FrameUnit* pcFrameUnit );
ErrVal xMmcoMarkShortTermAsUnusedMVC( const FrameUnit* pcCurrFrameUnit, UInt uiDiffOfPicNums, UInt uiCurrViewId );
ErrVal xDumpRefList( ListIdx eListIdx, SliceHeader& rcSH );
ErrVal xSetBFrameListMVC ( SliceHeader& rcSH);
ErrVal xSetPFrameListMVC ( SliceHeader& rcSH);
private:
Bool m_bInitDone;
QuarterPelFilter* m_pcQuarterPelFilter;
UInt m_uiPrecedingRefFrameNum;
PicBufferList m_cPicBufferOutputList;
PicBufferList m_cPicBufferUnusedList;
FrameUnit* m_pcOriginalFrameUnit;
FrameUnit* m_pcCurrentFrameUnit;
FrameUnit* m_pcCurrentFrameUnitBase; //JVT-S036
RefPicList<Frame*> m_cPocOrderedFrameList;
Int m_iEntriesInDPB;
Int m_iMaxEntriesinDPB;
UInt m_uiNumRefFrames;
UInt m_uiMaxFrameNumCurr;
UInt m_uiMaxFrameNumPrev;
FUList m_cShortTermList;
FUList m_cNonRefList;
FUList m_cOrderedPOCList;
FrameUnitBuffer m_cFrameUnitBuffer;
static UInt m_uiDBPMemory[256];
IntFrame* m_pcRefinementIntFrame;
IntFrame* m_pcRefinementIntFrameSpatial;
IntFrame* m_pcPredictionIntFrame;
Bool m_codeAsVFrame;
UInt m_uiLastViewId;
};
#if defined( WIN32 )
# pragma warning( default: 4251 )
#endif
H264AVC_NAMESPACE_END
#endif // !defined(AFX_FRAMEMNG_H__FCFD4695_2766_4D95_BFD2_B2496827BC03__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -