📄 sei.cpp
字号:
uiReadBits = 1;
if ( m_slice_id[i] != NULL )
free( m_slice_id[i] );
m_slice_id[i] = (UInt*)malloc( uiPicSizeInMbs*sizeof(UInt) );
for ( j = 0; j < uiPicSizeInMbs; j++ )
{
RNOK ( pcReadIf->getCode( m_slice_id[i][j], uiReadBits, "" ) );
}
// JVT-S054 (REPLACE) <-
}
}
//JVT-S036 lsj end
if( m_layer_dependency_info_present_flag[i] )
{
RNOK ( pcReadIf->getUvlc( m_num_directly_dependent_layers[i], "" ) );
// BUG_FIX liuhui{
for( j = 0; j < m_num_directly_dependent_layers[i]; j++ )
{
RNOK ( pcReadIf->getUvlc( m_directly_dependent_layer_id_delta_minus1[i][j], "" ) );//JVT-S036 lsj
}
// BUG_FIX liuhui}
}
else
{//JVT-S036 lsj
RNOK ( pcReadIf->getUvlc( m_layer_dependency_info_src_layer_id_delta[i], "" ) );
rl = m_layer_id[i] - m_layer_dependency_info_src_layer_id_delta[i];
m_num_directly_dependent_layers[i] = m_num_directly_dependent_layers[rl];
for( j = 0; j < m_num_directly_dependent_layers[i]; j++ )
{
m_directly_dependent_layer_id_delta_minus1[i][j] = m_directly_dependent_layer_id_delta_minus1[rl][j];
}
}
if( m_init_parameter_sets_info_present_flag[i] )
{
// BUG_FIX liuhui{
RNOK ( pcReadIf->getUvlc( m_num_init_seq_parameter_set_minus1[i], "" ) );
for( j = 0; j <= m_num_init_seq_parameter_set_minus1[i]; j++ )
{
RNOK ( pcReadIf->getUvlc( m_init_seq_parameter_set_id_delta[i][j], "" ) );
}
RNOK ( pcReadIf->getUvlc( m_num_init_pic_parameter_set_minus1[i], "" ) );
for( j = 0; j <= m_num_init_pic_parameter_set_minus1[i]; j++ )
{
RNOK ( pcReadIf->getUvlc( m_init_pic_parameter_set_id_delta[i][j], "" ) );
}
// BUG_FIX liuhui}
}
else
{//JVT-S036 lsj
RNOK ( pcReadIf->getUvlc( m_init_parameter_sets_info_src_layer_id_delta[i], "" ) );
rl = m_layer_id[i] - m_init_parameter_sets_info_src_layer_id_delta[i];
m_num_init_seq_parameter_set_minus1[i] = m_num_init_seq_parameter_set_minus1[rl];
for( j = 0; j <= m_num_init_seq_parameter_set_minus1[i]; j++ )
{
m_init_seq_parameter_set_id_delta[i][j] = m_init_seq_parameter_set_id_delta[rl][j];
}
m_num_init_pic_parameter_set_minus1[i] = m_num_init_pic_parameter_set_minus1[rl];
for( j = 0; j <= m_num_init_pic_parameter_set_minus1[i]; j++ )
{
m_init_pic_parameter_set_id_delta[i][j] = m_init_pic_parameter_set_id_delta[rl][j];
}
}
}
return Err::m_nOK;
}
//////////////////////////////////////////////////////////////////////////
//
// SUB-PICTURE SCALABLE LAYER SEI
//
//////////////////////////////////////////////////////////////////////////
SEI::SubPicSei::SubPicSei ()
: SEIMessage ( SUB_PIC_SEI ),
m_uiLayerId ( 0 )
{
}
SEI::SubPicSei::~SubPicSei ()
{
}
ErrVal
SEI::SubPicSei::create( SubPicSei*& rpcSeiMessage)
{
rpcSeiMessage = new SubPicSei();
ROT( NULL == rpcSeiMessage );
return Err::m_nOK;
}
ErrVal
SEI::SubPicSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
RNOK ( pcWriteIf->writeUvlc( m_uiLayerId, "Sub-picture scalable SEI: m_uiLayerId" ) );
return Err::m_nOK;
}
ErrVal
SEI::SubPicSei::read( HeaderSymbolReadIf *pcReadIf )
{
RNOK ( pcReadIf->getUvlc( m_uiLayerId, "Sub-picture scalable SEI: m_uiLayerd" ) );
return Err::m_nOK;
}
//////////////////////////////////////////////////////////////////////////
//
// 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 )
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -