📄 h264avcencoder.cpp
字号:
UInt uilayerProfileIdc = 0; //may be changed
Bool bLayerConstraintSet0Flag = false; //may be changed
//bug-fix suffix{{
// Bool bH264AVCCompatibleTmp = m_pcCodingParameter->getBaseLayerMode() > 0 && uiCurrLayer == 0;
Bool bH264AVCCompatibleTmp = ( uiCurrLayer == 0 );
//bug-fix suffix}}
Bool bLayerConstraintSet1Flag = ( bH264AVCCompatibleTmp ? 1 : 0 ); //may be changed
Bool bLayerConstraintSet2Flag = false; //may be changed
Bool bLayerConstraintSet3Flag = false; //may be changed
UInt uiLayerLevelIdc = 0; //may be changed
pcScalableSEI->setLayerProfileIdc(uiNumScalableLayer, uilayerProfileIdc);
pcScalableSEI->setLayerConstraintSet0Flag(uiNumScalableLayer, bLayerConstraintSet0Flag);
pcScalableSEI->setLayerConstraintSet1Flag(uiNumScalableLayer, bLayerConstraintSet1Flag);
pcScalableSEI->setLayerConstraintSet2Flag(uiNumScalableLayer, bLayerConstraintSet2Flag);
pcScalableSEI->setLayerConstraintSet3Flag(uiNumScalableLayer, bLayerConstraintSet3Flag);
pcScalableSEI->setLayerLevelIdc(uiNumScalableLayer, uiLayerLevelIdc);
}
else
{//JVT-S036 lsj
UInt bProfileLevelInfoSrcLayerIdDelta = 0; //may be changed
pcScalableSEI->setProfileLevelInfoSrcLayerIdDelta(uiNumScalableLayer, bProfileLevelInfoSrcLayerIdDelta);
}
/* if(pcScalableSEI->getDecodingDependencyInfoPresentFlag(uiNumScalableLayer))
{
//UInt uiTempLevel = uiCurrTempLevel - uiMinTempLevel;
UInt uiTempLevel = uiCurrTempLevel; //BUG_FIX_FT_01_2006
UInt uiDependencyID = uiCurrLayer;
UInt uiQualityLevel = uiCurrFGSLevel;
// BUG_FIX liuhui{
m_aaauiScalableLayerId[uiCurrLayer][uiCurrTempLevel][uiCurrFGSLevel] = uiNumScalableLayer;
// BUG_FIX liuhui}
UInt uiSimplePriorityId = 0;
Bool uiDiscardableFlag = false;
pcScalableSEI->setSimplePriorityId(uiNumScalableLayer, uiSimplePriorityId);
pcScalableSEI->setDiscardableFlag(uiNumScalableLayer, uiDiscardableFlag);
pcScalableSEI->setTemporalLevel(uiNumScalableLayer, uiTempLevel);
pcScalableSEI->setDependencyId(uiNumScalableLayer, uiDependencyID);
pcScalableSEI->setQualityLevel(uiNumScalableLayer, uiQualityLevel);
}
JVT-S036 lsj */
if(pcScalableSEI->getBitrateInfoPresentFlag(uiNumScalableLayer))
{
// BUG_FIX liuhui{
UInt uiAvgBitrate = (UInt)( m_aaadSingleLayerBitrate[uiCurrLayer][uiCurrTempLevel][uiCurrFGSLevel]+0.5 );
// BUG_FIX liuhui}
//JVT-S036 lsj start
UInt uiMaxBitrateLayer = 0; //should be changed
UInt uiMaxBitrateDecodedPicture = 0; //should be changed
UInt uiMaxBitrateCalcWindow = 0; //should be changed
pcScalableSEI->setAvgBitrate(uiNumScalableLayer, uiAvgBitrate);
pcScalableSEI->setMaxBitrateLayer(uiNumScalableLayer, uiMaxBitrateLayer);
pcScalableSEI->setMaxBitrateDecodedPicture(uiNumScalableLayer, uiMaxBitrateDecodedPicture);
pcScalableSEI->setMaxBitrateCalcWindow(uiNumScalableLayer, uiMaxBitrateCalcWindow);
//JVT-S036 lsj end
}
if(pcScalableSEI->getFrmRateInfoPresentFlag(uiNumScalableLayer))
{
UInt uiConstantFrmRateIdc = 0;
UInt uiAvgFrmRate = (UInt)( 256*dFramerate[uiTotalScalableLayer] + 0.5 );
pcScalableSEI->setConstantFrmRateIdc(uiNumScalableLayer, uiConstantFrmRateIdc);
pcScalableSEI->setAvgFrmRate(uiNumScalableLayer, uiAvgFrmRate);
}
else
{//JVT-S036 lsj
UInt bFrmRateInfoSrcLayerIdDelta = 0; //may be changed
pcScalableSEI->setFrmRateInfoSrcLayerIdDelta(uiNumScalableLayer, bFrmRateInfoSrcLayerIdDelta);
}
if(pcScalableSEI->getFrmSizeInfoPresentFlag(uiNumScalableLayer))
{
UInt uiFrmWidthInMbsMinus1 = rcLayer.getFrameWidth()/16 - 1;
UInt uiFrmHeightInMbsMinus1 = rcLayer.getFrameHeight()/16 - 1;
pcScalableSEI->setFrmWidthInMbsMinus1(uiNumScalableLayer, uiFrmWidthInMbsMinus1);
pcScalableSEI->setFrmHeightInMbsMinus1(uiNumScalableLayer, uiFrmHeightInMbsMinus1);
}
else
{//JVT-S036 lsj
UInt bFrmSizeInfoSrcLayerIdDelta = 0; //may be changed
pcScalableSEI->setFrmSizeInfoSrcLayerIdDelta(uiNumScalableLayer, bFrmSizeInfoSrcLayerIdDelta);
}
if(pcScalableSEI->getSubRegionLayerFlag(uiNumScalableLayer))
{
UInt uiBaseRegionLayerId = 0;
Bool bDynamicRectFlag = false;
pcScalableSEI->setBaseRegionLayerId(uiNumScalableLayer, uiBaseRegionLayerId);
pcScalableSEI->setDynamicRectFlag(uiNumScalableLayer, bDynamicRectFlag);
if(pcScalableSEI->getDynamicRectFlag(uiNumScalableLayer))
{
UInt uiHorizontalOffset = 0;
UInt uiVerticalOffset = 0;
UInt uiRegionWidth = 0;
UInt uiRegionHeight = 0;
pcScalableSEI->setHorizontalOffset(uiNumScalableLayer, uiHorizontalOffset);
pcScalableSEI->setVerticalOffset(uiNumScalableLayer, uiVerticalOffset);
pcScalableSEI->setRegionWidth(uiNumScalableLayer, uiRegionWidth);
pcScalableSEI->setRegionHeight(uiNumScalableLayer, uiRegionHeight);
}
}
else
{//JVT-S036 lsj
UInt bSubRegionInfoSrcLayerIdDelta = 0; //may be changed
pcScalableSEI->setSubRegionInfoSrcLayerIdDelta(uiNumScalableLayer, bSubRegionInfoSrcLayerIdDelta);
}
//JVT-S036 lsj start
if( pcScalableSEI->getSubPicLayerFlag( uiNumScalableLayer ) )
{
UInt RoiId = 1;//should be changed
pcScalableSEI->setRoiId( uiNumScalableLayer, RoiId );
}
if( pcScalableSEI->getIroiSliceDivisionInfoPresentFlag( uiNumScalableLayer ) )
{
// JVT-S054 (REPLACE) ->
/*
UInt bIroiSliceDivisionType = 0; //may be changed
UInt bNumSliceMinus1 = 1;
pcScalableSEI->setIroiSliceDivisionType( uiNumScalableLayer, bIroiSliceDivisionType );
if( bIroiSliceDivisionType == 0 )
{
UInt bGridSliceWidthInMbsMinus1 = 0; //should be changed
UInt bGridSliceHeightInMbsMinus1 = 0; //should be changed
pcScalableSEI->setGridSliceWidthInMbsMinus1( uiNumScalableLayer, bGridSliceWidthInMbsMinus1 );
pcScalableSEI->setGridSliceHeightInMbsMinus1( uiNumScalableLayer, bGridSliceHeightInMbsMinus1 );
}
else if( bIroiSliceDivisionType == 1 )
{
bNumSliceMinus1 = 1; //should be changed
pcScalableSEI->setNumSliceMinus1( uiNumScalableLayer, bNumSliceMinus1);
for ( j = 0; j <= bNumSliceMinus1; j++ )
{
UInt bFirstMbInSlice = 1;//should be changed
UInt bSliceWidthInMbsMinus1 = 1;//should be changed
UInt bSliceHeightInMbsMinus1 = 1;//should be changed
pcScalableSEI->setFirstMbInSlice( uiNumScalableLayer, j, bFirstMbInSlice );
pcScalableSEI->setSliceWidthInMbsMinus1( uiNumScalableLayer, j, bSliceWidthInMbsMinus1 );
pcScalableSEI->setSliceHeightInMbsMinus1( uiNumScalableLayer, j, bSliceHeightInMbsMinus1 );
}
}
else if( bIroiSliceDivisionType == 2 )
{
pcScalableSEI->setNumSliceMinus1( uiNumScalableLayer, bNumSliceMinus1 );
UInt uiFrameHeightInMb = pcScalableSEI->getFrmHeightInMbsMinus1( uiNumScalableLayer ) + 1;
UInt uiFrameWidthInMb = pcScalableSEI->getFrmWidthInMbsMinus1(uiNumScalableLayer ) + 1;
UInt uiPicSizeInMbs = uiFrameHeightInMb * uiFrameWidthInMb;
for ( j = 0; j < uiPicSizeInMbs; j++)
{
UInt bSliceId = 1; //should be changed
pcScalableSEI->setSliceId( uiNumScalableLayer, j, bSliceId );
}
}
*/
pcScalableSEI->setIroiSliceDivisionType( uiNumScalableLayer, rcLayer.m_uiSliceDivisionType );
if (rcLayer.m_uiSliceDivisionType == 0)
{
pcScalableSEI->setGridSliceWidthInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceWidthInMbsMinus1[0] );
pcScalableSEI->setGridSliceHeightInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceHeightInMbsMinus1[0] );
}
else if (rcLayer.m_uiSliceDivisionType == 1)
{
pcScalableSEI->setNumSliceMinus1( uiNumScalableLayer, rcLayer.m_uiNumSliceMinus1 );
for ( j = 0; j <= rcLayer.m_uiNumSliceMinus1; j++ )
{
pcScalableSEI->setFirstMbInSlice( uiNumScalableLayer, j, rcLayer.m_puiFirstMbInSlice[j] );
pcScalableSEI->setSliceWidthInMbsMinus1( uiNumScalableLayer, j, rcLayer.m_puiGridSliceWidthInMbsMinus1[j] );
pcScalableSEI->setSliceHeightInMbsMinus1( uiNumScalableLayer, j, rcLayer.m_puiGridSliceHeightInMbsMinus1[j] );
}
}
else if (rcLayer.m_uiSliceDivisionType == 2)
{
pcScalableSEI->setNumSliceMinus1( uiNumScalableLayer, rcLayer.m_uiNumSliceMinus1 );
UInt uiFrameHeightInMb = pcScalableSEI->getFrmHeightInMbsMinus1( uiNumScalableLayer ) + 1;
UInt uiFrameWidthInMb = pcScalableSEI->getFrmWidthInMbsMinus1(uiNumScalableLayer ) + 1;
UInt uiPicSizeInMbs = uiFrameHeightInMb * uiFrameWidthInMb;
for ( j = 0; j < uiPicSizeInMbs; j++)
{
pcScalableSEI->setSliceId( uiNumScalableLayer, j, rcLayer.m_puiSliceId[j] );
}
}
// JVT-S054 (REPLACE) <-
}
//JVT-S036 lsj end
if(pcScalableSEI->getLayerDependencyInfoPresentFlag(uiNumScalableLayer))
{
// BUG_FIX liuhui{
{
UInt uiDelta;
UInt uiQL = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getQualityLevelCGSSNR() : uiCurrFGSLevel);
UInt uiL = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getLayerCGSSNR() : uiCurrLayer);
if( uiQL ) // FGS layer, Q != 0
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel, uiQL-1 );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta );//JVT-S036 lsj
pcScalableSEI->setNumDirectlyDependentLayers(uiNumScalableLayer, 1 );
if( uiCurrTempLevel- uiMinTempLevel ) // T != 0
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel-1, uiQL );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 1, uiDelta );//JVT-S036 lsj
pcScalableSEI->setNumDirectlyDependentLayers(uiNumScalableLayer, 2 );
}
}
else if( ( uiCurrTempLevel- uiMinTempLevel ) ) // Q = 0, T != 0
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel-1, uiQL );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta ); //JVT-S036 lsj
pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 1 );
if( uiL ) // D != 0, T != 0, Q = 0
{
UInt uiBaseLayerCGSSNRId = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseLayerCGSSNR() : rcLayer.getBaseLayerId());
UInt uiBaseLayerId = rcLayer.getBaseLayerId();
LayerParameters& rcBaseLayer = m_pcCodingParameter->getLayerParameters ( uiBaseLayerId );
UInt uiBaseFGSLayers = (UInt) rcBaseLayer.getNumFGSLayers();
UInt uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseQualityLevelCGSSNR() : rcLayer.getBaseQualityLevel());
uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? uiBaseQualityLevel : min( uiBaseQualityLevel, uiBaseFGSLayers ));
//bugfix delete
{
if( MSYS_UINT_MAX != getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel ) )
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 1, uiDelta ); //JVT-S036 lsj
pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 2 );
}
}
}
}
else if ( uiL ) // D != 0,T = 0, Q = 0
{
UInt uiBaseLayerCGSSNRId = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseLayerCGSSNR() : rcLayer.getBaseLayerId());
UInt uiBaseLayerId = rcLayer.getBaseLayerId();
LayerParameters& rcBaseLayer = m_pcCodingParameter->getLayerParameters ( uiBaseLayerId );
UInt uiBaseFGSLayers = (UInt)( rcBaseLayer.getNumFGSLayers() );
UInt uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseQualityLevelCGSSNR() : rcLayer.getBaseQualityLevel());
uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? uiBaseQualityLevel : min( uiBaseQualityLevel, uiBaseFGSLayers ));
//bugfix delete
uiDelta = uiNumScalableLayer - getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta ); //JVT-S036 lsj
pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 1 );
}
else // base layer, no dependency layers
{
pcScalableSEI->setNumDirectlyDependentLayers( uiNumScalableLayer, 0 );
}
}
// BUG_FIX liuhui}
}
else
{//JVT-S036 lsj
UInt uiLayerDependencyInfoSrcLayerIdDelta = 0; //may be changed
pcScalableSEI->setLayerDependencyInfoSrcLayerIdDelta( uiNumScalableLayer, uiLayerDependencyInfoSrcLayerIdDelta);
}
if(pcScalableSEI->getInitParameterSetsInfoPresentFlag(uiNumScalableLayer))
{
UInt uiNumInitSPSMinus1 = 0; //should be changed
UInt uiNumInitPPSMinus1 = 0; //should be changed
pcScalableSEI->setNumInitSeqParameterSetMinus1(uiNumScalableLayer, uiNumInitSPSMinus1);
pcScalableSEI->setNumInitPicParameterSetMinus1(uiNumScalableLayer, uiNumInitPPSMinus1);
for( j = 0; j <= pcScalableSEI->getNumInitSPSMinus1(uiNumScalableLayer); j++)
{
UInt uiDelta = 0; //should be changed
pcScalableSEI->setInitSeqParameterSetIdDelta( uiNumScalableLayer, j, uiDelta );
}
for( j = 0; j <= pcScalableSEI->getNumInitPPSMinus1(uiNumScalableLayer); j++)
{
UInt uiDelta = 0; //should be changed
pcScalableSEI->setInitPicParameterSetIdDelta( uiNumScalableLayer, j, uiDelta );
}
}
else
{//JVT-S036 lsj
UInt bInitParameterSetsInfoSrcLayerIdDelta = 0; //may be changed
pcScalableSEI->setInitParameterSetsInfoSrcLayerIdDelta( uiNumScalableLayer, bInitParameterSetsInfoSrcLayerIdDelta );
}
uiNumScalableLayer++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -