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

📄 scalableseimodifycode.cpp

📁 JVT-Z203_jsvm.rar
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  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 + -