sei.cpp
来自「JVT-S203 contains the JSVM 6 reference s」· C++ 代码 · 共 1,331 行 · 第 1/4 页
CPP
1,331 行
//////////////////////////////////////////////////////////////////////////
//
// MOTION S E I FOR ROI
//
//////////////////////////////////////////////////////////////////////////
SEI::MotionSEI::MotionSEI ()
: SEIMessage ( MOTION_SEI ),
m_num_slice_groups_in_set_minus1(0),
m_exact_sample_value_match_flag(true),
m_pan_scan_rect_flag(false)
{
}
SEI::MotionSEI::~MotionSEI()
{
}
ErrVal
SEI::MotionSEI::create( MotionSEI*& rpcSeiMessage )
{
rpcSeiMessage = new MotionSEI();
ROT( NULL == rpcSeiMessage )
return Err::m_nOK;
}
ErrVal
SEI::MotionSEI::write( HeaderSymbolWriteIf* pcWriteIf )
{
RNOK ( pcWriteIf->writeUvlc( m_num_slice_groups_in_set_minus1, "Motion Constrainted SEI: Num_slice_groups_in_set_minus1" ) );
for(UInt i = 0; i <= m_num_slice_groups_in_set_minus1; i++)
{
RNOK ( pcWriteIf->writeUvlc( m_slice_group_id[ i ], "Motion Constrainted SEI: slice_group_id[ i ]" ) );
}
RNOK ( pcWriteIf->writeFlag(m_exact_sample_value_match_flag , "Motion Constrainted SEI: exact_sample_value_match_flag" ) );
RNOK ( pcWriteIf->writeFlag(m_pan_scan_rect_flag , "Motion Constrainted SEI: frm_rate_info_present_flag" ) );
return Err::m_nOK;
}
ErrVal
SEI::MotionSEI::read ( HeaderSymbolReadIf* pcReadIf )
{
RNOK ( pcReadIf->getUvlc( m_num_slice_groups_in_set_minus1, "Motion Constrainted SEI: Num_slice_groups_in_set_minus1" ) );
for(UInt i = 0; i <= m_num_slice_groups_in_set_minus1; i++)
{
RNOK ( pcReadIf->getUvlc( m_slice_group_id[ i ], "Motion Constrainted SEI: slice_group_id[ i ]" ) );
}
RNOK ( pcReadIf->getFlag(m_exact_sample_value_match_flag , "Motion Constrainted SEI: exact_sample_value_match_flag" ) );
RNOK ( pcReadIf->getFlag(m_pan_scan_rect_flag , "Motion Constrainted SEI: frm_rate_info_present_flag" ) );
assert(m_exact_sample_value_match_flag==true);
assert(m_pan_scan_rect_flag ==false);
return Err::m_nOK;
}
ErrVal
SEI::MotionSEI::setSliceGroupId(UInt id)
{
m_slice_group_id[0] = id;
return Err::m_nOK;
};
//{{Quality level estimation and modified truncation- JVTO044 and m12007
//France Telecom R&D-(nathalie.cammas@francetelecom.com)
//////////////////////////////////////////////////////////////////////////
//
// QUALITY LEVEL S E I
//
//////////////////////////////////////////////////////////////////////////
SEI::QualityLevelSEI::QualityLevelSEI ()
: SEIMessage ( QUALITYLEVEL_SEI ),
m_uiNumLevels ( 0 ),
m_uiDependencyId ( 0 )
{
::memset( m_auiQualityLevel, 0x00, MAX_NUM_RD_LEVELS*sizeof(UInt) );
::memset( m_auiDeltaBytesRateOfLevel, 0x00, MAX_NUM_RD_LEVELS*sizeof(UInt) );
}
SEI::QualityLevelSEI::~QualityLevelSEI()
{
}
ErrVal
SEI::QualityLevelSEI::create( QualityLevelSEI*& rpcSeiMessage )
{
rpcSeiMessage = new QualityLevelSEI();
ROT( NULL == rpcSeiMessage )
return Err::m_nOK;
}
ErrVal
SEI::QualityLevelSEI::write( HeaderSymbolWriteIf* pcWriteIf )
{
RNOK ( pcWriteIf->writeCode( m_uiDependencyId, 3,"QualityLevelSEI: DependencyId" ) );
RNOK ( pcWriteIf->writeCode( m_uiNumLevels, 4,"QualityLevelSEI: NumLevels" ) );
for(UInt ui = 0; ui < m_uiNumLevels; ui++)
{
RNOK ( pcWriteIf->writeCode( m_auiQualityLevel[ui], 8,"QualityLevelSEI: QualityLevel" ) );
RNOK ( pcWriteIf->writeUvlc( m_auiDeltaBytesRateOfLevel[ui],"QualityLevelSEI: DeDeltaBytesRateOfLevellta" ) );
}
return Err::m_nOK;
}
ErrVal
SEI::QualityLevelSEI::read ( HeaderSymbolReadIf* pcReadIf )
{
RNOK ( pcReadIf->getCode( m_uiDependencyId, 3,"QualityLevelSEI: DependencyId" ) );
RNOK ( pcReadIf->getCode( m_uiNumLevels, 4,"QualityLevelSEI: NumLevels" ) );
for(UInt ui = 0; ui < m_uiNumLevels; ui++)
{
RNOK ( pcReadIf->getCode( m_auiQualityLevel[ui], 8,"QualityLevelSEI: QualityLevel" ) );
RNOK ( pcReadIf->getUvlc( m_auiDeltaBytesRateOfLevel[ui],"QualityLevelSEI: DeltaBytesRateOfLevel" ) );
}
return Err::m_nOK;
}
//}}Quality level estimation and modified truncation- JVTO044 and m12007
//NonRequired JVT-Q066 (06-04-08){{
SEI::NonRequiredSei::NonRequiredSei ()
: SEIMessage ( NON_REQUIRED_SEI )
, m_uiNumInfoEntriesMinus1 (MSYS_UINT_MAX)
{
::memset( m_uiEntryDependencyId, MSYS_UINT_MAX, MAX_NUM_INFO_ENTRIES*sizeof(UInt) );
::memset( m_uiNumNonRequiredPicsMinus1, MSYS_UINT_MAX, MAX_NUM_INFO_ENTRIES*sizeof(UInt) );
::memset( m_uiNonRequiredPicDependencyId, MSYS_UINT_MAX, MAX_NUM_INFO_ENTRIES*MAX_NUM_NON_REQUIRED_PICS*sizeof(UInt) );
::memset( m_uiNonRequiredPicQulityLevel, MSYS_UINT_MAX, MAX_NUM_INFO_ENTRIES*MAX_NUM_NON_REQUIRED_PICS*sizeof(UInt) );
::memset( m_uiNonRequiredPicFragmentOrder, MSYS_UINT_MAX, MAX_NUM_INFO_ENTRIES*MAX_NUM_NON_REQUIRED_PICS*sizeof(UInt) );
}
/*
SEI::NonRequiredSei::NonRequiredSei ()
: SEIMessage ( NON_REQUIRED_SEI )
, m_uiNumInfoEntriesMinus1 (0)
{
::memset( m_uiEntryDependencyId, 0x00, MAX_NUM_INFO_ENTRIES*sizeof(UInt) );
::memset( m_uiNumNonRequiredPicsMinus1, 0x00, MAX_NUM_INFO_ENTRIES*sizeof(UInt) );
::memset( m_uiNonRequiredPicDependencyId, 0x00, MAX_NUM_INFO_ENTRIES*MAX_NUM_NON_REQUIRED_PICS*sizeof(UInt) );
::memset( m_uiNonRequiredPicQulityLevel, 0x00, MAX_NUM_INFO_ENTRIES*MAX_NUM_NON_REQUIRED_PICS*sizeof(UInt) );
::memset( m_uiNonRequiredPicFragmentOrder, 0x00, MAX_NUM_INFO_ENTRIES*MAX_NUM_NON_REQUIRED_PICS*sizeof(UInt) );
}*/
//NonRequired JVT-Q066 (06-04-08)}}
SEI::NonRequiredSei::~NonRequiredSei ()
{
}
ErrVal
SEI::NonRequiredSei::create ( NonRequiredSei*& rpcSeiMessage )
{
rpcSeiMessage = new NonRequiredSei();
ROT( NULL == rpcSeiMessage)
return Err::m_nOK;
}
ErrVal
SEI::NonRequiredSei::destroy()
{
delete this;
return Err::m_nOK;
}
ErrVal
SEI::NonRequiredSei::write( HeaderSymbolWriteIf* pcWriteIf )
{
RNOK (pcWriteIf->writeUvlc( m_uiNumInfoEntriesMinus1, "NonRequiredSEI: NumInfoEntriesMinus1" ));
for( UInt uiLayer = 0; uiLayer <= m_uiNumInfoEntriesMinus1; uiLayer++)
{
RNOK(pcWriteIf->writeCode( m_uiEntryDependencyId[uiLayer], 3, "NonRequiredSEI: EntryDependencyId" ));
RNOK(pcWriteIf->writeUvlc( m_uiNumNonRequiredPicsMinus1[uiLayer], "NonRequiredSEI: NumNonRequiredPicsMinus1" ));
for( UInt NonRequiredLayer = 0; NonRequiredLayer <= m_uiNumNonRequiredPicsMinus1[uiLayer]; NonRequiredLayer++)
{
RNOK(pcWriteIf->writeCode( m_uiNonRequiredPicDependencyId[uiLayer][NonRequiredLayer], 3, "NonRequiredSEI: NonRequiredPicDependencyId"));
RNOK(pcWriteIf->writeCode( m_uiNonRequiredPicQulityLevel[uiLayer][NonRequiredLayer], 2, "NonRequiredSEI: NonRequiredPicQulityLevel" ));
RNOK(pcWriteIf->writeCode( m_uiNonRequiredPicFragmentOrder[uiLayer][NonRequiredLayer], 2, "NonRequiredSEI: NonRequiredFragmentOrder" ));
}
}
return Err::m_nOK;
}
ErrVal
SEI::NonRequiredSei::read( HeaderSymbolReadIf* pcReadIf )
{
RNOK (pcReadIf->getUvlc( m_uiNumInfoEntriesMinus1, "NonRequiredSEI: NumInfoEntriesMinus1" ));
for( UInt uiLayer = 0; uiLayer <= m_uiNumInfoEntriesMinus1; uiLayer++)
{
RNOK(pcReadIf->getCode( m_uiEntryDependencyId[uiLayer], 3, "NonRequiredSEI: EntryDependencyId" ));
RNOK(pcReadIf->getUvlc( m_uiNumNonRequiredPicsMinus1[uiLayer], "NonRequiredSEI: NumNonRequiredPicsMinus1" ));
for( UInt NonRequiredLayer = 0; NonRequiredLayer <= m_uiNumNonRequiredPicsMinus1[uiLayer]; NonRequiredLayer++)
{
RNOK(pcReadIf->getCode( m_uiNonRequiredPicDependencyId[uiLayer][NonRequiredLayer], 3, "NonRequiredSEI: NonRequiredPicDependencyId"));
RNOK(pcReadIf->getCode( m_uiNonRequiredPicQulityLevel[uiLayer][NonRequiredLayer], 2, "NonRequiredSEI: NonRequiredPicQulityLevel" ));
RNOK(pcReadIf->getCode( m_uiNonRequiredPicFragmentOrder[uiLayer][NonRequiredLayer], 2, "NonRequiredSEI: NonRequiredFragmentOrder" ));
}
}
return Err::m_nOK;
}
// JVT-S080 LMI {
//////////////////////////////////////////////////////////////////////////
//
// SCALABLE SEI LAYERS NOT PRESENT
//
//////////////////////////////////////////////////////////////////////////
UInt SEI::ScalableSeiLayersNotPresent::m_uiLeftNumLayers = 0;
UInt SEI::ScalableSeiLayersNotPresent::m_auiLeftLayerId[MAX_SCALABLE_LAYERS];
SEI::ScalableSeiLayersNotPresent::ScalableSeiLayersNotPresent (): SEIMessage ( SCALABLE_SEI_LAYERS_NOT_PRESENT )
{
}
SEI::ScalableSeiLayersNotPresent::~ScalableSeiLayersNotPresent ()
{
}
ErrVal
SEI::ScalableSeiLayersNotPresent::create( ScalableSeiLayersNotPresent*& rpcSeiMessage )
{
rpcSeiMessage = new ScalableSeiLayersNotPresent();
ROT( NULL == rpcSeiMessage )
return Err::m_nOK;
}
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 }
H264AVC_NAMESPACE_END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?