📄 h264avcencoder.cpp
字号:
Int32 uilayerProfileLevelIdc = 0;
uilayerProfileLevelIdc += uilayerProfileIdc;
uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
uilayerProfileLevelIdc += bLayerConstraintSet0Flag;
uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
uilayerProfileLevelIdc += bLayerConstraintSet1Flag;
uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
uilayerProfileLevelIdc += bLayerConstraintSet2Flag;
uilayerProfileLevelIdc = uilayerProfileLevelIdc << 1;
uilayerProfileLevelIdc += bLayerConstraintSet3Flag;
uilayerProfileLevelIdc = uilayerProfileLevelIdc << 4;
uilayerProfileLevelIdc = uilayerProfileLevelIdc << 8;
uilayerProfileLevelIdc += uiLayerLevelIdc;
//JVT-W051 }
pcScalableSEI->setLayerProfileIdc(uiNumScalableLayer, uilayerProfileIdc);
//SEI changes update {
//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);
//}
//SEI changes update }
if(pcScalableSEI->getBitrateInfoPresentFlag(uiNumScalableLayer))
{
Double dAvgBitrate = m_aaadLayerBitrateRep[uiDependencyID][uiCurrTempLevel][uiQualityLevel];
Double dMaxBitrateLayer = 0.0; //should be changed
Double dMaxBitrateDecodedPicture = 0.0; //should be changed
UInt uiMaxBitrateCalcWindow = 0; //should be changed
pcScalableSEI->setAvgBitrateBPS(uiNumScalableLayer, dAvgBitrate);
pcScalableSEI->setMaxBitrateLayerBPS(uiNumScalableLayer, dMaxBitrateLayer);
pcScalableSEI->setMaxBitrateDecodedPictureBPS(uiNumScalableLayer, dMaxBitrateDecodedPicture);
pcScalableSEI->setMaxBitrateCalcWindow(uiNumScalableLayer, uiMaxBitrateCalcWindow);
}
if(pcScalableSEI->getFrmRateInfoPresentFlag(uiNumScalableLayer))
{
UInt uiConstantFrmRateIdc = 0;
ROT( m_aaadFinalFramerate[uiDependencyID][uiCurrTempLevel][uiQualityLevel] == 0.0 );
UInt uiAvgFrmRate = (UInt)floor( 256.0 * m_aaadFinalFramerate[uiDependencyID][uiCurrTempLevel][uiQualityLevel] + 0.5 );
pcScalableSEI->setConstantFrmRateIdc(uiNumScalableLayer, uiConstantFrmRateIdc);
pcScalableSEI->setAvgFrmRate(uiNumScalableLayer, uiAvgFrmRate);
}
//SEI changes update {
//else
//{//JVT-S036 lsj
// UInt bFrmRateInfoSrcLayerIdDelta = 0; //may be changed
// pcScalableSEI->setFrmRateInfoSrcLayerIdDelta(uiNumScalableLayer, bFrmRateInfoSrcLayerIdDelta);
//}
//if(pcScalableSEI->getFrmSizeInfoPresentFlag(uiNumScalableLayer))
if(pcScalableSEI->getFrmSizeInfoPresentFlag(uiNumScalableLayer)||pcScalableSEI->getIroiSliceDivisionInfoPresentFlag(uiNumScalableLayer))
//SEI changes update }
{
UInt uiFrmWidthInMbsMinus1 = rcLayer.getFrameWidth()/16 - 1;
UInt uiFrmHeightInMbsMinus1 = rcLayer.getFrameHeight()/16 - 1;
pcScalableSEI->setFrmWidthInMbsMinus1(uiNumScalableLayer, uiFrmWidthInMbsMinus1);
pcScalableSEI->setFrmHeightInMbsMinus1(uiNumScalableLayer, uiFrmHeightInMbsMinus1);
}
//SEI changes update
//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);
}
}
//SEI changes update
//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 ) )
{
//SEI changes update {
//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] );
}
}
}*/
pcScalableSEI->setIroiGridFlag( uiNumScalableLayer, rcLayer.m_bGridFlag );
if (rcLayer.m_bGridFlag)
{
pcScalableSEI->setGridSliceWidthInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceWidthInMbsMinus1[0] );
pcScalableSEI->setGridSliceHeightInMbsMinus1( uiNumScalableLayer, rcLayer.m_puiGridSliceHeightInMbsMinus1[0] );
}
else
{
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] );
}
}
}
//JVT-S036 lsj end
//SEI changes update }
if(pcScalableSEI->getLayerDependencyInfoPresentFlag(uiNumScalableLayer))
{
// BUG_FIX liuhui{
{
UInt uiDelta;
UInt uiQL = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getQualityLevelCGSSNR() + uiCurrFGSLevel : uiCurrFGSLevel);
UInt uiL = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getLayerCGSSNR() : uiCurrLayer);
if( uiQL ) // FGS layer, Q != 0
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel, uiQL-1 );
assert ( uiDelta > 0 );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta-1 ); //JVT-S036 lsj
pcScalableSEI->setNumDirectlyDependentLayers(uiNumScalableLayer, 1 );
if( uiCurrTempLevel- uiMinTempLevel ) // T != 0
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel-1, uiQL );
assert ( uiDelta > 0 );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 1, uiDelta-1 ); //JVT-S036 lsj
pcScalableSEI->setNumDirectlyDependentLayers(uiNumScalableLayer, 2 );
}
}
else if( ( uiCurrTempLevel- uiMinTempLevel ) ) // Q = 0, T != 0
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiL, uiCurrTempLevel-1, uiQL );
assert ( uiDelta > 0 );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta-1 ); //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 uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseQualityLevelCGSSNR() : rcLayer.getBaseQualityLevel());
uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? uiBaseQualityLevel : 0 );
//bugfix delete
{
if( MSYS_UINT_MAX != getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel ) )
{
uiDelta = uiNumScalableLayer - getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel );
assert ( uiDelta > 0 );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 1, uiDelta-1 ); //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 uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? rcLayer.getBaseQualityLevelCGSSNR() : rcLayer.getBaseQualityLevel());
uiBaseQualityLevel = (m_pcCodingParameter->getCGSSNRRefinement() == 1 ? uiBaseQualityLevel : 0 );
//bugfix delete
uiDelta = uiNumScalableLayer - getScalableLayerId( uiBaseLayerCGSSNRId, uiCurrTempLevel, uiBaseQualityLevel );
assert ( uiDelta > 0 );
pcScalableSEI->setDirectlyDependentLayerIdDeltaMinus1( uiNumScalableLayer, 0, uiDelta-1 ); //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))//SEI changes update
if(pcScalableSEI->getParameterSetsInfoPresentFlag(uiNumScalableLayer))//SEI changes update
{
UInt uiNumInitSPSMinus1 = 0; //should be changed
UInt uiNumInitSSPSMinus1 = 0; //should be changed SEI changes update
UInt uiNumInitPPSMinus1 = 0; //should be changed
pcScalableSEI->setNumInitSeqParameterSetMinus1(uiNumScalableLayer, uiNumInitSPSMinus1);
pcScalableSEI->setNumInitSubsetSeqParameterSetMinus1(uiNumScalableLayer, uiNumInitSSPSMinus1);//SEI changes update
pcScalableSEI->setNumInitPicParameterSetMinus1(uiNumScalableLayer, uiNumInitPPSMinus1);
for( j = 0; j <= pcScalableSEI->getNumInitSPSMinus1(uiNumScalableLayer); j++)
{
UInt uiDelta = 0; //should be changed
pcScalableSEI->setInitSeqParameterSetIdDelta( uiNumScalableLayer, j, uiDelta );
}
//SEI changes update {
for( j = 0; j <= pcScalableSEI->getNumInitSSPSMinus1(uiNumScalableLayer); j++)
{
UInt uiDelta = 0; //should be changed
pcScalableSEI->setInitSubsetSeqParameterSetIdDelta( uiNumScalableLayer, j, uiDelta );
}
//SEI changes update }
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 );
}
//JVT-W051 {
//if ( pcScalableSEI->getBitstreamRestrictionFlag ( uiNumScalableLayer ) )//SEI changes update
if ( pcScalableSEI->getBitstreamRestrictionInfoPresentFlag ( uiNumScalableLayer ) )//SEI changes update
{
UInt uiMaxDecFrameBuffering = m_pcCodingParameter->getDPBSize();//should be changed
UInt uiNumReorderFrames = pcScalableSEI->getMaxDecFrameBuffering( uiNumScalableLayer );//should be changed
pcScalableSEI->setMaxDecFrameBuffering( uiNumScalableLayer, uiMaxDecFrameBuffering );
pcScalableSEI->setNumReorderFrames( uiNumScalableLayer, uiNumReorderFrames );
// JVT-W064 { value of the following restriction parameters are set to the maximum in this example.
pcScalableSEI->setMotionVectorsOverPicBoundariesFlag( uiNumScalableLayer, true );
pcScalableSEI->setMaxBytesPerPicDenom( uiNumScalableLayer, 0 );
pcScalableSEI->setLog2MaxMvLengthHorizontal( uiNumScalableLayer, 16 );
pcScalableSEI->setLog2MaxMvLengthVertical( uiNumScalableLayer, 16 );
// JVT-W064 }
}
//JVT-W051 }
uiNumScalableLayer++;
}
}
}
}
//JVT-W051 {
//SEI changes update {
//pcScalableSEI->setQualityLayerInfoPresentFlag(true);
//if ( pcScalableSEI->getQualityLayerInfoPresentFlag() )
//{
// UInt uiQlNumdIdMinus1 = m_pcCodingParameter->getNumberOfLayers ()-1;
// pcScalableSEI->setQlNumdIdMinus1( uiQlNumdIdMinus1 );
// for ( i=0; i <= pcScalableSEI->getQlNumdIdMinus1(); i++ )
// {
// UInt uiQlDependencyId = i;//could be changed
// pcScalableSEI->setQlDependencyId(i, uiQlDependencyId);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -