?? assembler.cpp
字號:
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 + -