📄 sei.cpp
字号:
SEI::ScalableSeiLayersNotPresent::~ScalableSeiLayersNotPresent ()
{
}
ErrVal
SEI::ScalableSeiLayersNotPresent::create( ScalableSeiLayersNotPresent*& rpcSeiMessage )
{
rpcSeiMessage = new ScalableSeiLayersNotPresent();
ROT( NULL == rpcSeiMessage )
return Err::m_nOK;
}
//TMM_FIX
ErrVal
SEI::ScalableSeiLayersNotPresent::destroy()
{
delete this ;
return Err::m_nOK;
}
//TMM_FIX
ErrVal
SEI::ScalableSeiLayersNotPresent::write( HeaderSymbolWriteIf *pcWriteIf )
{
UInt i;
RNOK ( pcWriteIf->writeUvlc(m_uiNumLayers, "ScalableSEILayersNotPresent: num_layers" ) );
for( i = 0; i < m_uiNumLayers; i++ )
{
RNOK ( pcWriteIf->writeCode( m_auiLayerId[i], 8, "ScalableSEILayersNotPresent: layer_id" ) );
}
return Err::m_nOK;
}
ErrVal
SEI::ScalableSeiLayersNotPresent::read ( HeaderSymbolReadIf *pcReadIf )
{
UInt i;
RNOK ( pcReadIf->getUvlc( m_uiNumLayers , "ScalableSEILayersNotPresent: num_layers" ) );
for ( i = 0; i < m_uiNumLayers; i++ )
{
RNOK ( pcReadIf->getCode( m_auiLayerId[i], 8, "ScalableSEILayersNotPresent: layer_id" ) );
}
return Err::m_nOK;
}
//////////////////////////////////////////////////////////////////////////
//
// SCALABLE SEI DEPENDENCY CHANGE
//
//////////////////////////////////////////////////////////////////////////
SEI::ScalableSeiDependencyChange::ScalableSeiDependencyChange (): SEIMessage ( SCALABLE_SEI_DEPENDENCY_CHANGE )
{
}
SEI::ScalableSeiDependencyChange::~ScalableSeiDependencyChange ()
{
}
ErrVal
SEI::ScalableSeiDependencyChange::create( ScalableSeiDependencyChange*& rpcSeiMessage )
{
rpcSeiMessage = new ScalableSeiDependencyChange();
ROT( NULL == rpcSeiMessage )
return Err::m_nOK;
}
ErrVal
SEI::ScalableSeiDependencyChange::write( HeaderSymbolWriteIf *pcWriteIf )
{
UInt i, j;
ROF( m_uiNumLayersMinus1+1 );
RNOK ( pcWriteIf->writeUvlc(m_uiNumLayersMinus1, "ScalableSeiDependencyChange: num_layers_minus1" ) );
for( i = 0; i <= m_uiNumLayersMinus1; i++ )
{
RNOK ( pcWriteIf->writeCode( m_auiLayerId[i], 8, "ScalableSeiDependencyChange: layer_id" ) );
RNOK ( pcWriteIf->writeFlag( m_abLayerDependencyInfoPresentFlag[i], "ScalableSeiDependencyChange: layer_dependency_info_present_flag" ) );
if( m_abLayerDependencyInfoPresentFlag[i] )
{
RNOK ( pcWriteIf->writeUvlc(m_auiNumDirectDependentLayers[i], "ScalableSeiDependencyChange: num_directly_dependent_layers" ) );
for ( j = 0; j < m_auiNumDirectDependentLayers[i]; j++)
RNOK( pcWriteIf->writeUvlc(m_auiDirectDependentLayerIdDeltaMinus1[i][j], "ScalableSeiDependencyChange: directly_dependent_layer_id_delta_minus1" ) );
}
else
RNOK ( pcWriteIf->writeUvlc(m_auiLayerDependencyInfoSrcLayerIdDeltaMinus1[i], "ScalableSeiDependencyChange: layer_dependency_info_src_layer_id_delta_minus1" ) );
}
return Err::m_nOK;
}
ErrVal
SEI::ScalableSeiDependencyChange::read ( HeaderSymbolReadIf *pcReadIf )
{
UInt i, j;
RNOK ( pcReadIf->getUvlc(m_uiNumLayersMinus1, "ScalableSeiDependencyChange: num_layers_minus1" ) );
for( i = 0; i <= m_uiNumLayersMinus1; i++ )
{
RNOK ( pcReadIf->getCode( m_auiLayerId[i], 8, "ScalableSeiDependencyChange: layer_id" ) );
RNOK ( pcReadIf->getFlag( m_abLayerDependencyInfoPresentFlag[i], "ScalableSeiDependencyChange: layer_dependency_info_present_flag" ) );
if( m_abLayerDependencyInfoPresentFlag[i] )
{
RNOK ( pcReadIf->getUvlc(m_auiNumDirectDependentLayers[i], "ScalableSeiDependencyChange: num_directly_dependent_layers" ) );
for ( j = 0; j < m_auiNumDirectDependentLayers[i]; j++)
RNOK ( pcReadIf->getUvlc(m_auiDirectDependentLayerIdDeltaMinus1[i][j], "ScalableSeiDependencyChange: directly_dependent_layer_id_delta_minus1" ) );
}
else
RNOK ( pcReadIf->getUvlc(m_auiLayerDependencyInfoSrcLayerIdDeltaMinus1[i], "ScalableSeiDependencyChange: layer_dependency_info_src_layer_id_delta_minus1" ) );
}
return Err::m_nOK;
}
// JVT-S080 LMI }
// JVT-T073 {
//////////////////////////////////////////////////////////////////////////
//
// SCALABLE NESTING SEI
//
//////////////////////////////////////////////////////////////////////////
ErrVal
SEI::ScalableNestingSei::create( ScalableNestingSei* &rpcSeiMessage )
{
rpcSeiMessage = new ScalableNestingSei();
ROT( NULL == rpcSeiMessage );
return Err::m_nOK;
}
ErrVal
SEI::ScalableNestingSei::destroy()
{
delete this;
return Err::m_nOK;
}
ErrVal
SEI::ScalableNestingSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
UInt uiStartBits = pcWriteIf->getNumberOfWrittenBits();
UInt uiPayloadSize = 0;
UInt uiIndex;
RNOK( pcWriteIf->writeFlag( m_bAllPicturesInAuFlag, " ScalableNestingSei:AllPicturesInAuFlag " ) );
if( m_bAllPicturesInAuFlag == 0 )
{
RNOK( pcWriteIf->writeUvlc( m_uiNumPictures, "ScalableNestingSei:NumPictures" ) );
ROT( m_uiNumPictures == 0 );
for( uiIndex = 0; uiIndex < m_uiNumPictures; uiIndex++ )
{
RNOK( pcWriteIf->writeCode( m_auiDependencyId[uiIndex],3, " ScalableNestingSei:uiDependencyId " ) );
RNOK( pcWriteIf->writeCode( m_auiQualityLevel[uiIndex],2, " ScalableNestingSei:uiQualityLevel " ) );
}
}
UInt uiBits = pcWriteIf->getNumberOfWrittenBits()-uiStartBits;
UInt uiBitsMod8 = uiBits%8;
if( uiBitsMod8 )
{
RNOK( pcWriteIf->writeCode(0, 8-uiBitsMod8, "SeiNestingZeroBits" ) );
}
uiBits = pcWriteIf->getNumberOfWrittenBits();
uiPayloadSize = (uiBits+7)/8;
return Err::m_nOK;
}
ErrVal
SEI::ScalableNestingSei::read( HeaderSymbolReadIf *pcReadIf )
{
RNOK( pcReadIf->getFlag( m_bAllPicturesInAuFlag, " ScalableNestingSei:AllPicturesInAuFlag " ) );
if( m_bAllPicturesInAuFlag == 0 )
{
RNOK( pcReadIf->getUvlc( m_uiNumPictures, "ScalableNestingSei:NumPictures" ) );
ROT( m_uiNumPictures == 0 );
for( UInt uiIndex = 0; uiIndex < m_uiNumPictures; uiIndex++ )
{
RNOK( pcReadIf->getCode( m_auiDependencyId[uiIndex],3, " ScalableNestingSei:uiDependencyId " ) );
RNOK( pcReadIf->getCode( m_auiQualityLevel[uiIndex],2, " ScalableNestingSei:uiQualityLevel " ) );
}
}
RNOK( pcReadIf->readZeroByteAlign() ); //nesting_zero_bit
//Read the following SEI message
UInt uiType, uiPayloadSize;
while(1)
{
RNOK( pcReadIf->getCode( uiType, 8, " ScalableNestingSei:SEI type" ) );
if( uiType != 0xff )
break;
}
while(1)
{
RNOK( pcReadIf->getCode( uiPayloadSize, 8, " ScalableNestingSei:SEI payloadSize" ) );
if( uiPayloadSize != 0xff )
break;
}
switch( uiType )
{
case SCENE_INFO_SEI:
{
SEI::SceneInfoSei* pcSceneInfoSei;
RNOK( SEI::SceneInfoSei::create(pcSceneInfoSei) );
RNOK( pcSceneInfoSei->read(pcReadIf) );
//add some control
RNOK( pcSceneInfoSei->destroy() );
break;
}
//more case can be added here
default:
break;
}
return Err::m_nOK;
}
//Scene Info, simplified
ErrVal
SEI::SceneInfoSei::create( SceneInfoSei* &rpcSeiMessage )
{
rpcSeiMessage = new SceneInfoSei();
ROT( NULL == rpcSeiMessage );
return Err::m_nOK;
}
ErrVal
SEI::SceneInfoSei::destroy()
{
delete this;
return Err::m_nOK;
}
ErrVal
SEI::SceneInfoSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
UInt uiStart = pcWriteIf->getNumberOfWrittenBits();
UInt uiPayloadSize = 0;
Bool bSceneInfoPresentFlag = getSceneInfoPresentFlag();
RNOK( pcWriteIf->writeFlag( bSceneInfoPresentFlag, "SceneInfo: SceneInfoPresentFlag" ) );
if( bSceneInfoPresentFlag )
{
RNOK( pcWriteIf->writeUvlc( getSceneId(), "SceneInfo: SceneId" ) );
RNOK( pcWriteIf->writeUvlc( getSceneTransitionType(), "SceneInfo: SceneTransitionType" ) );
if( getSceneTransitionType() > 3 )
{
RNOK( pcWriteIf->writeUvlc( getSecondSceneId(), "SceneInfo: SecondSceneId" ) );
}
}
uiPayloadSize = ( pcWriteIf->getNumberOfWrittenBits() - uiStart + 7 )/8;
return Err::m_nOK;
}
ErrVal
SEI::SceneInfoSei::read( HeaderSymbolReadIf *pcReadIf )
{
RNOK( pcReadIf->getFlag( m_bSceneInfoPresentFlag, "SceneInfo: bSceneInfoPresentFlag" ) );
if( m_bSceneInfoPresentFlag )
{
RNOK( pcReadIf->getUvlc( m_uiSceneId, "SceneInfo: SceneId" ) );
RNOK( pcReadIf->getUvlc( m_uiSceneTransitionType, "SceneInfo: SceneTransitionType " ) );
if( m_uiSceneTransitionType > 3 )
{
RNOK( pcReadIf->getUvlc( m_uiSecondSceneId, "SceneInfo: SecondSceneId" ) );
}
}
return Err::m_nOK;
}
// JVT-T073 }
// PR slice component info
ErrVal
SEI::PRComponentInfoSei::create( PRComponentInfoSei* &rpcSeiMessage )
{
rpcSeiMessage = new PRComponentInfoSei();
ROT( NULL == rpcSeiMessage );
return Err::m_nOK;
}
ErrVal
SEI::PRComponentInfoSei::destroy()
{
delete this;
return Err::m_nOK;
}
ErrVal
SEI::PRComponentInfoSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
UInt ui_i, ui_j, ui_k;
UInt uiStart = pcWriteIf->getNumberOfWrittenBits();
UInt uiPayloadSize = 0;
RNOK( pcWriteIf->writeUvlc( m_uiNumDependencyIdMinus1, "PRComponentInfo: NumDependencyIdMinus1" ) );
for( ui_i=0; ui_i<=m_uiNumDependencyIdMinus1; ui_i++ )
{
RNOK( pcWriteIf->writeCode( m_uiPrDependencyId[ui_i], 3, "PRComponentInfo: PrDependencyId" ) );
RNOK( pcWriteIf->writeUvlc( m_uiNumQualityLevelMinus1[ui_i], "PRComponentInfo: NumQualityLevelsMinus1" ) );
for( ui_j=0; ui_j<=m_uiNumQualityLevelMinus1[ui_i]; ui_j++ )
{
RNOK( pcWriteIf->writeCode( m_uiPrQualityLevel[ui_i][ui_j], 2, "PRComponentInfo: PrQualityLevel" ) );
RNOK( pcWriteIf->writeUvlc( m_uiNumPrSliceMinus1[ui_i][ui_j], "PRComponentInfo: NumPrSliceMinus1" ) );
for( ui_k=0; ui_k<=m_uiNumPrSliceMinus1[ui_i][ui_j]; ui_k++ )
{
RNOK( pcWriteIf->writeUvlc( m_uiChromaOffset[ui_i][ui_j][ui_k], "PRComponentInfo: ChromaOffset" ) );
}
}
}
uiPayloadSize = ( pcWriteIf->getNumberOfWrittenBits() - uiStart + 7 )/8;
return Err::m_nOK;
}
ErrVal
SEI::PRComponentInfoSei::read( HeaderSymbolReadIf *pcReadIf )
{
UInt ui_i, ui_j, ui_k;
RNOK( pcReadIf->getUvlc( m_uiNumDependencyIdMinus1, "PRComponentInfo: NumDependencyIdMinus1" ) );
for( ui_i=0; ui_i<=m_uiNumDependencyIdMinus1; ui_i++ )
{
RNOK( pcReadIf->getCode( m_uiPrDependencyId[ui_i], 3, "PRComponentInfo: PrDependencyId" ) );
RNOK( pcReadIf->getUvlc( m_uiNumQualityLevelMinus1[ui_i], "PRComponentInfo: NumQualityLevelsMinus1" ) );
for( ui_j=0; ui_j<=m_uiNumQualityLevelMinus1[ui_i]; ui_j++ )
{
RNOK( pcReadIf->getCode( m_uiPrQualityLevel[ui_i][ui_j], 2, "PRComponentInfo: PrQualityLevel" ) );
RNOK( pcReadIf->getUvlc( m_uiNumPrSliceMinus1[ui_i][ui_j], "PRComponentInfo: NumPrSliceMinus1" ) );
for( ui_k=0; ui_k<=m_uiNumPrSliceMinus1[ui_i][ui_j]; ui_k++ )
{
RNOK( pcReadIf->getUvlc( m_uiChromaOffset[ui_i][ui_j][ui_k], "PRComponentInfo: ChromaOffset" ) );
}
}
}
return Err::m_nOK;
}
H264AVC_NAMESPACE_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -