📄 sei.cpp
字号:
RNOK ( pcWriteIf->writeUvlc( m_profile_level_info_src_layer_id_delta[i], "ScalableSEI: profile_level_info_src_layer_id_delta" ) );
}
/* if ( m_decoding_dependency_info_present_flag[i] )
{
RNOK ( pcWriteIf->writeCode( m_simple_priority_id[i], 6, "ScalableSEI: simple_priority_id" ) );
RNOK ( pcWriteIf->writeFlag( m_discardable_flag[i], "ScalableSEI: discardable_flag" ) );
RNOK ( pcWriteIf->writeCode( m_temporal_level[i], 3, "ScalableSEI: temporal_level" ) );
RNOK ( pcWriteIf->writeCode( m_dependency_id[i], 3, "ScalableSEI: dependency_level" ) );
RNOK ( pcWriteIf->writeCode( m_quality_level[i], 2, "ScalableSEI: quality_level" ) );
}
JVT-S036 lsj */
if ( m_bitrate_info_present_flag[i] )
{
RNOK ( pcWriteIf->writeCode( m_avg_bitrate[i], 16, "ScalableSEI: avg_bitrate" ) );
//JVT-S036 lsj start
RNOK ( pcWriteIf->writeCode( m_max_bitrate_layer[i], 16, "ScalableSEI: max_bitrate_layer" ) );
RNOK ( pcWriteIf->writeCode( m_max_bitrate_decoded_picture[i], 16, "ScalableSEI: max_bitrate_decoded_picture" ) );
RNOK ( pcWriteIf->writeCode( m_max_bitrate_calc_window[i], 16, "ScalableSEI: max_bitrate_calc_window" ) );
//JVT-S036 lsj end
}
if ( m_frm_rate_info_present_flag[i] )
{
RNOK ( pcWriteIf->writeCode( m_constant_frm_rate_idc[i], 2, "ScalableSEI: constant_frm_bitrate_idc" ) );
RNOK ( pcWriteIf->writeCode( m_avg_frm_rate[i], 16, "ScalableSEI: avg_frm_rate" ) );
}
else
{
//JVT-S036 lsj
RNOK (pcWriteIf->writeUvlc( m_frm_rate_info_src_layer_id_delta[i], "ScalableSEI: frm_rate_info_src_layer_id_delta" ) );
}
if ( m_frm_size_info_present_flag[i] )
{
RNOK ( pcWriteIf->writeUvlc( m_frm_width_in_mbs_minus1[i], "ScalableSEI: frm_width_in_mbs_minus1" ) );
RNOK ( pcWriteIf->writeUvlc( m_frm_height_in_mbs_minus1[i], "ScalableSEI: frm_height_in_mbs_minus1" ) );
}
else
{//JVT-S036 lsj
RNOK (pcWriteIf->writeUvlc( m_frm_size_info_src_layer_id_delta[i], "ScalableSEI: frm_size_info_src_layer_id_delta" ) );
}
if ( m_sub_region_layer_flag[i] )
{
RNOK ( pcWriteIf->writeCode ( m_base_region_layer_id[i], 8, "ScalableSEI: base_region_layer_id" ) );
RNOK ( pcWriteIf->writeFlag ( m_dynamic_rect_flag[i], "ScalableSEI: dynamic_rect_flag" ) );
if ( m_dynamic_rect_flag[i] )
{
RNOK ( pcWriteIf->writeCode ( m_horizontal_offset[i], 16, "ScalableSEI: horizontal_offset" ) );
RNOK ( pcWriteIf->writeCode ( m_vertical_offset[i], 16, "ScalableSEI: vertical_offset" ) );
RNOK ( pcWriteIf->writeCode ( m_region_width[i], 16, "ScalableSEI: region_width" ) );
RNOK ( pcWriteIf->writeCode ( m_region_height[i], 16, "ScalableSEI: region_height" ) );
}
}
else
{//JVT-S036 lsj
RNOK ( pcWriteIf->writeUvlc( m_sub_region_info_src_layer_id_delta[i], "ScalableSEI: sub_region_info_src_layer_id_delta" ) );
}
if( m_sub_pic_layer_flag[i] )
{//JVT-S036 lsj
RNOK ( pcWriteIf->writeCode( m_roi_id[i], 3, "Scalable: roi_id" ) );
}
//JVT-S036 lsj start
if ( m_iroi_slice_division_info_present_flag[i] )
{
RNOK ( pcWriteIf->writeCode( m_iroi_slice_division_type[i], 2, "ScalableSEI:iroi_slice_division_type" ) );
if( m_iroi_slice_division_type[i] == 0 )
{
RNOK ( pcWriteIf->writeUvlc( m_grid_slice_width_in_mbs_minus1[i], "ScalableSEI:grid_slice_width_in_mbs_minus1" ) );
RNOK ( pcWriteIf->writeUvlc( 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 ( pcWriteIf->writeUvlc( m_num_slice_minus1[i], "ScalableSEI:num_slice_minus1" ) );
for ( j = 0; j <= m_num_slice_minus1[i]; j++ )
{
RNOK ( pcWriteIf->writeUvlc( m_first_mb_in_slice[i][j], "ScalableSEI: first_mb_in_slice" ) );
RNOK ( pcWriteIf->writeUvlc( m_slice_width_in_mbs_minus1[i][j], "ScalableSEI:slice_width_in_mbs_minus1" ) );
RNOK ( pcWriteIf->writeUvlc( m_slice_height_in_mbs_minus1[i][j], "ScalableSEI:slice_height_in_mbs_minus1" ) );
}
}
// JVT-S054 (REPLACE): Typo error
//else if ( m_iroi_slice_division_type[1] == 2 )
else if ( m_iroi_slice_division_type[i] == 2 )
{
RNOK ( pcWriteIf->writeUvlc( m_num_slice_minus1[i], "ScalableSEI:num_slice_minus1" ) );
// JVT-S054 (REPLACE) ->
/*
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 ( pcWriteIf->writeUvlc( 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 uiWriteBits = (UInt) ceil( log( (double) (m_num_slice_minus1[i] + 1) ) / log(2.) );
if (uiWriteBits == 0)
uiWriteBits = 1;
for ( j = 0; j < uiPicSizeInMbs; j++ )
{
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
// JVT-U085 LMI
RNOK ( pcReadIf->getFlag( m_temporal_level_nesting_flag, "" ) );
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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -