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

📄 assembler.cpp

📁 JMVM MPEG MVC/3DAV 测试平台 国际通用标准
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	 if( !pcViewScalInfoSei )
	 {
	   m_ppcReadBitstream[uiProcessingView]->setPosition( iPos );
	   uiProcessingView++;
	   continue;
     }

	pcTmpViewScalInfoSei[uiProcessingView]    = pcViewScalInfoSei;
	bViewScalSei = true;
	
	UInt NumOp;
	if( uiProcessingView )
		NumOp = pcFinalViewScalSei->getNumOperationPointsMinus1() + pcTmpViewScalInfoSei[uiProcessingView]->getNumOperationPointsMinus1() + 1;
	else
		NumOp = pcTmpViewScalInfoSei[uiProcessingView]->getNumOperationPointsMinus1();
	
	pcFinalViewScalSei->setNumOperationPointsMinus1( NumOp );

    if(pcBinData)
    { 
      RNOK( m_ppcReadBitstream[uiProcessingView]->releasePacket( pcBinData ) );
      pcBinData = NULL;
    }
    uiProcessingView++;
   }

   if( bViewScalSei )
   {
     UInt OpId = 0;
	 bViewScalSei = false;
	 bFinalViewScalSei = true;
	 UInt j;

	 for( uiProcessingView = 0; uiProcessingView < m_uiNumViews; uiProcessingView++ )
	 {
	   UInt NumOp = pcTmpViewScalInfoSei[uiProcessingView]->getNumOperationPointsMinus1();
	   for( UInt i = 0; i <= NumOp; i++ )
	   {
		 pcFinalViewScalSei->setOperationPointId( OpId, OpId );
		 pcFinalViewScalSei->setPriorityId( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getPriorityId(i) );
		 pcFinalViewScalSei->setTemporalId( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getTemporalId(i) );

		 pcFinalViewScalSei->setNumActiveViewsMinus1( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getNumActiveViewsMinus1(i) );
		 for(  j = 0; j <= pcTmpViewScalInfoSei[uiProcessingView]->getNumActiveViewsMinus1(i); j++ )
		   pcFinalViewScalSei->setViewId( OpId, j, pcTmpViewScalInfoSei[uiProcessingView]->getViewId(i,j) );

		 pcFinalViewScalSei->setProfileLevelInfoPresentFlag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getProfileLevelInfoPresentFlag(i) );
		 pcFinalViewScalSei->setBitRateInfoPresentFlag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getBitRateInfoPresentFlag(i) );
		 pcFinalViewScalSei->setFrmRateInfoPresentFlag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getFrmRateInfoPresentFlag(i) );
		 pcFinalViewScalSei->setOpDependencyInfoPresentFlag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpDependencyInfoPresentFlag(i) );
		 pcFinalViewScalSei->setInitParameterSetsInfoPresentFlag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getInitParameterSetsInfoPresentFlag(i) );

		 if( pcFinalViewScalSei->getProfileLevelInfoPresentFlag(OpId) )
		 {
		   pcFinalViewScalSei->setOpProfileIdc( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpProfileIdc(i) );
		   pcFinalViewScalSei->setOpConstraintSet0Flag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpConstraintSet0Flag(i) );
		   pcFinalViewScalSei->setOpConstraintSet1Flag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpConstraintSet1Flag(i) );
		   pcFinalViewScalSei->setOpConstraintSet2Flag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpConstraintSet2Flag(i) );
		   pcFinalViewScalSei->setOpConstraintSet3Flag( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpConstraintSet3Flag(i) );
		   pcFinalViewScalSei->setOpLevelIdc( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpLevelIdc(i) );
		 }
		 else
		   pcFinalViewScalSei->setProfileLevelInfoSrcOpIdDelta( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getProfileLevelInfoSrcOpIdDelta(i) );

		 if( pcFinalViewScalSei->getBitRateInfoPresentFlag(OpId) )
		 {
		   pcFinalViewScalSei->setAvgBitrate( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getAvgBitrate(i) );
		   pcFinalViewScalSei->setMaxBitrate( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getMaxBitrate(i) );
		   pcFinalViewScalSei->setMaxBitrateCalcWindow( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getMaxBitrateCalcWindow(i) );
		 }

		 if( pcFinalViewScalSei->getFrmRateInfoPresentFlag(OpId) )
		 {
		   pcFinalViewScalSei->setConstantFrmRateIdc( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getConstantFrmRateIdc(i) );
		   pcFinalViewScalSei->setAvgFrmRate( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getAvgFrmRate(i) );
   		 }
		 else
		   pcFinalViewScalSei->setFrmRateInfoSrcOpIdDela( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getFrmRateInfoSrcOpIdDela(i) );

 		 pcFinalViewScalSei->setNumDirectlyDependentOps(OpId, MAX_OPERATION_POINTS ); //bug-fix

		 
		 if( pcFinalViewScalSei->getOpDependencyInfoPresentFlag(OpId) )
		 {
		   pcFinalViewScalSei->setNumDirectlyDependentOps( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getNumDirectlyDependentOps(i) );
		   for( j = 0; j < pcFinalViewScalSei->getNumDirectlyDependentOps( OpId ); j++ )
		   	 pcFinalViewScalSei->setDirectlyDependentOpIdDeltaMinus1( OpId, j, pcTmpViewScalInfoSei[uiProcessingView]->getDirectlyDependentOpIdDeltaMinus1(i,j) );
		 }
		 else
		   pcFinalViewScalSei->setOpDependencyInfoSrcOpIdDelta( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getOpDependencyInfoSrcOpIdDelta(i) );

		
		 if( pcFinalViewScalSei->getInitParameterSetsInfoPresentFlag(OpId) )
		 {
		   pcFinalViewScalSei->setNumInitSeqParameterSetMinus1( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getNumInitSeqParameterSetMinus1(i) );
		   for( j = 0; j < pcFinalViewScalSei->getNumInitSeqParameterSetMinus1( OpId ); j++ )
			 pcFinalViewScalSei->setInitSeqParameterSetIdDelta( OpId, j, pcTmpViewScalInfoSei[uiProcessingView]->getInitSeqParameterSetIdDelta(i,j) );

		   pcFinalViewScalSei->setNumInitPicParameterSetMinus1( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getNumInitPicParameterSetMinus1(i) );
		   for( j = 0; j < pcFinalViewScalSei->getNumInitPicParameterSetMinus1( OpId ); j++ )
			 pcFinalViewScalSei->setInitPicParameterSetIdDelta( OpId, j, pcTmpViewScalInfoSei[uiProcessingView]->getInitPicParameterSetIdDelta(i,j) );
		 }
		 else
		   pcFinalViewScalSei->setInitParameterSetsInfoSrcOpIdDelta( OpId, pcTmpViewScalInfoSei[uiProcessingView]->getInitParameterSetsInfoSrcOpIdDelta(i) );
	   
	     OpId++;
	   }
	 }
   }
   uiProcessingView = m_uiTempViewDecOrder;
//SEI }
    //===== get packet =====
    RNOK( m_ppcReadBitstream[uiProcessingView]->extractPacket( pcBinData, bEOS ) );
    if( bEOS )
    {
      RNOK( m_ppcReadBitstream[uiProcessingView]->releasePacket( pcBinData ) );
      pcBinData = NULL;
      m_uiTempViewDecOrder++;
      continue;
    }
    uiNumVCLUnits++;

//JVT-W080, BUG_FIX    //===== set packet length =====
    while( pcBinData->data()[ pcBinData->size() - 1 ] == 0x00 )
    {
      RNOK( pcBinData->decreaseEndPos( 1 ) ); // remove zero at end
    }

//~JVT-W080
    //===== get NAL Unit type only =====
    //----------------------------assembling ----------------------------------------------
    UChar       ucByte        = (pcBinData->data())[0];
    NalUnitType eNalUnitType  = NalUnitType ( ucByte  & 0x1F );
    if(NAL_UNIT_SPS == eNalUnitType || NAL_UNIT_PPS == eNalUnitType )
    {
      Bool isMVCProfile = false;
      uiNumVCLUnits--;
      if(bNewAUStart){ bKeep = true; uiNumOtherNalU++;}
      // else discard the SPS and PPS
//SEI {
// fix Nov. 30{
    
    if (NAL_UNIT_SPS == eNalUnitType ) 
    {
      RNOK( m_pcH264AVCPacketAnalyzer ->isMVCProfile ( pcBinData, isMVCProfile) );
    }
	  if(isMVCProfile && bFinalViewScalSei && pcFinalViewScalSei )
// fix Nov. 30}	  
	  {
      RNOK( m_pcH264AVCPacketAnalyzer ->processSEIAndMVC( pcBinData, pcFinalViewScalSei ) );
      BinData* pcBinData1 = 0;
      pcBinData1 = new BinData;
      xWriteViewScalSEIToBuffer( pcFinalViewScalSei, pcBinData1 );
      //Nov. 31{
      UChar ucTemp[100];
      UInt  uiRet;
      i64Start = m_pcWriteBitstream->getFile().tell();
      m_pcWriteBitstream->getFile().close();
      m_pcWriteBitstream->getFile().open(m_pcAssemblerParameter->getOutFile(),LargeFile::OM_READONLY);
      m_pcWriteBitstream->getFile().read(ucTemp,(UInt) i64Start,uiRet);
      m_pcWriteBitstream->getFile().close();
      m_pcWriteBitstream->getFile().open(m_pcAssemblerParameter->getOutFile(),LargeFile::OM_WRITEONLY);
      //Nov. 31}
      RNOK( m_pcWriteBitstream->writePacket( &m_cBinDataStartCode ) );
      RNOK( m_pcWriteBitstream->writePacket( pcBinData1 ) );
      //Nov. 31{
      m_pcWriteBitstream->getFile().write(ucTemp,(UInt) i64Start);
      //Nov. 31}
      pcFinalViewScalSei->destroy();
      pcFinalViewScalSei = NULL;
      pcBinData1->deleteData();
      delete pcBinData1;
	  }

//SEI }
    }
//JVT-W080
		else if ( NAL_UNIT_SEI == eNalUnitType )
		{
		  uiNumVCLUnits--;
      bKeep = true; 
			uiNumOtherNalU++;
		}
//~JVT-W080
    else if ( NAL_UNIT_CODED_SLICE_PREFIX == eNalUnitType )
    {
      bKeep        =  true;
      bNewAUStart  =  false;
      // for trace only 
      printf("frames %d \n", uiFrames++);
    }
    else if ( NAL_UNIT_CODED_SLICE == eNalUnitType || NAL_UNIT_CODED_SLICE_IDR == eNalUnitType || NAL_UNIT_CODED_SLICE_SCALABLE == eNalUnitType || NAL_UNIT_CODED_SLICE_IDR_SCALABLE  == eNalUnitType )
      // JVT-W035
    {
      bKeep          =  true;

      m_uiTempViewDecOrder++;
      
      if( m_uiTempViewDecOrder==m_uiNumViews ) 
      {
        bNewAUStart          = true;
        m_uiTempViewDecOrder = 0;
      }
      else bNewAUStart = false;
    }
    else 
    {
      uiNumOtherNalU++;
      bKeep =true;
    }
    
    if( bKeep )
    {
      RNOK( m_pcWriteBitstream->writePacket( &m_cBinDataStartCode ) );
      RNOK( m_pcWriteBitstream->writePacket( pcBinData ) );
      printf("%d\n", uiProcessingView);
    }
    //----------------------------assembling ----------------------------------------------
    
   if(pcBinData)
   {
    RNOK( m_ppcReadBitstream[uiProcessingView]->releasePacket( pcBinData ) );
    pcBinData = NULL;
   }
  }
  printf("**************************************************\n");
  printf("%d views x %d frames processed by the assembler\n number of total VCL NAL Units: %d\n", m_uiNumViews, uiFrames, uiNumVCLUnits);
  printf("Number of Other written NAL Units: %d \n", uiNumOtherNalU);
  return Err::m_nOK;
}

ErrVal
Assembler::go()
{
  RNOK ( xAnalyse() );


  /* trace 
  if( m_pcExtractionTraceFile ) 
  {
    RNOK( xExtractTrace() ); 
  }
  */

  return Err::m_nOK;
}

⌨️ 快捷键说明

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