📄 sequencestructure.h
字号:
UInt& ruiNumberOfParts );
static ErrVal extractPart ( const String& rcString,
String& rcPartString,
UInt& ruiStartPos );
private:
static const String sm_cSetOfTypes;
static const String sm_cSetOfDigits;
static const String sm_cSetOfPartStart;
};
class SequenceStructure
{
private:
class FrameDescriptor
{
public:
FrameDescriptor ();
~FrameDescriptor ();
Void uninit ();
ErrVal init ( const String& rcString,
UInt uiLastAnchorFrameNumIncrement );
ErrVal reduceFramesSkipped ( UInt uiNotCoded );
ErrVal check () const;
Bool isIDR () const;
Bool isSkipped () const;
Bool isCoded () const;
Bool isReference () const;
Bool isAnchor () const;
Bool isKeyPicture () const;
UInt getIncrement () const;
UInt getFramesSkipped () const;
ErrVal setFrameSpec ( FrameSpec& rcFrameSpec,
UInt uiFrameNumOffset ) const;
private:
Bool m_bInit;
UChar m_ucType;
UInt m_uiFrameNumIncrement;
Bool m_bAnchor;
UInt m_uiFramesSkipped;
Bool m_bKeyPicture;
UInt m_uiLayer;
MmcoBuffer* m_pcMmcoBuf;
RplrBuffer* m_apcRplrBuf[2];
};
class SequencePart
{
public:
SequencePart () {}
virtual ~SequencePart () {}
virtual Void uninit () = 0;
virtual ErrVal init ( const String& rcString) = 0;
virtual Void reset () = 0;
virtual ErrVal check () = 0;
virtual Bool isFirstIDR () const = 0;
virtual UInt getMinDPBSizeRef () const = 0;
virtual UInt getMinDPBSizeNonRef () const = 0;
virtual Bool getNextFrameSpec ( FrameSpec& rcFrameSpec,
UInt& uiFrameNumPartOffset ) = 0;
};
class FrameSequencePart : public SequencePart
{
public:
FrameSequencePart ();
virtual ~FrameSequencePart ();
Void uninit ();
ErrVal init ( const String& rcString );
Void reset ();
ErrVal check ();
Bool isFirstIDR () const;
UInt getMinDPBSizeRef () const;
UInt getMinDPBSizeNonRef () const;
Bool getNextFrameSpec ( FrameSpec& rcFrameSpec,
UInt& uiFrameNumPartOffset );
private:
Bool m_bInit;
FrameDescriptor* m_pacFrameDescriptor;
UInt m_uiNumberOfFrames;
UInt m_uiCurrentFrame;
UInt m_uiNumberOfRepetitions;
UInt m_uiCurrentRepetition;
UInt m_uiMinDPBSizeRef;
UInt m_uiMinDPBSizeNonRef;
};
class GeneralSequencePart : public SequencePart
{
public:
GeneralSequencePart ();
virtual ~GeneralSequencePart ();
Void uninit ();
ErrVal init ( const String& rcString );
Void reset ();
ErrVal check ();
Bool isFirstIDR () const;
UInt getMinDPBSizeRef () const;
UInt getMinDPBSizeNonRef () const;
Bool getNextFrameSpec ( FrameSpec& rcFrameSpec,
UInt& uiFrameNumPartOffset );
private:
Bool m_bInit;
SequencePart** m_papcSequencePart;
UInt m_uiNumberOfParts;
UInt m_uiCurrentPart;
UInt m_uiNumberOfRepetitions;
UInt m_uiCurrentRepetition;
UInt m_uiMinDPBSizeRef;
UInt m_uiMinDPBSizeNonRef;
};
protected:
SequenceStructure ();
virtual ~SequenceStructure ();
public:
static ErrVal create ( SequenceStructure*& rpcSequenceStructure );
ErrVal destroy ();
ErrVal uninit ();
ErrVal init ( const String& rcString,
UInt uiNumberOfFrames );
Void reset ();
ErrVal check ();
const FrameSpec& getFrameSpec ();
const FrameSpec& getNextFrameSpec();
static Bool checkString ( const String& rcString );
static ErrVal debugOutput ( const String& rcString,
UInt uiNumberOfFrames,
FILE* pcFile );
UInt getNumberOfTotalFrames () const;
UInt getNumberOfIDRFrames () const;
UInt getNumberOfIntraFrames () const;
UInt getNumberOfInterFrames () const;
UInt getNumberOfRefFrames () const;
UInt getNumberOfCodedFrames () const;
UInt getMaxAbsFrameDiffRef () const;
UInt getMinDelay () const;
UInt getNumTemporalLayers () const;
private:
Bool xIsFirstIDR ();
Void xInitParameters ();
ErrVal xGetNextValidFrameSpec ( FrameSpec& rcFrameSpec,
UInt uiTotalFrames );
private:
Bool m_bInit;
UInt m_uiNumberOfTotalFrames;
UInt m_uiNumberOfFramesProcessed;
UInt m_uiFrameNumPartOffset;
SequencePart* m_pcSequencePart;
FrameSpec m_cFrameSpec;
UInt m_uiNumIDR;
UInt m_uiNumIntra;
UInt m_uiNumRef;
UInt m_uiNumCoded;
UInt m_uiMaxAbsFrameDiffRef;
UInt m_uiMinDelay;
UInt m_uiMaxLayer;
};
H264AVC_NAMESPACE_END
#endif // !defined(AFX_SEQUENCESTRUCTURE_H__268768B8_4D1D_484A_904E_586985833BAC__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -