sei.cpp
来自「JVT-S203 contains the JSVM 6 reference s」· C++ 代码 · 共 1,331 行 · 第 1/4 页
CPP
1,331 行
RNOK ( pcWriteIf->writeCode ( m_slice_id[i][j], uiWriteBits, "ScalableSEI: slice_id") );
}
// JVT-S054 (REPLACE) <-
}
}
//JVT-S036 lsj end
if ( m_layer_dependency_info_present_flag[i] )
{
RNOK ( pcWriteIf->writeUvlc ( m_num_directly_dependent_layers[i], "ScalableSEI: num_directly_dependent_layers" ) );
// BUG_FIX liuhui{
for( j = 0; j < m_num_directly_dependent_layers[i]; j++ )
{
RNOK( pcWriteIf->writeUvlc (m_directly_dependent_layer_id_delta_minus1[i][j], "ScalableSEI: directly_dependent_layers_id_delta" ) ); //JVT-S036 lsj
}
// BUG_FIX liuhui}
}
else
{//JVT-S036 lsj
RNOK( pcWriteIf->writeUvlc(m_layer_dependency_info_src_layer_id_delta[i], "ScalableSEI: layer_dependency_info_src_layer_id_delta" ) );
}
if ( m_init_parameter_sets_info_present_flag[i] )
{
// BUG_FIX liuhui{
RNOK ( pcWriteIf->writeUvlc ( m_num_init_seq_parameter_set_minus1[i], "ScalableSEI: num_init_seq_parameter_set_minus1" ) );
for( j = 0; j <= m_num_init_seq_parameter_set_minus1[i]; j++ )
{
RNOK( pcWriteIf->writeUvlc( m_init_seq_parameter_set_id_delta[i][j], "ScalableSEI: init_seq_parameter_set_id_delta" ) );
}
RNOK ( pcWriteIf->writeUvlc ( m_num_init_pic_parameter_set_minus1[i], "ScalableSEI: num_init_pic_parameter_set_minus1" ) );
for( j = 0; j <= m_num_init_pic_parameter_set_minus1[i]; j++ )
{
RNOK ( pcWriteIf->writeUvlc ( m_init_pic_parameter_set_id_delta[i][j],"ScalableSEI: init_pic_parameter_set_id_delta" ) );
}
// BUG_FIX liuhui}
}
else
{//JVT-S036 lsj
RNOK (pcWriteIf->writeUvlc( m_init_parameter_sets_info_src_layer_id_delta[i], "ScalableSEI: init_parameter_sets_info_src_layer_id_delta" ) );
}
}
return Err::m_nOK;
}
ErrVal
SEI::ScalableSei::read ( HeaderSymbolReadIf *pcReadIf )
{
UInt i, j=0;
UInt rl;//JVT-S036 lsj
RNOK ( pcReadIf->getUvlc( m_num_layers_minus1 , "" ) );
for ( i = 0; i <= m_num_layers_minus1; i++ )
{
RNOK ( pcReadIf->getCode( m_layer_id[i], 8, "" ) );
//JVT-S036 lsj start
// RNOK ( pcReadIf->getFlag( m_fgs_layer_flag[i], "" ) );
RNOK ( pcReadIf->getCode( m_simple_priority_id[i], 6, "" ) );
RNOK ( pcReadIf->getFlag( m_discardable_flag[i], "" ) );
RNOK ( pcReadIf->getCode( m_temporal_level[i], 3, "" ) );
RNOK ( pcReadIf->getCode( m_dependency_id[i], 3, "" ) );
RNOK ( pcReadIf->getCode( m_quality_level[i], 2, "" ) );
RNOK ( pcReadIf->getFlag( m_sub_pic_layer_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_sub_region_layer_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_iroi_slice_division_info_present_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_profile_level_info_present_flag[i], "" ) );
//JVT-S036 lsj end
RNOK ( pcReadIf->getFlag( m_bitrate_info_present_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_frm_rate_info_present_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_frm_size_info_present_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_layer_dependency_info_present_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_init_parameter_sets_info_present_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_exact_interlayer_pred_flag[i], "" ) ); //JVT-S036 lsj
if( m_profile_level_info_present_flag[i] )
{
RNOK ( pcReadIf->getCode( m_layer_profile_idc[i], 8, "" ) );
RNOK ( pcReadIf->getFlag( m_layer_constraint_set0_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_layer_constraint_set1_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_layer_constraint_set2_flag[i], "" ) );
RNOK ( pcReadIf->getFlag( m_layer_constraint_set3_flag[i], "" ) );
UInt uiReserved;
RNOK ( pcReadIf->getCode( uiReserved, 4, "" ) );
RNOK ( pcReadIf->getCode( m_layer_level_idc[i], 8, "" ) );
}
else
{//JVT-S036 lsj
RNOK ( pcReadIf->getUvlc( m_profile_level_info_src_layer_id_delta[i], "" ) );
rl = m_layer_id[i] - m_profile_level_info_src_layer_id_delta[i];
m_layer_profile_idc[i] = m_layer_profile_idc[rl];
m_layer_constraint_set0_flag[i] = m_layer_constraint_set0_flag[rl];
m_layer_constraint_set1_flag[i] = m_layer_constraint_set1_flag[rl];
m_layer_constraint_set2_flag[i] = m_layer_constraint_set2_flag[rl];
m_layer_constraint_set3_flag[i] = m_layer_constraint_set3_flag[rl];
m_layer_level_idc[i] = m_layer_level_idc[rl];
}
/* if( m_decoding_dependency_info_present_flag[i] )
{
RNOK ( pcReadIf->getCode( m_simple_priority_id[i], 6, "" ) );
RNOK ( pcReadIf->getFlag( m_discardable_flag[i], "" ) );
RNOK ( pcReadIf->getCode( m_temporal_level[i], 3, "" ) );
RNOK ( pcReadIf->getCode( m_dependency_id[i], 3, "" ) );
RNOK ( pcReadIf->getCode( m_quality_level[i], 2, "" ) );
}
JVT-S036 lsj */
if( m_bitrate_info_present_flag[i] )
{
RNOK ( pcReadIf->getCode( m_avg_bitrate[i], 16, "" ) );
//JVT-S036 lsj start
RNOK ( pcReadIf->getCode( m_max_bitrate_layer[i], 16, "" ) );
RNOK ( pcReadIf->getCode( m_max_bitrate_decoded_picture[i], 16, "" ) );
RNOK ( pcReadIf->getCode( m_max_bitrate_calc_window[i], 16, "" ) );
//JVT-S036 lsj end
}
if( m_frm_rate_info_present_flag[i] )
{
RNOK ( pcReadIf->getCode( m_constant_frm_rate_idc[i], 2, "" ) );
RNOK ( pcReadIf->getCode( m_avg_frm_rate[i], 16, "" ) );
}
else
{//JVT-S036 lsj
RNOK ( pcReadIf->getUvlc( m_frm_rate_info_src_layer_id_delta[i], "" ) );
rl = m_layer_id[i] - m_frm_rate_info_src_layer_id_delta[i];
m_constant_frm_rate_idc[i] = m_constant_frm_rate_idc[rl];
m_avg_frm_rate[i] = m_avg_frm_rate[rl];
}
if( m_frm_size_info_present_flag[i] )
{
RNOK ( pcReadIf->getUvlc( m_frm_width_in_mbs_minus1[i], "" ) );
RNOK ( pcReadIf->getUvlc( m_frm_height_in_mbs_minus1[i], "" ) );
}
else
{//JVT-S036 lsj
RNOK ( pcReadIf->getUvlc( m_frm_size_info_src_layer_id_delta[i], "" ) );
rl = m_layer_id[i] - m_frm_size_info_src_layer_id_delta[i];
m_frm_width_in_mbs_minus1[i] = m_frm_width_in_mbs_minus1[rl];
m_frm_width_in_mbs_minus1[i] = m_frm_width_in_mbs_minus1[rl];
}
if( m_sub_region_layer_flag[i] )
{
RNOK ( pcReadIf->getCode( m_base_region_layer_id[i], 8, "" ) );
RNOK ( pcReadIf->getFlag( m_dynamic_rect_flag[i], "" ) );
if( m_dynamic_rect_flag[i] )
{
RNOK( pcReadIf->getCode( m_horizontal_offset[i], 16, "" ) );
RNOK( pcReadIf->getCode( m_vertical_offset[i], 16, "" ) );
RNOK( pcReadIf->getCode( m_region_width[i], 16, "" ) );
RNOK( pcReadIf->getCode( m_region_height[i], 16, "" ) );
}
}
else
{//JVT-S036 lsj
RNOK ( pcReadIf->getUvlc( m_sub_region_info_src_layer_id_delta[i], "" ) );
rl = m_layer_id[i] - m_sub_region_info_src_layer_id_delta[i];
m_base_region_layer_id[i] = m_base_region_layer_id[rl];
m_dynamic_rect_flag[i] = m_dynamic_rect_flag[rl];
if( m_dynamic_rect_flag[i] )
{
m_horizontal_offset[i] = m_horizontal_offset[rl];
m_vertical_offset[i] = m_vertical_offset[rl];
m_region_width[i] = m_region_width[rl];
m_region_height[i] = m_region_height[rl];
}
}
//JVT-S036 lsj start
if( m_sub_pic_layer_flag[i] )
{
RNOK ( pcReadIf->getCode( m_roi_id[i], 3, "" ) );
}
if ( m_iroi_slice_division_info_present_flag[i] )
{
RNOK ( pcReadIf->getCode( m_iroi_slice_division_type[i], 2, "ScalableSEI:iroi_slice_division_type" ) );
if( m_iroi_slice_division_type[i] == 0 )
{
RNOK ( pcReadIf->getUvlc( m_grid_slice_width_in_mbs_minus1[i], "ScalableSEI:grid_slice_width_in_mbs_minus1" ) );
RNOK ( pcReadIf->getUvlc( m_grid_slice_height_in_mbs_minus1[i], "ScalableSEI:grid_slice_height_in_mbs_minus1" ) );
}
else if( m_iroi_slice_division_type[i] == 1 )
{
RNOK ( pcReadIf->getUvlc( m_num_slice_minus1[i], "ScalableSEI:num_slice_minus1" ) );
// JVT-S054 (ADD) ->
if ( m_first_mb_in_slice[i] != NULL )
free( m_first_mb_in_slice[i] );
m_first_mb_in_slice[i] = (UInt*)malloc( m_num_slice_minus1[i]*sizeof(UInt) );
if ( m_slice_width_in_mbs_minus1[i] != NULL )
free( m_slice_width_in_mbs_minus1[i] );
m_slice_width_in_mbs_minus1[i] = (UInt*)malloc( m_num_slice_minus1[i]*sizeof(UInt) );
if ( m_slice_height_in_mbs_minus1[i] != NULL )
free( m_slice_height_in_mbs_minus1[i] );
m_slice_height_in_mbs_minus1[i] = (UInt*)malloc( m_num_slice_minus1[i]*sizeof(UInt) );
// JVT-S054 (ADD) <-
for ( j = 0; j <= m_num_slice_minus1[i]; j++ )
{
RNOK ( pcReadIf->getUvlc( m_first_mb_in_slice[i][j], "ScalableSEI: first_mb_in_slice" ) );
RNOK ( pcReadIf->getUvlc( m_slice_width_in_mbs_minus1[i][j], "ScalableSEI:slice_width_in_mbs_minus1" ) );
RNOK ( pcReadIf->getUvlc( m_slice_height_in_mbs_minus1[i][j], "ScalableSEI:slice_height_in_mbs_minus1" ) );
}
}
else if ( m_iroi_slice_division_type[i] == 2 )
{
// JVT-S054 (REPLACE) ->
RNOK ( pcReadIf->getUvlc( m_num_slice_minus1[i], "ScalableSEI:num_slice_minus1" ) );
/*
UInt uiFrameHeightInMb = m_slice_height_in_mbs_minus1[i][j] + 1;
UInt uiFrameWidthInMb = m_slice_width_in_mbs_minus1[i][j] + 1;
UInt uiPicSizeInMbs = uiFrameHeightInMb * uiFrameWidthInMb;
for ( j = 0; j < uiPicSizeInMbs; j++ )
{
RNOK ( pcReadIf->getUvlc( m_slice_id[i][j], "ScalableSEI:slice_id" ) );
}
*/
UInt uiFrameHeightInMb = m_slice_height_in_mbs_minus1[i][j] + 1;
UInt uiFrameWidthInMb = m_slice_width_in_mbs_minus1[i][j] + 1;
UInt uiPicSizeInMbs = uiFrameHeightInMb * uiFrameWidthInMb;
UInt uiReadBits = (UInt)ceil( log( (double) (m_num_slice_minus1[i] + 1) ) / log(2.) );
if (uiReadBits == 0)
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;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?