📄 scalableseimodifycode.cpp
字号:
m_uiBitsWritten += uiNumberOfBits;
if( (Int)uiNumberOfBits < m_iValidBits) // one word
{
m_iValidBits -= uiNumberOfBits;
m_ulCurrentBits |= uiBits << m_iValidBits;
return Err::m_nOK;
}
ROT( 0 == m_uiDWordsLeft );
m_uiDWordsLeft--;
UInt uiShift = uiNumberOfBits - m_iValidBits;
// add the last bits
m_ulCurrentBits |= uiBits >> uiShift;
*m_pulStreamPacket++ = xSwap( m_ulCurrentBits );
// note: there is a problem with left shift with 32
m_iValidBits = 32 - uiShift;
m_ulCurrentBits = uiBits << m_iValidBits;
if( 0 == uiShift )
{
m_ulCurrentBits = 0;
}
return Err::m_nOK;
}
ErrVal
ScalableSEIModifyCode::WritePayloadHeader( enum h264::SEI::MessageType eType, UInt uiSize )
{
//type
{
UInt uiTemp = eType;
UInt uiByte = 0xFF;
while( 0xFF == uiByte )
{
uiByte = (0xFF > uiTemp) ? uiTemp : 0xff;
uiTemp -= 0xFF;
RNOK( WriteCode( uiByte, 8 ) );
}
}
// size
{
UInt uiTemp = uiSize;
UInt uiByte = 0xFF;
while( 0xFF == uiByte )
{
uiByte = (0xFF > uiTemp) ? uiTemp : 0xff;
uiTemp -= 0xFF;
RNOK( WriteCode( uiByte, 8 ) );
}
}
return Err::m_nOK;
}
ErrVal
ScalableSEIModifyCode::WriteAlignZero()
{
return Write( 0, m_iValidBits & 0x7 );
}
ErrVal
ScalableSEIModifyCode::WriteTrailingBits()
{
RNOK( WriteFlag( 1 ) );
RNOK( WriteAlignZero() );
return Err::m_nOK;
}
ErrVal
ScalableSEIModifyCode::flushBuffer()
{
*m_pulStreamPacket = xSwap( m_ulCurrentBits );
m_uiBitsWritten = (m_uiBitsWritten+7)/8;
m_uiBitsWritten *= 8;
return Err::m_nOK;
}
ErrVal
ScalableSEIModifyCode::ConvertRBSPToPayload( UChar* m_pucBuffer,
UChar pulStreamPacket[],
UInt& ruiBytesWritten,
UInt uiHeaderBytes )
{
UInt uiZeroCount = 0;
UInt uiReadOffset = uiHeaderBytes;
UInt uiWriteOffset = uiHeaderBytes;
//===== NAL unit header =====
for( UInt uiIndex = 0; uiIndex < uiHeaderBytes; uiIndex++ )
{
m_pucBuffer[uiIndex] = (UChar)pulStreamPacket[uiIndex];
}
//===== NAL unit payload =====
for( ; uiReadOffset < ruiBytesWritten ; uiReadOffset++, uiWriteOffset++ )
{
if( 2 == uiZeroCount && 0 == ( pulStreamPacket[uiReadOffset] & 0xfc ) )
{
uiZeroCount = 0;
m_pucBuffer[uiWriteOffset++] = 0x03;
}
m_pucBuffer[uiWriteOffset] = (UChar)pulStreamPacket[uiReadOffset];
if( 0 == pulStreamPacket[uiReadOffset] )
{
uiZeroCount++;
}
else
{
uiZeroCount = 0;
}
}
if( ( 0x00 == m_pucBuffer[uiWriteOffset-1] ) && ( 0x00 == m_pucBuffer[uiWriteOffset-2] ) )
{
m_pucBuffer[uiWriteOffset++] = 0x03;
}
ruiBytesWritten = uiWriteOffset;
return Err::m_nOK;
}
ErrVal
ScalableSEIModifyCode::SEICode( h264::SEI::ScalableSei* pcScalableSei, ScalableSEIModifyCode *pcScalableModifyCode )
{
// JVT-U085 LMI
pcScalableModifyCode->WriteFlag( pcScalableSei->getTlevelNestingFlag() );
//pcScalableModifyCode->WriteFlag( pcScalableSei->getQualityLayerInfoPresentFlag() );//JVT-W051 SEI changes update
pcScalableModifyCode->WriteFlag( pcScalableSei->getPriorityLayerInfoPresentFlag() );//SEI changes update
pcScalableModifyCode->WriteFlag( pcScalableSei->getPriorityIdSettingFlag() );//JVT-W053 wxwan
UInt uiNumScalableLayersMinus1 = pcScalableSei->getNumLayersMinus1();
pcScalableModifyCode->WriteUVLC( uiNumScalableLayersMinus1 );
for( UInt uiLayer = 0; uiLayer <= uiNumScalableLayersMinus1; uiLayer++ )
{
//JVT-W051 {
pcScalableModifyCode->WriteUVLC( pcScalableSei->getLayerId( uiLayer ) );
//JVT-W051 }
//JVT-S036 lsj start
pcScalableModifyCode->WriteCode( pcScalableSei->getPriorityId( uiLayer ), 6 );//SEI changes update
pcScalableModifyCode->WriteFlag( pcScalableSei->getDiscardableFlag( uiLayer ) );
pcScalableModifyCode->WriteCode( pcScalableSei->getDependencyId( uiLayer ), 3 );
pcScalableModifyCode->WriteCode( pcScalableSei->getQualityId( uiLayer ), 4 );
pcScalableModifyCode->WriteCode( pcScalableSei->getTemporalId( uiLayer ), 3 );//SEI changes update
pcScalableModifyCode->WriteFlag( pcScalableSei->getSubPicLayerFlag( uiLayer ) );
pcScalableModifyCode->WriteFlag( pcScalableSei->getSubRegionLayerFlag( uiLayer ) );
pcScalableModifyCode->WriteFlag( pcScalableSei->getIroiSliceDivisionInfoPresentFlag( uiLayer ) );
pcScalableModifyCode->WriteFlag( pcScalableSei->getProfileLevelInfoPresentFlag( uiLayer ) );
//JVT-S036 lsj end
pcScalableModifyCode->WriteFlag( pcScalableSei->getBitrateInfoPresentFlag( uiLayer ) );
pcScalableModifyCode->WriteFlag( pcScalableSei->getFrmRateInfoPresentFlag( uiLayer ) );
pcScalableModifyCode->WriteFlag( pcScalableSei->getFrmSizeInfoPresentFlag( uiLayer ) );
pcScalableModifyCode->WriteFlag( pcScalableSei->getLayerDependencyInfoPresentFlag( uiLayer ) );
//SEI changes update {
//pcScalableModifyCode->WriteFlag( pcScalableSei->getInitParameterSetsInfoPresentFlag( uiLayer ) );
pcScalableModifyCode->WriteFlag( pcScalableSei->getParameterSetsInfoPresentFlag( uiLayer ) );
//pcScalableModifyCode->WriteFlag( pcScalableSei->getBitstreamRestrictionFlag( uiLayer ) );//JVT-W051
pcScalableModifyCode->WriteFlag( pcScalableSei->getBitstreamRestrictionInfoPresentFlag( uiLayer ) );//JVT-W051
//SEI changes update }
pcScalableModifyCode->WriteFlag( pcScalableSei->getExactInterlayerPredFlag( uiLayer ) ); //JVT-S036 lsj
if( pcScalableSei->getSubPicLayerFlag( uiLayer ) || pcScalableSei->getIroiSliceDivisionInfoPresentFlag( uiLayer ) )
{
pcScalableModifyCode->WriteFlag( pcScalableSei->getExactSampleValueMatchFlag( uiLayer ) );
}
//pcScalableModifyCode->WriteFlag( pcScalableSei->getAvcLayerConversionFlag( uiLayer ) ); //JVT-W046
pcScalableModifyCode->WriteFlag( pcScalableSei->getLayerConversionFlag( uiLayer ) ); //JVT-W046 SEI changes update
pcScalableModifyCode->WriteFlag( pcScalableSei->getLayerOutputFlag( uiLayer ) );//JVT-W047 wxwan
if( pcScalableSei->getProfileLevelInfoPresentFlag( uiLayer ) )
{
//JVT-W051 {
//pcScalableModifyCode->WriteCode( pcScalableSei->getLayerProfileIdc( uiLayer ), 8 );
pcScalableModifyCode->WriteCode( pcScalableSei->getLayerProfileIdc( uiLayer ), 24 );
//pcScalableModifyCode->WriteFlag( pcScalableSei->getLayerConstraintSet0Flag( uiLayer ) );
//pcScalableModifyCode->WriteFlag( pcScalableSei->getLayerConstraintSet1Flag( uiLayer ) );
//pcScalableModifyCode->WriteFlag( pcScalableSei->getLayerConstraintSet2Flag( uiLayer ) );
//pcScalableModifyCode->WriteFlag( pcScalableSei->getLayerConstraintSet3Flag( uiLayer ) );
//pcScalableModifyCode->WriteCode( 0, 4 );
//pcScalableModifyCode->WriteCode( pcScalableSei->getLayerLevelIdc( uiLayer ), 8 );
//JVT-W051 }
}
//SEI changes update {
//else
// {//JVT-S036 lsj
// pcScalableModifyCode->WriteUVLC( pcScalableSei->getProfileLevelInfoSrcLayerIdDelta( uiLayer ) );
// }
//SEI changes update }
// JVT-S036 lsj delete
if( pcScalableSei->getBitrateInfoPresentFlag( uiLayer ) )
{
pcScalableModifyCode->WriteCode( pcScalableSei->getAvgBitrateCode( uiLayer ), 16 );
//JVT-S036 lsj start
pcScalableModifyCode->WriteCode( pcScalableSei->getMaxBitrateLayerCode( uiLayer ), 16 );
pcScalableModifyCode->WriteCode( pcScalableSei->getMaxBitrateDecodedPictureCode( uiLayer ), 16 );
pcScalableModifyCode->WriteCode( pcScalableSei->getMaxBitrateCalcWindow( uiLayer ), 16 );
//JVT-S036 lsj end
}
if( pcScalableSei->getFrmRateInfoPresentFlag( uiLayer ) )
{
pcScalableModifyCode->WriteCode( pcScalableSei->getConstantFrmRateIdc( uiLayer ), 2 );
pcScalableModifyCode->WriteCode( pcScalableSei->getAvgFrmRate( uiLayer ), 16 );
}
//SEI changes update
//else
//{//JVT-S036 lsj
// pcScalableModifyCode->WriteUVLC( pcScalableSei->getFrmRateInfoSrcLayerIdDelta( uiLayer ) );
//}
//if( pcScalableSei->getFrmSizeInfoPresentFlag( uiLayer ) )
if( pcScalableSei->getFrmSizeInfoPresentFlag( uiLayer ) || pcScalableSei->getIroiSliceDivisionInfoPresentFlag(uiLayer) )//SEI changes update
{
pcScalableModifyCode->WriteUVLC( pcScalableSei->getFrmWidthInMbsMinus1( uiLayer ) );
pcScalableModifyCode->WriteUVLC( pcScalableSei->getFrmHeightInMbsMinus1( uiLayer ) );
}
//SEI changes update
//else
//{//JVT-S036 lsj
// pcScalableModifyCode->WriteUVLC( pcScalableSei->getFrmSizeInfoSrcLayerIdDelta( uiLayer ) );
//}
if( pcScalableSei->getSubRegionLayerFlag( uiLayer ) )
{
//JVT-W051 {
//pcScalableModifyCode->WriteCode( pcScalableSei->getBaseRegionLayerId( uiLayer ), 8 );
pcScalableModifyCode->WriteUVLC( pcScalableSei->getBaseRegionLayerId( uiLayer ) );
//JVT-W051 }
pcScalableModifyCode->WriteFlag( pcScalableSei->getDynamicRectFlag( uiLayer ) );
//JVT-W051 {
//if( pcScalableSei->getDynamicRectFlag( uiLayer ) )
if( !pcScalableSei->getDynamicRectFlag( uiLayer ) )
//JVT-W051 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -