sei.cpp
来自「JVT-S203 contains the JSVM 6 reference s」· C++ 代码 · 共 1,331 行 · 第 1/4 页
CPP
1,331 行
RNOK( pcWriteIf->writeUvlc( m_uiSubSeqFrameNum, "SubSeqSEI: sub_seq_frame_num") );
}
return Err::m_nOK;
}
ErrVal
SEI::SubSeqInfo::read ( HeaderSymbolReadIf* pcReadIf )
{
RNOK( pcReadIf->getUvlc( m_uiSubSeqLayerNum, "SubSeqSEI: sub_seq_layer_num") );
RNOK( pcReadIf->getUvlc( m_uiSubSeqId, "SubSeqSEI: sub_seq_layer_id") );
RNOK( pcReadIf->getFlag( m_bFirstRefPicFlag, "SubSeqSEI: first_ref_pic_flag" ) );
RNOK( pcReadIf->getFlag( m_bLeadingNonRefPicFlag, "SubSeqSEI: leading_non_ref_pic_flag" ) );
RNOK( pcReadIf->getFlag( m_bLastPicFlag, "SubSeqSEI: last_pic_flag" ) );
RNOK( pcReadIf->getFlag( m_bSubSeqFrameNumFlag, "SubSeqSEI: sub_seq_frame_num_flag" ) );
if( m_bSubSeqFrameNumFlag )
{
RNOK( pcReadIf->getUvlc( m_uiSubSeqFrameNum, "SubSeqSEI: sub_seq_frame_num") );
}
return Err::m_nOK;
}
ErrVal
SEI::SubSeqInfo::init( UInt uiSubSeqLayerNum,
UInt uiSubSeqId,
Bool bFirstRefPicFlag,
Bool bLeadingNonRefPicFlag,
Bool bLastPicFlag,
Bool bSubSeqFrameNumFlag,
UInt uiSubSeqFrameNum )
{
m_uiSubSeqLayerNum = uiSubSeqLayerNum;
m_uiSubSeqId = uiSubSeqId;
m_bFirstRefPicFlag = bFirstRefPicFlag;
m_bLeadingNonRefPicFlag = bLeadingNonRefPicFlag;
m_bLastPicFlag = bLastPicFlag;
m_bSubSeqFrameNumFlag = bSubSeqFrameNumFlag;
m_uiSubSeqFrameNum = uiSubSeqFrameNum;
return Err::m_nOK;
}
//////////////////////////////////////////////////////////////////////////
//
// S C A L A B L E S E I
//
//////////////////////////////////////////////////////////////////////////
SEI::ScalableSei::ScalableSei ()
: SEIMessage ( SCALABLE_SEI )
, m_num_layers_minus1 ( 0 )
{
::memset( m_layer_id, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
// ::memset( m_fgs_layer_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) ); //JVT-S036 lsj
::memset( m_sub_pic_layer_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_sub_region_layer_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_iroi_slice_division_info_present_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) ); //JVT-S036 lsj
::memset( m_profile_level_info_present_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_bitrate_info_present_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_frm_rate_info_present_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_frm_size_info_present_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_layer_dependency_info_present_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_init_parameter_sets_info_present_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_exact_interlayer_pred_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) ); //JVT-S036 lsj
::memset( m_layer_profile_idc, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_layer_constraint_set0_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_layer_constraint_set1_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_layer_constraint_set2_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_layer_constraint_set3_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_layer_level_idc, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
//JVT-S036 lsj start
::memset( m_profile_level_info_src_layer_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );//
::memset( m_simple_priority_id, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );//
::memset( m_discardable_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );//
::memset( m_temporal_level, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_dependency_id, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_quality_level, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_avg_bitrate, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_max_bitrate_layer, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );//
::memset( m_max_bitrate_decoded_picture, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );//
::memset( m_max_bitrate_calc_window, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );//
::memset( m_constant_frm_rate_idc, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_avg_frm_rate, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_frm_rate_info_src_layer_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );//
::memset( m_frm_width_in_mbs_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_frm_height_in_mbs_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_frm_size_info_src_layer_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );//
::memset( m_base_region_layer_id, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_dynamic_rect_flag, 0x00, MAX_SCALABLE_LAYERS*sizeof(Bool) );
::memset( m_horizontal_offset, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_vertical_offset, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_region_width, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_region_height, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_sub_region_info_src_layer_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) ); //
::memset( m_roi_id, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_iroi_slice_division_type, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_grid_slice_width_in_mbs_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_grid_slice_height_in_mbs_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_num_slice_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_first_mb_in_slice, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt*) );
::memset( m_slice_width_in_mbs_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt*) );
::memset( m_slice_height_in_mbs_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt*) );
::memset( m_slice_id, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt*) );
::memset( m_num_directly_dependent_layers, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_directly_dependent_layer_id_delta_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt*) ); //
::memset( m_layer_dependency_info_src_layer_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) ); //
//JVT-S036 lsj end
::memset( m_num_init_seq_parameter_set_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_init_seq_parameter_set_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt*) );
::memset( m_num_init_pic_parameter_set_minus1, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) );
::memset( m_init_pic_parameter_set_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt*) );
::memset( m_init_parameter_sets_info_src_layer_id_delta, 0x00, MAX_SCALABLE_LAYERS*sizeof(UInt) ); //JVT-S036 lsj
}
SEI::ScalableSei::~ScalableSei()
{
// JVT-S054 (ADD) ->
UInt i;
for( i = 0; i < MAX_SCALABLE_LAYERS; i++ )
{
if ( m_first_mb_in_slice[i] != NULL )
{
free( m_first_mb_in_slice[i] );
m_first_mb_in_slice[i] = NULL;
}
if ( m_slice_width_in_mbs_minus1[i] != NULL )
{
free( m_slice_width_in_mbs_minus1[i] );
m_slice_width_in_mbs_minus1[i] = NULL;
}
if ( m_slice_height_in_mbs_minus1[i] != NULL )
{
free( m_slice_height_in_mbs_minus1[i] );
m_slice_height_in_mbs_minus1[i] = NULL;
}
if ( m_slice_id[i] != NULL )
{
free( m_slice_id[i] );
m_slice_id[i] = NULL;
}
}
// JVT-S054 (ADD) <-
}
ErrVal
SEI::ScalableSei::create( ScalableSei*& rpcSeiMessage )
{
rpcSeiMessage = new ScalableSei();
ROT( NULL == rpcSeiMessage )
return Err::m_nOK;
}
ErrVal
SEI::ScalableSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
UInt i=0, j=0;
ROF( m_num_layers_minus1+1 );
RNOK ( pcWriteIf->writeUvlc(m_num_layers_minus1, "ScalableSEI: num_layers_minus1" ) );
for( i = 0; i <= m_num_layers_minus1; i++ )
{
if (0 < m_aiNumRoi[m_dependency_id[i]])
{
m_sub_pic_layer_flag[i] = true;
m_roi_id[i] = m_aaiRoiID[m_dependency_id[i]][0];
}
RNOK ( pcWriteIf->writeCode( m_layer_id[i], 8, "ScalableSEI: layer_id" ) );
//JVT-S036 lsj start
//RNOK ( pcWriteIf->writeFlag( m_fgs_layer_flag[i], "ScalableSEI: fgs_layer_flag" ) );
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" ) );
RNOK ( pcWriteIf->writeFlag( m_sub_pic_layer_flag[i], "ScalableSEI: sub_pic_layer_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_sub_region_layer_flag[i], "ScalableSEI: sub_region_layer_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_iroi_slice_division_info_present_flag[i], "ScalableSEI: iroi_slice_division_info_present_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_profile_level_info_present_flag[i], "ScalableSEI: profile_level_info_present_flag" ) );
//JVT-S036 lsj end
RNOK ( pcWriteIf->writeFlag( m_bitrate_info_present_flag[i], "ScalableSEI: bitrate_info_present_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_frm_rate_info_present_flag[i], "ScalableSEI: frm_rate_info_present_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_frm_size_info_present_flag[i], "ScalableSEI: frm_size_info_present_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_layer_dependency_info_present_flag[i], "ScalableSEI: layer_dependency_info_present_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_init_parameter_sets_info_present_flag[i], "ScalableSEI: init_parameter_sets_info_present_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_exact_interlayer_pred_flag[i], "ScalableSEI: exact_interlayer_pred_flag" ) );//JVT-S036 lsj
if ( m_profile_level_info_present_flag[i] )
{
RNOK ( pcWriteIf->writeCode( m_layer_profile_idc[i], 8, "ScalableSEI: layer_profile_idc" ) );
RNOK ( pcWriteIf->writeFlag( m_layer_constraint_set0_flag[i], "ScalableSEI: layer_constraint_set0_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_layer_constraint_set1_flag[i], "ScalableSEI: layer_constraint_set1_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_layer_constraint_set2_flag[i], "ScalableSEI: layer_constraint_set2_flag" ) );
RNOK ( pcWriteIf->writeFlag( m_layer_constraint_set3_flag[i], "ScalableSEI: layer_constraint_set3_flag" ) );
RNOK ( pcWriteIf->writeCode( 0, 4, "ScalableSEI: reserved_zero_4bits" ) );
RNOK ( pcWriteIf->writeCode( m_layer_level_idc[i], 8, "ScalableSEI: layer_level_idc" ) );
}
else
{//JVT-S036 lsj
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++ )
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?