⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sei.cpp

📁 jsvm开发代码包括抽样,编码,抽取,解码等一系列功能,可以做工具或研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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 + -