sei.cpp
来自「JMVM MPEG MVC/3DAV 测试平台 国际通用标准」· C++ 代码 · 共 1,519 行 · 第 1/5 页
CPP
1,519 行
}
if( m_uiInitPicParameterSetIdDelta[i] != NULL )
{
free( m_uiInitPicParameterSetIdDelta[i] );
m_uiInitPicParameterSetIdDelta[i] = NULL;
}
}
}
ErrVal
SEI::ViewScalabilityInfoSei::create( ViewScalabilityInfoSei*& rpcSeiMessage )
{
rpcSeiMessage = new ViewScalabilityInfoSei();
ROT( NULL == rpcSeiMessage )
return Err::m_nOK;
}
ErrVal
SEI::ViewScalabilityInfoSei::destroy()
{
delete this;
return Err::m_nOK;
}
ErrVal
SEI::ViewScalabilityInfoSei::write( HeaderSymbolWriteIf *pcWriteIf )
{
UInt i=0,j=0;
RNOK( pcWriteIf->writeUvlc( m_uiNumOperationPointsMinus1, "ViewScalabilityInfoSei: num_operation_points_minus1" ) );
for( i = 0; i <= m_uiNumOperationPointsMinus1; i++ )
{
RNOK( pcWriteIf->writeUvlc( m_uiOperationPointId[i], "ViewScalabilityInfoSei: operation_point_id" ) );
RNOK( pcWriteIf->writeCode( m_uiPriorityId[i], 5, "ViewScalabilityInfoSei: priority_id" ) );
RNOK( pcWriteIf->writeCode( m_uiTemporalId[i], 3, "ViewScalabilityInfoSei: temporal_id" ) );
RNOK( pcWriteIf->writeUvlc( m_uiNumActiveViewsMinus1[i], "ViewScalabilityInfoSei: num_active_views_minus1" ) );
for( j = 0; j <= m_uiNumActiveViewsMinus1[i]; j++ )
{
RNOK( pcWriteIf->writeUvlc( m_uiViewId[i][j], "ViewScalabilityInfoSei: view_id" ) );
}
RNOK( pcWriteIf->writeFlag( m_bProfileLevelInfoPresentFlag[i], "ViewScalabilityInfoSei: profile_level_info_present_flag" ) );
RNOK( pcWriteIf->writeFlag( m_bBitRateInfoPresentFlag[i], "ViewScalabilityInfoSei: bitrate_info_present_flag" ) );
RNOK( pcWriteIf->writeFlag( m_bFrmRateInfoPresentFlag[i], "ViewScalabilityInfoSei: frm_rate_info_present_flag" ) );
RNOK( pcWriteIf->writeFlag( m_bOpDependencyInfoPresentFlag[i], "ViewScalabilityInfoSei: op_dependency_info_present_flag" ) );
RNOK( pcWriteIf->writeFlag( m_bInitParameterSetsInfoPresentFlag[i], "ViewScalabilityInfoSei: init_parameter_sets_info_present_flag" ) );
if( m_bProfileLevelInfoPresentFlag[i] )
{
RNOK( pcWriteIf->writeCode( m_uiOpProfileIdc[i], 8, "ViewScalabilityInfoSei: op_profile_idc" ) );
RNOK( pcWriteIf->writeFlag( m_bOpConstraintSet0Flag[i], "ViewScalabilityInfoSei: op_constraint_set0_flag" ) );
RNOK( pcWriteIf->writeFlag( m_bOpConstraintSet1Flag[i], "ViewScalabilityInfoSei: op_constraint_set1_flag" ) );
RNOK( pcWriteIf->writeFlag( m_bOpConstraintSet2Flag[i], "ViewScalabilityInfoSei: op_constraint_set2_flag" ) );
RNOK( pcWriteIf->writeFlag( m_bOpConstraintSet3Flag[i], "ViewScalabilityInfoSei: op_constraint_set3_flag" ) );
RNOK( pcWriteIf->writeCode( 0, 4, "ViewScalabilityInfoSei: reserved_zero_4bits" ) );
RNOK( pcWriteIf->writeCode( m_uiOpLevelIdc[i], 8, "ViewScalabilityInfoSei: op_level_idc" ) );
}
else
RNOK( pcWriteIf->writeUvlc( m_uiProfileLevelInfoSrcOpIdDelta[i], "ViewScalabilityInfoSei: profile_level_info_src_op_id_delta" ) );
if( m_bBitRateInfoPresentFlag[i] )
{
RNOK( pcWriteIf->writeCode( m_uiAvgBitrate[i], 16, "ViewScalabilityInfoSei: avg_bitrate" ) );
RNOK( pcWriteIf->writeCode( m_uiMaxBitrate[i], 16, "ViewScalabilityInfoSei: max_bitrate" ) );
RNOK( pcWriteIf->writeCode( m_uiMaxBitrateCalcWindow[i], 16, "ViewScalabilityInfoSei: max_bitrate_calc_window" ) );
}
if( m_bFrmRateInfoPresentFlag[i] )
{
RNOK( pcWriteIf->writeCode( m_uiConstantFrmRateIdc[i], 2, "ViewScalabilityInfoSei: constant_frm_rate_idc" ) );
RNOK( pcWriteIf->writeCode( m_uiAvgFrmRate[i], 16, "ViewScalabilityInfoSei: avg_frm_rate" ) );
}
else
RNOK( pcWriteIf->writeUvlc( m_uiFrmRateInfoSrcOpIdDela[i], "ViewScalabilityInfoSei: frm_rate_info_src_op_id_delta" ) );
if( m_bOpDependencyInfoPresentFlag[i] )
{
RNOK( pcWriteIf->writeUvlc( m_uiNumDirectlyDependentOps[i], "ViewScalabilityInfoSei: num_directly_dependent_ops" ) );
for( j = 0; j < m_uiNumDirectlyDependentOps[i]; j++ )
RNOK( pcWriteIf->writeUvlc( m_uiDirectlyDependentOpIdDeltaMinus1[i][j], "ViewScalabilityInfoSei: directly_dependent_op_id_delta_minus1" ) );
}
else
RNOK( pcWriteIf->writeUvlc( m_uiOpDependencyInfoSrcOpIdDelta[i], "ViewScalabilityInfoSei: op_dependency_info_src_op_id_delta" ) );
if( m_bInitParameterSetsInfoPresentFlag[i] )
{
RNOK( pcWriteIf->writeUvlc( m_uiNumInitSeqParameterSetMinus1[i], "ViewScalabilityInfoSei: num_init_seq_parameter_set_minus1" ) );
for( j = 0; j <= m_uiNumInitSeqParameterSetMinus1[i]; j++ )
RNOK( pcWriteIf->writeUvlc( m_uiInitSeqParameterSetIdDelta[i][j], "ViewScalabilityInfoSei: init_seq_parameter_set_id_delta" ) );
RNOK( pcWriteIf->writeUvlc( m_uiNumInitPicParameterSetMinus1[i], "ViewScalabilityInfoSei: num_init_pic_parameter_set_minus1" ) );
for( j = 0; j <= m_uiNumInitPicParameterSetMinus1[i]; j++ )
RNOK( pcWriteIf->writeUvlc( m_uiInitPicParameterSetIdDelta[i][j], "ViewScalabilityInfoSei: init_pic_parameter_set_id_delta" ) );
}
else
RNOK( pcWriteIf->writeUvlc( m_uiInitParameterSetsInfoSrcOpIdDelta[i], "ViewScalabilityInfoSei: init_parameter_sets_info_src_op_id_delta" ) );
}
return Err::m_nOK;
}
ErrVal
SEI::ViewScalabilityInfoSei::read( HeaderSymbolReadIf *pcReadIf )
{
UInt i=0,j=0;
UInt ReservedBit;
RNOK( pcReadIf->getUvlc( m_uiNumOperationPointsMinus1, "ViewScalabilityInfoSei: num_operation_points_minus1" ) );
for( i = 0; i <= m_uiNumOperationPointsMinus1; i++ )
{
RNOK( pcReadIf->getUvlc( m_uiOperationPointId[i], "ViewScalabilityInfoSei: operation_point_id" ) );
RNOK( pcReadIf->getCode( m_uiPriorityId[i], 5, "ViewScalabilityInfoSei: priority_id" ) );
RNOK( pcReadIf->getCode( m_uiTemporalId[i], 3, "ViewScalabilityInfoSei: temporal_id" ) );
RNOK( pcReadIf->getUvlc( m_uiNumActiveViewsMinus1[i], "ViewScalabilityInfoSei: num_active_views_minus1" ) );
if( m_uiViewId[i] != NULL )
free( m_uiViewId[i] );
m_uiViewId[i] = (UInt*)malloc( ( m_uiNumActiveViewsMinus1[i]+1 )*sizeof(UInt) );
for( j = 0; j <= m_uiNumActiveViewsMinus1[i]; j++ )
{
RNOK( pcReadIf->getUvlc( m_uiViewId[i][j], "ViewScalabilityInfoSei: view_id" ) );
}
RNOK( pcReadIf->getFlag( m_bProfileLevelInfoPresentFlag[i], "ViewScalabilityInfoSei: profile_level_info_present_flag" ) );
RNOK( pcReadIf->getFlag( m_bBitRateInfoPresentFlag[i], "ViewScalabilityInfoSei: bitrate_info_present_flag" ) );
RNOK( pcReadIf->getFlag( m_bFrmRateInfoPresentFlag[i], "ViewScalabilityInfoSei: frm_rate_info_present_flag" ) );
RNOK( pcReadIf->getFlag( m_bOpDependencyInfoPresentFlag[i], "ViewScalabilityInfoSei: op_dependency_info_present_flag" ) );
RNOK( pcReadIf->getFlag( m_bInitParameterSetsInfoPresentFlag[i], "ViewScalabilityInfoSei: init_parameter_sets_info_present_flag" ) );
if( m_bProfileLevelInfoPresentFlag[i] )
{
RNOK( pcReadIf->getCode( m_uiOpProfileIdc[i], 8, "ViewScalabilityInfoSei: op_profile_idc" ) );
RNOK( pcReadIf->getFlag( m_bOpConstraintSet0Flag[i], "ViewScalabilityInfoSei: op_constraint_set0_flag" ) );
RNOK( pcReadIf->getFlag( m_bOpConstraintSet1Flag[i], "ViewScalabilityInfoSei: op_constraint_set1_flag" ) );
RNOK( pcReadIf->getFlag( m_bOpConstraintSet2Flag[i], "ViewScalabilityInfoSei: op_constraint_set2_flag" ) );
RNOK( pcReadIf->getFlag( m_bOpConstraintSet3Flag[i], "ViewScalabilityInfoSei: op_constraint_set3_flag" ) );
RNOK( pcReadIf->getCode( ReservedBit, 4, "ViewScalabilityInfoSei: reserved_zero_4bits" ) );
RNOK( pcReadIf->getCode( m_uiOpLevelIdc[i], 8, "ViewScalabilityInfoSei: op_level_idc" ) );
}
else
RNOK( pcReadIf->getUvlc( m_uiProfileLevelInfoSrcOpIdDelta[i], "ViewScalabilityInfoSei: profile_level_info_src_op_id_delta" ) );
if( m_bBitRateInfoPresentFlag[i] )
{
RNOK( pcReadIf->getCode( m_uiAvgBitrate[i], 16, "ViewScalabilityInfoSei: avg_bitrate" ) );
RNOK( pcReadIf->getCode( m_uiMaxBitrate[i], 16, "ViewScalabilityInfoSei: max_bitrate" ) );
RNOK( pcReadIf->getCode( m_uiMaxBitrateCalcWindow[i], 16, "ViewScalabilityInfoSei: max_bitrate_calc_window" ) );
}
if( m_bFrmRateInfoPresentFlag[i] )
{
RNOK( pcReadIf->getCode( m_uiConstantFrmRateIdc[i], 2, "ViewScalabilityInfoSei: constant_frm_rate_idc" ) );
RNOK( pcReadIf->getCode( m_uiAvgFrmRate[i], 16, "ViewScalabilityInfoSei: avg_frm_rate" ) );
}
else
RNOK( pcReadIf->getUvlc( m_uiFrmRateInfoSrcOpIdDela[i], "ViewScalabilityInfoSei: frm_rate_info_src_op_id_delta" ) );
if( m_bOpDependencyInfoPresentFlag[i] )
{
RNOK( pcReadIf->getUvlc( m_uiNumDirectlyDependentOps[i], "ViewScalabilityInfoSei: num_directly_dependent_ops" ) );
if( m_uiDirectlyDependentOpIdDeltaMinus1[i] != NULL )
free( m_uiDirectlyDependentOpIdDeltaMinus1[i] );
m_uiDirectlyDependentOpIdDeltaMinus1[i] = (UInt*)malloc( ( m_uiNumDirectlyDependentOps[i]+1 ) * sizeof(UInt) );
for( j = 0; j < m_uiNumDirectlyDependentOps[i]; j++ )
RNOK( pcReadIf->getUvlc( m_uiDirectlyDependentOpIdDeltaMinus1[i][j], "ViewScalabilityInfoSei: directly_dependent_op_id_delta_minus1" ) );
}
else
RNOK( pcReadIf->getUvlc( m_uiOpDependencyInfoSrcOpIdDelta[i], "ViewScalabilityInfoSei: op_dependency_info_src_op_id_delta" ) );
if( m_bInitParameterSetsInfoPresentFlag[i] )
{
RNOK( pcReadIf->getUvlc( m_uiNumInitSeqParameterSetMinus1[i], "ViewScalabilityInfoSei: num_init_seq_parameter_set_minus1" ) );
if( m_uiInitSeqParameterSetIdDelta[i] != NULL )
free( m_uiInitSeqParameterSetIdDelta[i] );
m_uiInitSeqParameterSetIdDelta[i] = (UInt*)malloc( ( m_uiNumInitSeqParameterSetMinus1[i]+1 ) * sizeof(UInt) );
for( j = 0; j <= m_uiNumInitSeqParameterSetMinus1[i]; j++ )
RNOK( pcReadIf->getUvlc( m_uiInitSeqParameterSetIdDelta[i][j], "ViewScalabilityInfoSei: init_seq_parameter_set_id_delta" ) );
RNOK( pcReadIf->getUvlc( m_uiNumInitPicParameterSetMinus1[i], "ViewScalabilityInfoSei: num_init_pic_parameter_set_minus1" ) );
if( m_uiInitPicParameterSetIdDelta[i] != NULL )
free( m_uiInitPicParameterSetIdDelta[i] );
m_uiInitPicParameterSetIdDelta[i] = (UInt*)malloc( ( m_uiNumInitPicParameterSetMinus1[i]+1 ) * sizeof(UInt) );
for( j = 0; j <= m_uiNumInitPicParameterSetMinus1[i]; j++ )
RNOK( pcReadIf->getUvlc( m_uiInitPicParameterSetIdDelta[i][j], "ViewScalabilityInfoSei: init_pic_parameter_set_id_delta" ) );
}
else
RNOK( pcReadIf->getUvlc( m_uiInitParameterSetsInfoSrcOpIdDelta[i], "ViewScalabilityInfoSei: init_parameter_sets_info_src_op_id_delta" ) );
}
return Err::m_nOK;
}
//JVT-W035 {
//////////////////////////////////////////////////////////////////////////
//
// 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_uiNumPicturesMinus1, "ScalableNestingSei:NumPicturesMinus1" ) );
for( uiIndex = 0; uiIndex <= m_uiNumPicturesMinus1; uiIndex++ )
{
RNOK( pcWriteIf->writeCode( m_uiPicId[uiIndex], 10, " ScalableNestingSei:uiPicId " ) );
}
RNOK( pcWriteIf->writeCode( m_uiTemporalId, 3, " ScalableNestingSei:uiTemporalId " ) );
}
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_uiNumPicturesMinus1, "ScalableNestingSei:NumPicturesMinus1" ) );
for( UInt uiIndex = 0; uiIndex <= m_uiNumPicturesMinus1; uiIndex++ )
{
RNOK( pcReadIf->getCode( m_uiPicId[uiIndex], 10, " ScalableNestingSei:uiPicId " ) );
}
RNOK( pcReadIf->getCode( m_uiTemporalId, 3, " ScalableNestingSei:uiTemporalId " ) );
}
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 FULLFRAME_SNAPSHOT_SEI:
{
SEI::FullframeSnapshotSei* pcFullframeSnapshotSei;
RNOK( SEI::FullframeSnapshotSei::create(pcFullframeSnapshotSei) );
RNOK( pcFullframeSnapshotSei->read(pcReadIf) );
m_pcSEIMessage = pcFullframeSnapshotSei;
// RNOK( pcFullframeSnapshotSei->destroy() );
break;
}
//more case can be added here
default:
break;
}
return Err::m_nOK;
}
//Full Frame Snapshot sei message, simplified
ErrVal
SEI::FullframeSnapshotSei::create( FullframeSnapshotSei* &rpcSeiMessage )
{
rpcSeiMessage = new FullframeSnapshotSei();
ROT( NULL == rpcSeiMessage );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?