📄 sliceheaderbase.h
字号:
RNOK( pcReadIf->getFlag( m_bRefPicListReorderingFlag, "RIR: ref_pic_list_reordering_flag" ) );
ROFRS( m_bRefPicListReorderingFlag, Err::m_nOK );
Bool bCont = true;
UInt uiIndex = 0;
for( ; uiIndex <= uiNumRefIdx && bCont; uiIndex++ )
{
RNOK( get( uiIndex ).read( pcReadIf, bCont ) );
}
ROTR( uiIndex > uiNumRefIdx && bCont, Err::m_nInvalidParameter );
return Err::m_nOK;
}
Void clear () { setAll( Rplr() ); }
Bool getRefPicListReorderingFlag() const { return m_bRefPicListReorderingFlag; }
Void setRefPicListReorderingFlag( Bool bFlag ) { m_bRefPicListReorderingFlag = bFlag; }
Void copy( const StatBuf<Rplr,32>& rcSrcRplrBuffer)
{
for( Int n = 0; n < 32; n++ )
{
get(n) = rcSrcRplrBuffer.get( n );
ROTVS( get(n).isEnd() );
}
}
protected:
Bool m_bRefPicListReorderingFlag;
};
enum MmcoOp
{
MMCO_END = 0,
MMCO_SHORT_TERM_UNUSED = 1,
MMCO_LONG_TERM_UNUSED = 2,
MMCO_ASSIGN_LONG_TERM = 3,
MMCO_MAX_LONG_TERM_IDX = 4,
MMCO_RESET = 5,
MMCO_SET_LONG_TERM = 6
};
class Mmco
{
public:
Mmco( MmcoOp eMmcoOp = MMCO_END,
UInt uiVal1 = 0,
UInt uiVal2 = 0 )
: m_eMmcoOp ( eMmcoOp )
, m_uiVal1 ( uiVal1 )
, m_uiVal2 ( uiVal2 )
{
}
Bool operator != ( const Mmco& rcMmco ) const
{
ROTRS( m_eMmcoOp != rcMmco.m_eMmcoOp, true );
ROTRS( m_uiVal1 != rcMmco.m_uiVal1, true );
ROTRS( m_uiVal2 != rcMmco.m_uiVal2, true );
return false;
}
Mmco& operator = ( const Mmco& rcMmco )
{
m_eMmcoOp = rcMmco.m_eMmcoOp;
m_uiVal1 = rcMmco.m_uiVal1;
m_uiVal2 = rcMmco.m_uiVal2;
return *this;
}
const MmcoOp& getCommand( UInt& ruiVal1,
UInt& ruiVal2 ) const { ruiVal1 = m_uiVal1; ruiVal2 = m_uiVal2; return m_eMmcoOp; }
Bool isCommand ( MmcoOp eMmcoOp ) const { return eMmcoOp == m_eMmcoOp; }
UInt getVal1 () const { return m_uiVal1; }
UInt getVal2 () const { return m_uiVal2; }
Bool isEnd () const { return MMCO_END == m_eMmcoOp; }
ErrVal write( HeaderSymbolWriteIf* pcWriteIf,
Bool& rbContinue ) const
{
RNOK( pcWriteIf->writeUvlc( m_eMmcoOp, "DRPM: memory_mangement_control_operation" ) );
rbContinue = (m_eMmcoOp != MMCO_END);
if( (m_eMmcoOp != MMCO_END) && (m_eMmcoOp != MMCO_RESET) )
{
RNOK( pcWriteIf->writeUvlc( m_uiVal1, "DRPM: MMCO Param" ) );
if( m_eMmcoOp == MMCO_ASSIGN_LONG_TERM )
{
RNOK( pcWriteIf->writeUvlc( m_uiVal2, "DRPM: MMCO Param" ) );
}
}
return Err::m_nOK;
}
ErrVal read( HeaderSymbolReadIf* pcReadIf,
Bool& rbContinue )
{
UInt uiCommand;
RNOK( pcReadIf->getUvlc( uiCommand, "DRPM: memory_mangement_control_operation" ) );
ROTR( MMCO_SET_LONG_TERM < uiCommand, Err::m_nInvalidParameter );
m_eMmcoOp = MmcoOp( uiCommand );
rbContinue = (m_eMmcoOp != MMCO_END);
if( (m_eMmcoOp != MMCO_END) && (m_eMmcoOp != MMCO_RESET) )
{
RNOK( pcReadIf->getUvlc( m_uiVal1, "DRPM: MMCO Param" ) );
if( m_eMmcoOp == MMCO_ASSIGN_LONG_TERM )
{
RNOK( pcReadIf->getUvlc( m_uiVal2, "DRPM: MMCO Param" ) );
}
}
return Err::m_nOK;
}
private:
MmcoOp m_eMmcoOp;
UInt m_uiVal1;
UInt m_uiVal2;
};
class H264AVCCOMMONLIB_API MmcoBuffer :
public StatBuf<Mmco,32>
{
public:
Void clear()
{
setAll( MmcoOp() );
}
ErrVal write( HeaderSymbolWriteIf* pcWriteIf ) const
{
Bool bCont = true;
for( Int iIndex = 0; bCont; iIndex++ )
{
RNOK( get( iIndex ).write( pcWriteIf, bCont ) );
}
return Err::m_nOK;
}
ErrVal read( HeaderSymbolReadIf* pcReadIf )
{
Bool bCont = true;
for( Int iIndex = 0; bCont; iIndex++ )
{
RNOK( get( iIndex ).read( pcReadIf, bCont ) );
}
return Err::m_nOK;
}
Void copy( const StatBuf<Mmco,32>& rcSrcMmcoBuffer)
{
for( Int n = 0; n < 32; n++ )
{
get(n) = rcSrcMmcoBuffer.get( n );
ROTVS( get(n).isEnd() );
}
}
};
class H264AVCCOMMONLIB_API SliceHeaderBase
{
public:
class H264AVCCOMMONLIB_API PredWeight
{
public:
PredWeight() : m_bLumaWeightFlag( false ), m_bChromaWeightFlag( false ), m_iLumaWeight( 0 ), m_iLumaOffset( 0 )
{
m_aiChromaWeight[0] = m_aiChromaWeight[1] = 0;
m_aiChromaOffset[0] = m_aiChromaOffset[1] = 0;
}
~PredWeight() {}
ErrVal createRandomParameters(); // just for encoder testing
Void scaleL1Weight( Int iDistScaleFactor )
{
iDistScaleFactor >>= 2;
if( (iDistScaleFactor > 128) || (iDistScaleFactor < -64) )
{
iDistScaleFactor = 32;
}
m_iLumaWeight = iDistScaleFactor;
m_aiChromaWeight[0] = iDistScaleFactor;
m_aiChromaWeight[1] = iDistScaleFactor;
}
Void scaleL0Weight( const PredWeight& rcPredWeightL1 )
{
m_iLumaWeight = 64 - rcPredWeightL1.m_iLumaWeight;
m_aiChromaWeight[0] = 64 - rcPredWeightL1.m_aiChromaWeight[0];
m_aiChromaWeight[1] = 64 - rcPredWeightL1.m_aiChromaWeight[1];
}
ErrVal init( Int iLumaWeight, Int iChromaCbWeight, Int iChromaCrWeight )
{
m_iLumaWeight = iLumaWeight;
m_aiChromaWeight[0] = iChromaCbWeight;
m_aiChromaWeight[1] = iChromaCrWeight;
return Err::m_nOK;
}
//TMM_WP
ErrVal initOffsets( Int iLumaOffset, Int iChromaCbOffset, Int iChromaCrOffset )
{
m_iLumaOffset = iLumaOffset;
m_aiChromaOffset[0] = iChromaCbOffset;
m_aiChromaOffset[1] = iChromaCrOffset;
return Err::m_nOK;
}
ErrVal setOffsets( const Double *pafOffsets );
ErrVal getOffsets( Double *afOffset);
//TMM_WP
Bool getLumaWeightFlag() const { return m_bLumaWeightFlag; }
Bool getChromaWeightFlag() const { return m_bChromaWeightFlag; }
Int getLumaWeight() const { return m_iLumaWeight; }
Int getLumaOffset() const { return m_iLumaOffset; }
Int getChromaWeight( UInt uiChromaPlane ) const { return m_aiChromaWeight[uiChromaPlane]; }
Int getChromaOffset( UInt uiChromaPlane ) const { return m_aiChromaOffset[uiChromaPlane]; }
Void setLumaWeightFlag( Bool bLumaWeightFlag ) { m_bLumaWeightFlag = bLumaWeightFlag; }
Void setChromaWeightFlag( Bool bChromaWeightFlag ) { m_bChromaWeightFlag = bChromaWeightFlag; }
Void setLumaWeight( Int iLumaWeight ) { m_iLumaWeight = iLumaWeight; }
Void setLumaOffset( Int iLumaOffset ) { m_iLumaOffset = iLumaOffset; }
Void setChromaWeight( UInt uiChromaPlane, Int iChromaWeight ) { m_aiChromaWeight[uiChromaPlane] = iChromaWeight; }
Void setChromaOffset( UInt uiChromaPlane, Int iChromaOffset ) { m_aiChromaOffset[uiChromaPlane] = iChromaOffset; }
//TMM_WP
ErrVal getPredWeights( Double *afWeight);
ErrVal setPredWeightsAndFlags( const Int iLumaScale,
const Int iChromaScale,
const Double *pfWeight,
Double fDiscardThr );
//TMM_WP
ErrVal write( HeaderSymbolWriteIf* pcWriteIf ) const;
ErrVal read ( HeaderSymbolReadIf* pcReadIf );
Bool operator!=( const PredWeight& rcPredWeight ) const
{
ROTRS( m_bLumaWeightFlag != rcPredWeight.m_bLumaWeightFlag, true );
ROTRS( m_bChromaWeightFlag != rcPredWeight.m_bChromaWeightFlag, true );
ROTRS( m_iLumaWeight != rcPredWeight.m_iLumaWeight, true );
ROTRS( m_iLumaOffset != rcPredWeight.m_iLumaOffset, true );
ROTRS( m_aiChromaWeight[0] != rcPredWeight.m_aiChromaWeight[0], true );
ROTRS( m_aiChromaWeight[1] != rcPredWeight.m_aiChromaWeight[1], true );
ROTRS( m_aiChromaOffset[0] != rcPredWeight.m_aiChromaOffset[0], true );
ROTRS( m_aiChromaOffset[1] != rcPredWeight.m_aiChromaOffset[1], true );
return false;
}
Bool operator==( const PredWeight& rcPredWeight ) const
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -