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

📄 sei.cpp

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

SEI::ScalableSeiLayersNotPresent::~ScalableSeiLayersNotPresent ()
{
}

ErrVal
SEI::ScalableSeiLayersNotPresent::create( ScalableSeiLayersNotPresent*& rpcSeiMessage )
{
	rpcSeiMessage = new ScalableSeiLayersNotPresent();
	ROT( NULL == rpcSeiMessage )
		return Err::m_nOK;
}
  //TMM_FIX
ErrVal
SEI::ScalableSeiLayersNotPresent::destroy()
{
	delete this ;
	return Err::m_nOK;
}
  //TMM_FIX
ErrVal
SEI::ScalableSeiLayersNotPresent::write( HeaderSymbolWriteIf *pcWriteIf )
{
  UInt i;

	RNOK ( pcWriteIf->writeUvlc(m_uiNumLayers,													"ScalableSEILayersNotPresent: num_layers"											) );
	for( i = 0; i < m_uiNumLayers; i++ )
	{
		RNOK ( pcWriteIf->writeCode( m_auiLayerId[i],												8,		"ScalableSEILayersNotPresent: layer_id"															) );
	}
	return Err::m_nOK;
}

ErrVal
SEI::ScalableSeiLayersNotPresent::read ( HeaderSymbolReadIf *pcReadIf )
{
	UInt i;
	RNOK ( pcReadIf->getUvlc( m_uiNumLayers ,																"ScalableSEILayersNotPresent: num_layers"	) );
	for ( i = 0; i < m_uiNumLayers; i++ )
	{
		RNOK ( pcReadIf->getCode( m_auiLayerId[i],																	8,			"ScalableSEILayersNotPresent: layer_id"	) );
	}
	return Err::m_nOK;
}

//////////////////////////////////////////////////////////////////////////
//
//			SCALABLE SEI DEPENDENCY CHANGE
//
//////////////////////////////////////////////////////////////////////////

SEI::ScalableSeiDependencyChange::ScalableSeiDependencyChange (): SEIMessage		( SCALABLE_SEI_DEPENDENCY_CHANGE )
{
}

SEI::ScalableSeiDependencyChange::~ScalableSeiDependencyChange ()
{
}

ErrVal
SEI::ScalableSeiDependencyChange::create( ScalableSeiDependencyChange*& rpcSeiMessage )
{
	rpcSeiMessage = new ScalableSeiDependencyChange();
	ROT( NULL == rpcSeiMessage )
		return Err::m_nOK;
}

ErrVal
SEI::ScalableSeiDependencyChange::write( HeaderSymbolWriteIf *pcWriteIf )
{
  UInt i, j;

	ROF( m_uiNumLayersMinus1+1 );
	RNOK		( pcWriteIf->writeUvlc(m_uiNumLayersMinus1,													"ScalableSeiDependencyChange: num_layers_minus1"											) );
	for( i = 0; i <= m_uiNumLayersMinus1; i++ )
	{
		RNOK	( pcWriteIf->writeCode( m_auiLayerId[i],												8,		"ScalableSeiDependencyChange: layer_id"															) );
		RNOK	( pcWriteIf->writeFlag( m_abLayerDependencyInfoPresentFlag[i],		"ScalableSeiDependencyChange: layer_dependency_info_present_flag"															) );		
		if( m_abLayerDependencyInfoPresentFlag[i] )
		{
	       RNOK		( pcWriteIf->writeUvlc(m_auiNumDirectDependentLayers[i],													"ScalableSeiDependencyChange: num_directly_dependent_layers"											) );
	       for ( j = 0; j < m_auiNumDirectDependentLayers[i]; j++)
	            RNOK( pcWriteIf->writeUvlc(m_auiDirectDependentLayerIdDeltaMinus1[i][j],													"ScalableSeiDependencyChange: directly_dependent_layer_id_delta_minus1"											) );
		}
		else
	            RNOK	( pcWriteIf->writeUvlc(m_auiLayerDependencyInfoSrcLayerIdDeltaMinus1[i],													"ScalableSeiDependencyChange: layer_dependency_info_src_layer_id_delta_minus1"											) );
	}
	return Err::m_nOK;
}

ErrVal
SEI::ScalableSeiDependencyChange::read ( HeaderSymbolReadIf *pcReadIf )
{
  UInt i, j;

	RNOK		( pcReadIf->getUvlc(m_uiNumLayersMinus1,													"ScalableSeiDependencyChange: num_layers_minus1"											) );
	for( i = 0; i <= m_uiNumLayersMinus1; i++ )
	{
		RNOK	( pcReadIf->getCode( m_auiLayerId[i],												8,		"ScalableSeiDependencyChange: layer_id"															) );
		RNOK	( pcReadIf->getFlag( m_abLayerDependencyInfoPresentFlag[i],		"ScalableSeiDependencyChange: layer_dependency_info_present_flag"															) );		
		if( m_abLayerDependencyInfoPresentFlag[i] )
		{
	       RNOK		( pcReadIf->getUvlc(m_auiNumDirectDependentLayers[i],													"ScalableSeiDependencyChange: num_directly_dependent_layers"											) );
	       for ( j = 0; j < m_auiNumDirectDependentLayers[i]; j++)
	            RNOK		( pcReadIf->getUvlc(m_auiDirectDependentLayerIdDeltaMinus1[i][j],													"ScalableSeiDependencyChange: directly_dependent_layer_id_delta_minus1"											) );
		}
		else
	            RNOK		( pcReadIf->getUvlc(m_auiLayerDependencyInfoSrcLayerIdDeltaMinus1[i],													"ScalableSeiDependencyChange: layer_dependency_info_src_layer_id_delta_minus1"											) );
	}
	return Err::m_nOK;
}
// JVT-S080 LMI }
// JVT-T073 {
//////////////////////////////////////////////////////////////////////////
//
//			SCALABLE NESTING SEI
//
//////////////////////////////////////////////////////////////////////////
ErrVal
SEI::ScalableNestingSei::create( ScalableNestingSei* &rpcSeiMessage )
{
    rpcSeiMessage = new ScalableNestingSei();
	ROT( NULL == rpcSeiMessage );
	return Err::m_nOK;
}
ErrVal
SEI::ScalableNestingSei::destroy()
{
    delete this;
	return Err::m_nOK;
}

ErrVal
SEI::ScalableNestingSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
    UInt uiStartBits  = pcWriteIf->getNumberOfWrittenBits();
	UInt uiPayloadSize = 0;
	UInt uiIndex;
	RNOK( pcWriteIf->writeFlag( m_bAllPicturesInAuFlag, " ScalableNestingSei:AllPicturesInAuFlag " ) );
	if( m_bAllPicturesInAuFlag == 0 )
	{
		RNOK( pcWriteIf->writeUvlc( m_uiNumPictures, "ScalableNestingSei:NumPictures" ) );
		ROT( m_uiNumPictures == 0 );
		for( uiIndex = 0; uiIndex < m_uiNumPictures; uiIndex++ )
		{
			RNOK( pcWriteIf->writeCode( m_auiDependencyId[uiIndex],3, " ScalableNestingSei:uiDependencyId " ) );
			RNOK( pcWriteIf->writeCode( m_auiQualityLevel[uiIndex],2, " ScalableNestingSei:uiQualityLevel " ) );
		}	    
	}
	UInt uiBits = pcWriteIf->getNumberOfWrittenBits()-uiStartBits;
	UInt uiBitsMod8 = uiBits%8;
	if( uiBitsMod8 )
	{
		RNOK( pcWriteIf->writeCode(0, 8-uiBitsMod8, "SeiNestingZeroBits" ) );
	}
	uiBits = pcWriteIf->getNumberOfWrittenBits();
	uiPayloadSize = (uiBits+7)/8;

	return Err::m_nOK;
}

ErrVal
SEI::ScalableNestingSei::read( HeaderSymbolReadIf *pcReadIf )
{
	RNOK( pcReadIf->getFlag( m_bAllPicturesInAuFlag, " ScalableNestingSei:AllPicturesInAuFlag " ) );
	if( m_bAllPicturesInAuFlag == 0 )
	{
		RNOK( pcReadIf->getUvlc( m_uiNumPictures, "ScalableNestingSei:NumPictures" ) );
		ROT( m_uiNumPictures == 0 );
		for( UInt uiIndex = 0; uiIndex < m_uiNumPictures; uiIndex++ )
		{
			RNOK( pcReadIf->getCode( m_auiDependencyId[uiIndex],3, " ScalableNestingSei:uiDependencyId " ) );
			RNOK( pcReadIf->getCode( m_auiQualityLevel[uiIndex],2, " ScalableNestingSei:uiQualityLevel " ) );
		}	  
	}
	RNOK( pcReadIf->readZeroByteAlign() ); //nesting_zero_bit

	//Read the following SEI message
	UInt uiType, uiPayloadSize;
	while(1)
	{
		RNOK( pcReadIf->getCode( uiType, 8, " ScalableNestingSei:SEI type" ) );
		if( uiType != 0xff )
			break;
	}
	while(1)
	{
		RNOK( pcReadIf->getCode( uiPayloadSize, 8, " ScalableNestingSei:SEI payloadSize" ) );
		if( uiPayloadSize != 0xff )
			break;
	}
	switch( uiType )
	{
	case SCENE_INFO_SEI:
		{
			SEI::SceneInfoSei* pcSceneInfoSei;
			RNOK( SEI::SceneInfoSei::create(pcSceneInfoSei) );
			RNOK( pcSceneInfoSei->read(pcReadIf) );
			//add some control

			RNOK( pcSceneInfoSei->destroy() );  
			break;
		}
	//more case can be added here
	default:
		break;
	}

	return Err::m_nOK;
}

//Scene Info, simplified
ErrVal
SEI::SceneInfoSei::create( SceneInfoSei* &rpcSeiMessage )
{
    rpcSeiMessage = new SceneInfoSei();
	ROT( NULL == rpcSeiMessage );
	return Err::m_nOK;
}

ErrVal
SEI::SceneInfoSei::destroy()
{
    delete this;
	return Err::m_nOK;
}

ErrVal
SEI::SceneInfoSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
	UInt uiStart = pcWriteIf->getNumberOfWrittenBits();
	UInt uiPayloadSize = 0;
	Bool bSceneInfoPresentFlag = getSceneInfoPresentFlag();
	RNOK( pcWriteIf->writeFlag( bSceneInfoPresentFlag, "SceneInfo: SceneInfoPresentFlag" ) );
	if( bSceneInfoPresentFlag )
	{
		RNOK( pcWriteIf->writeUvlc( getSceneId(), "SceneInfo: SceneId" ) );
		RNOK( pcWriteIf->writeUvlc( getSceneTransitionType(), "SceneInfo: SceneTransitionType" ) );
		if( getSceneTransitionType() > 3 )
		{
			RNOK( pcWriteIf->writeUvlc( getSecondSceneId(), "SceneInfo: SecondSceneId" ) );
		}
	}
	uiPayloadSize = ( pcWriteIf->getNumberOfWrittenBits() - uiStart + 7 )/8;

	return Err::m_nOK;
}

ErrVal
SEI::SceneInfoSei::read( HeaderSymbolReadIf *pcReadIf )
{
	RNOK( pcReadIf->getFlag( m_bSceneInfoPresentFlag, "SceneInfo: bSceneInfoPresentFlag" ) );
	if( m_bSceneInfoPresentFlag )
	{
		RNOK( pcReadIf->getUvlc( m_uiSceneId,  "SceneInfo: SceneId" ) );
		RNOK( pcReadIf->getUvlc( m_uiSceneTransitionType,  "SceneInfo: SceneTransitionType " ) );
		if( m_uiSceneTransitionType > 3 )
		{
			RNOK( pcReadIf->getUvlc( m_uiSecondSceneId, "SceneInfo: SecondSceneId" ) );
		}
	}
	return Err::m_nOK;
}
// JVT-T073 }

// PR slice component info
ErrVal
SEI::PRComponentInfoSei::create( PRComponentInfoSei* &rpcSeiMessage )
{
  rpcSeiMessage = new PRComponentInfoSei();
  ROT( NULL == rpcSeiMessage );
  return Err::m_nOK;
}

ErrVal
SEI::PRComponentInfoSei::destroy()
{
  delete this;
  return Err::m_nOK;
}

ErrVal
SEI::PRComponentInfoSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
  UInt ui_i, ui_j, ui_k;
  UInt uiStart = pcWriteIf->getNumberOfWrittenBits();
  UInt uiPayloadSize = 0;
  RNOK( pcWriteIf->writeUvlc( m_uiNumDependencyIdMinus1, "PRComponentInfo: NumDependencyIdMinus1" ) );
  for( ui_i=0; ui_i<=m_uiNumDependencyIdMinus1; ui_i++ )
  {
    RNOK( pcWriteIf->writeCode( m_uiPrDependencyId[ui_i], 3, "PRComponentInfo: PrDependencyId" ) );
    RNOK( pcWriteIf->writeUvlc( m_uiNumQualityLevelMinus1[ui_i], "PRComponentInfo: NumQualityLevelsMinus1" ) );
    for( ui_j=0; ui_j<=m_uiNumQualityLevelMinus1[ui_i]; ui_j++ )
    {
      RNOK( pcWriteIf->writeCode( m_uiPrQualityLevel[ui_i][ui_j], 2, "PRComponentInfo: PrQualityLevel" ) );
      RNOK( pcWriteIf->writeUvlc( m_uiNumPrSliceMinus1[ui_i][ui_j], "PRComponentInfo: NumPrSliceMinus1" ) );
      for( ui_k=0; ui_k<=m_uiNumPrSliceMinus1[ui_i][ui_j]; ui_k++ )
      {
        RNOK( pcWriteIf->writeUvlc( m_uiChromaOffset[ui_i][ui_j][ui_k], "PRComponentInfo: ChromaOffset" ) );
      }
    }
  }
  uiPayloadSize = ( pcWriteIf->getNumberOfWrittenBits() - uiStart + 7 )/8;

  return Err::m_nOK;
}

ErrVal
SEI::PRComponentInfoSei::read( HeaderSymbolReadIf *pcReadIf )
{
  UInt ui_i, ui_j, ui_k;
  RNOK( pcReadIf->getUvlc( m_uiNumDependencyIdMinus1, "PRComponentInfo: NumDependencyIdMinus1" ) );
  for( ui_i=0; ui_i<=m_uiNumDependencyIdMinus1; ui_i++ )
  {
    RNOK( pcReadIf->getCode( m_uiPrDependencyId[ui_i], 3, "PRComponentInfo: PrDependencyId" ) );
    RNOK( pcReadIf->getUvlc( m_uiNumQualityLevelMinus1[ui_i], "PRComponentInfo: NumQualityLevelsMinus1" ) );
    for( ui_j=0; ui_j<=m_uiNumQualityLevelMinus1[ui_i]; ui_j++ )
    {
      RNOK( pcReadIf->getCode( m_uiPrQualityLevel[ui_i][ui_j], 2, "PRComponentInfo: PrQualityLevel" ) );
      RNOK( pcReadIf->getUvlc( m_uiNumPrSliceMinus1[ui_i][ui_j], "PRComponentInfo: NumPrSliceMinus1" ) );
      for( ui_k=0; ui_k<=m_uiNumPrSliceMinus1[ui_i][ui_j]; ui_k++ )
      {
        RNOK( pcReadIf->getUvlc( m_uiChromaOffset[ui_i][ui_j][ui_k], "PRComponentInfo: ChromaOffset" ) );
      }
    }
  }
  return Err::m_nOK;
}
H264AVC_NAMESPACE_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -