Newer
Older

Karsten Suehring
committed
uint32_t stopCtuY = (startTileY + m_rectSliceFixedHeight) >= pps.getNumTileRows() ? pps.getPicHeightInCtu() - 1 : pps.getTileRowBd( startTileY + m_rectSliceFixedHeight ) - 1;
uint32_t stopTileX = pps.ctuToTileCol( stopCtuX );
uint32_t stopTileY = pps.ctuToTileRow( stopCtuY );
// add rectangular slice to list
m_rectSlicePos.push_back( startCtuY * pps.getPicWidthInCtu() + startCtuX );
m_rectSlicePos.push_back( stopCtuY * pps.getPicWidthInCtu() + stopCtuX );
// get slice size in tiles
uint32_t sliceWidth = stopTileX - startTileX + 1;
uint32_t sliceHeight = stopTileY - startTileY + 1;
// move to next tile in raster scan order
tileIdx += sliceWidth;
if( tileIdx % pps.getNumTileColumns() == 0 )
{
tileIdx += (sliceHeight - 1) * pps.getNumTileColumns();
}

Karsten Suehring
committed
xConfirmPara( m_rectSlicePos.size() & 1, "Odd number of rectangular slice positions provided. Rectangular slice positions must be specified in pairs of (top-left / bottom-right) raster-scan CTU addresses.");

Karsten Suehring
committed
// set default slice size if not provided
if( m_rectSlicePos.size() == 0 )

Karsten Suehring
committed
m_rectSlicePos.push_back( 0 );
m_rectSlicePos.push_back( pps.getPicWidthInCtu() * pps.getPicHeightInCtu() - 1 );

Karsten Suehring
committed
pps.setNumSlicesInPic( (uint32_t)(m_rectSlicePos.size() >> 1) );
xConfirmPara(pps.getNumSlicesInPic() > getMaxSlicesByLevel( m_level ), "Number of rectangular slices exceeds maximum number allowed according to specified level");
pps.initRectSlices();

Karsten Suehring
committed
// set slice parameters from CTU addresses
for( sliceIdx = 0; sliceIdx < pps.getNumSlicesInPic(); sliceIdx++ )

Karsten Suehring
committed
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
xConfirmPara( m_rectSlicePos[2*sliceIdx] >= pps.getPicWidthInCtu() * pps.getPicHeightInCtu(), "Rectangular slice position exceeds total number of CTU in picture.");
xConfirmPara( m_rectSlicePos[2*sliceIdx + 1] >= pps.getPicWidthInCtu() * pps.getPicHeightInCtu(), "Rectangular slice position exceeds total number of CTU in picture.");
// map raster scan CTU address to X/Y position
uint32_t startCtuX = m_rectSlicePos[2*sliceIdx] % pps.getPicWidthInCtu();
uint32_t startCtuY = m_rectSlicePos[2*sliceIdx] / pps.getPicWidthInCtu();
uint32_t stopCtuX = m_rectSlicePos[2*sliceIdx + 1] % pps.getPicWidthInCtu();
uint32_t stopCtuY = m_rectSlicePos[2*sliceIdx + 1] / pps.getPicWidthInCtu();
// get corresponding tile index
uint32_t startTileX = pps.ctuToTileCol( startCtuX );
uint32_t startTileY = pps.ctuToTileRow( startCtuY );
uint32_t stopTileX = pps.ctuToTileCol( stopCtuX );
uint32_t stopTileY = pps.ctuToTileRow( stopCtuY );
uint32_t tileIdx = startTileY * pps.getNumTileColumns() + startTileX;
// get slice size in tiles
uint32_t sliceWidth = stopTileX - startTileX + 1;
uint32_t sliceHeight = stopTileY - startTileY + 1;
// check for slice / tile alignment
xConfirmPara( startCtuX != pps.getTileColumnBd( startTileX ), "Rectangular slice position does not align with a left tile edge.");
xConfirmPara( stopCtuX != (pps.getTileColumnBd( stopTileX + 1 ) - 1), "Rectangular slice position does not align with a right tile edge.");
if( sliceWidth > 1 || sliceHeight > 1 )

Karsten Suehring
committed
xConfirmPara( startCtuY != pps.getTileRowBd( startTileY ), "Rectangular slice position does not align with a top tile edge.");
xConfirmPara( stopCtuY != (pps.getTileRowBd( stopTileY + 1 ) - 1), "Rectangular slice position does not align with a bottom tile edge.");

Karsten Suehring
committed
// set slice size and tile index
pps.setSliceWidthInTiles( sliceIdx, sliceWidth );
pps.setSliceHeightInTiles( sliceIdx, sliceHeight );
pps.setSliceTileIdx( sliceIdx, tileIdx );
if( sliceIdx > 0 && !needTileIdxDelta )

Karsten Suehring
committed
uint32_t lastTileIdx = pps.getSliceTileIdx( sliceIdx-1 );
lastTileIdx += pps.getSliceWidthInTiles( sliceIdx-1 );
if( lastTileIdx % pps.getNumTileColumns() == 0)
{
lastTileIdx += (pps.getSliceHeightInTiles( sliceIdx-1 ) - 1) * pps.getNumTileColumns();
}
if( lastTileIdx != tileIdx )
{
needTileIdxDelta = true;
}

Karsten Suehring
committed
// special case for multiple slices within a single tile
if( sliceWidth == 1 && sliceHeight == 1 )

Karsten Suehring
committed
uint32_t firstSliceIdx = sliceIdx;
uint32_t numSlicesInTile = 1;
pps.setSliceHeightInCtu( sliceIdx, stopCtuY - startCtuY + 1 );
while( sliceIdx < pps.getNumSlicesInPic()-1 )

Karsten Suehring
committed
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
uint32_t nextTileIdx;
startCtuX = m_rectSlicePos[2*(sliceIdx+1)] % pps.getPicWidthInCtu();
startCtuY = m_rectSlicePos[2*(sliceIdx+1)] / pps.getPicWidthInCtu();
stopCtuX = m_rectSlicePos[2*(sliceIdx+1) + 1] % pps.getPicWidthInCtu();
stopCtuY = m_rectSlicePos[2*(sliceIdx+1) + 1] / pps.getPicWidthInCtu();
startTileX = pps.ctuToTileCol( startCtuX );
startTileY = pps.ctuToTileRow( startCtuY );
stopTileX = pps.ctuToTileCol( stopCtuX );
stopTileY = pps.ctuToTileRow( stopCtuY );
nextTileIdx = startTileY * pps.getNumTileColumns() + startTileX;
sliceWidth = stopTileX - startTileX + 1;
sliceHeight = stopTileY - startTileY + 1;
if(nextTileIdx != tileIdx || sliceWidth != 1 || sliceHeight != 1)
{
break;
}
numSlicesInTile++;
sliceIdx++;
pps.setSliceWidthInTiles( sliceIdx, 1 );
pps.setSliceHeightInTiles( sliceIdx, 1 );
pps.setSliceTileIdx( sliceIdx, tileIdx );
pps.setSliceHeightInCtu( sliceIdx, stopCtuY - startCtuY + 1 );

Karsten Suehring
committed
pps.setNumSlicesInTile( firstSliceIdx, numSlicesInTile );

Karsten Suehring
committed
pps.setTileIdxDeltaPresentFlag( needTileIdxDelta );
m_tileIdxDeltaPresentFlag = needTileIdxDelta;
// check rectangular slice mapping and full picture CTU coverage
pps.initRectSliceMap(nullptr);
// store rectangular slice parameters from temporary PPS structure
m_numSlicesInPic = pps.getNumSlicesInPic();
m_rectSlices.resize( pps.getNumSlicesInPic() );
for( sliceIdx = 0; sliceIdx < pps.getNumSlicesInPic(); sliceIdx++ )
{
m_rectSlices[sliceIdx].setSliceWidthInTiles( pps.getSliceWidthInTiles(sliceIdx) );
m_rectSlices[sliceIdx].setSliceHeightInTiles( pps.getSliceHeightInTiles(sliceIdx) );
m_rectSlices[sliceIdx].setNumSlicesInTile( pps.getNumSlicesInTile(sliceIdx) );
m_rectSlices[sliceIdx].setSliceHeightInCtu( pps.getSliceHeightInCtu(sliceIdx) );
m_rectSlices[sliceIdx].setTileIdx( pps.getSliceTileIdx(sliceIdx) );
}
}
}
// raster-scan slices
else
{
uint32_t listIdx = 0;
uint32_t remTiles = pps.getNumTiles();
// set default slice size if not provided
if( m_rasterSliceSize.size() == 0 )
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
{
m_rasterSliceSize.push_back( remTiles );
}
// set raster slice sizes
while( remTiles > 0 )
{
// truncate if size exceeds number of remaining tiles
if( listIdx < m_rasterSliceSize.size() )
{
m_rasterSliceSize[listIdx] = std::min( remTiles, m_rasterSliceSize[listIdx] );
remTiles -= m_rasterSliceSize[listIdx];
}
// replicate last size uniformly as needed to cover the remainder of the picture
else
{
m_rasterSliceSize.push_back( std::min( remTiles, m_rasterSliceSize.back() ) );
remTiles -= m_rasterSliceSize.back();
}
listIdx++;
}
// shrink list if too many sizes were provided
m_rasterSliceSize.resize( listIdx );
m_numSlicesInPic = (uint32_t)m_rasterSliceSize.size();
xConfirmPara(m_rasterSliceSize.size() > getMaxSlicesByLevel( m_level ), "Number of raster-scan slices exceeds maximum number allowed according to specified level");
}
}
{
m_numTileCols = 1;
m_numTileRows = 1;
m_numSlicesInPic = 1;
}

Karsten Suehring
committed
if ((m_MCTSEncConstraint) && (!m_disableLFCrossTileBoundaryFlag))
{
printf("Warning: Constrained Encoding for Motion Constrained Tile Sets (MCTS) is enabled. Disabling filtering across tile boundaries!\n");
}
if ((m_MCTSEncConstraint) && (m_TMVPModeId))
{
printf("Warning: Constrained Encoding for Motion Constrained Tile Sets (MCTS) is enabled. Disabling TMVP!\n");
m_TMVPModeId = 0;
}
if ((m_MCTSEncConstraint) && ( m_alf ))
{
printf("Warning: Constrained Encoding for Motion Constrained Tile Sets (MCTS) is enabled. Disabling ALF!\n");
m_alf = false;
}
if( ( m_MCTSEncConstraint ) && ( m_BIO ) )
{
printf( "Warning: Constrained Encoding for Motion Constrained Tile Sets (MCTS) is enabled. Disabling BIO!\n" );
m_BIO = false;
}

Karsten Suehring
committed
xConfirmPara( m_sariAspectRatioIdc < 0 || m_sariAspectRatioIdc > 255, "SEISARISampleAspectRatioIdc must be in the range of 0 to 255");

Karsten Suehring
committed
if ( m_RCEnableRateControl )
{
if ( m_RCForceIntraQP )
{
if ( m_RCInitialQP == 0 )
{
msg( WARNING, "\nInitial QP for rate control is not specified. Reset not to use force intra QP!" );
m_RCForceIntraQP = false;
}
}
xConfirmPara( m_uiDeltaQpRD > 0, "Rate control cannot be used together with slice level multiple-QP optimization!\n" );
#if U0132_TARGET_BITS_SATURATION
if ((m_RCCpbSaturationEnabled) && (m_level!=Level::NONE) && (m_profile!=Profile::NONE))
{
Adrian Browne
committed
uint32_t uiLevelIdx = (m_level / 16) * 4 + (uint32_t)((m_level % 16) / 3);

Karsten Suehring
committed
xConfirmPara(m_RCCpbSize > g_uiMaxCpbSize[m_levelTier][uiLevelIdx], "RCCpbSize should be smaller than or equal to Max CPB size according to tier and level");
xConfirmPara(m_RCInitialCpbFullness > 1, "RCInitialCpbFullness should be smaller than or equal to 1");
}
#endif
}
#if U0132_TARGET_BITS_SATURATION
else
{
xConfirmPara( m_RCCpbSaturationEnabled != 0, "Target bits saturation cannot be processed without Rate control" );
}
#endif
if (m_framePackingSEIEnabled)
{
xConfirmPara(m_framePackingSEIType < 3 || m_framePackingSEIType > 5 , "SEIFramePackingType must be in rage 3 to 5");
}
if (m_doSEIEnabled)
{
xConfirmPara(m_doSEITransformType < 0 || m_doSEITransformType > 7, "SEIDisplayOrientationTransformType must be in rage 0 to 7");
}
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
if( m_erpSEIEnabled && !m_erpSEICancelFlag )
{
xConfirmPara( m_erpSEIGuardBandType < 0 || m_erpSEIGuardBandType > 8, "SEIEquirectangularprojectionGuardBandType must be in the range of 0 to 7");
xConfirmPara( (m_chromaFormatIDC == CHROMA_420 || m_chromaFormatIDC == CHROMA_422) && (m_erpSEILeftGuardBandWidth%2 == 1), "SEIEquirectangularprojectionLeftGuardBandWidth must be an even number for 4:2:0 or 4:2:2 chroma format");
xConfirmPara( (m_chromaFormatIDC == CHROMA_420 || m_chromaFormatIDC == CHROMA_422) && (m_erpSEIRightGuardBandWidth%2 == 1), "SEIEquirectangularprojectionRightGuardBandWidth must be an even number for 4:2:0 or 4:2:2 chroma format");
}
if( m_sphereRotationSEIEnabled && !m_sphereRotationSEICancelFlag )
{
xConfirmPara( m_sphereRotationSEIYaw < -(180<<16) || m_sphereRotationSEIYaw > (180<<16)-1, "SEISphereRotationYaw must be in the range of -11 796 480 to 11 796 479");
xConfirmPara( m_sphereRotationSEIPitch < -(90<<16) || m_sphereRotationSEIYaw > (90<<16), "SEISphereRotationPitch must be in the range of -5 898 240 to 5 898 240");
xConfirmPara( m_sphereRotationSEIRoll < -(180<<16) || m_sphereRotationSEIYaw > (180<<16)-1, "SEISphereRotationRoll must be in the range of -11 796 480 to 11 796 479");
}
if ( m_omniViewportSEIEnabled && !m_omniViewportSEICancelFlag )
{
xConfirmPara( m_omniViewportSEIId < 0 || m_omniViewportSEIId > 1023, "SEIomniViewportId must be in the range of 0 to 1023");
xConfirmPara( m_omniViewportSEICntMinus1 < 0 || m_omniViewportSEICntMinus1 > 15, "SEIomniViewportCntMinus1 must be in the range of 0 to 15");
for ( uint32_t i=0; i<=m_omniViewportSEICntMinus1; i++ )
{
xConfirmPara( m_omniViewportSEIAzimuthCentre[i] < -(180<<16) || m_omniViewportSEIAzimuthCentre[i] > (180<<16)-1, "SEIOmniViewportAzimuthCentre must be in the range of -11 796 480 to 11 796 479");
xConfirmPara( m_omniViewportSEIElevationCentre[i] < -(90<<16) || m_omniViewportSEIElevationCentre[i] > (90<<16), "SEIOmniViewportSEIElevationCentre must be in the range of -5 898 240 to 5 898 240");
xConfirmPara( m_omniViewportSEITiltCentre[i] < -(180<<16) || m_omniViewportSEITiltCentre[i] > (180<<16)-1, "SEIOmniViewportTiltCentre must be in the range of -11 796 480 to 11 796 479");
xConfirmPara( m_omniViewportSEIHorRange[i] < 1 || m_omniViewportSEIHorRange[i] > (360<<16), "SEIOmniViewportHorRange must be in the range of 1 to 360*2^16");
xConfirmPara( m_omniViewportSEIVerRange[i] < 1 || m_omniViewportSEIVerRange[i] > (180<<16), "SEIOmniViewportVerRange must be in the range of 1 to 180*2^16");
}
}
if (m_gcmpSEIEnabled && !m_gcmpSEICancelFlag)
{
xConfirmPara( m_gcmpSEIMappingFunctionType < 0 || m_gcmpSEIMappingFunctionType > 2, "SEIGcmpMappingFunctionType must be in the range of 0 to 2");
int numFace = m_gcmpSEIPackingType == 4 || m_gcmpSEIPackingType == 5 ? 5 : 6;
for ( int i = 0; i < numFace; i++ )
{
xConfirmPara( m_gcmpSEIFaceIndex[i] < 0 || m_gcmpSEIFaceIndex[i] > 5, "SEIGcmpFaceIndex must be in the range of 0 to 5");
xConfirmPara( m_gcmpSEIFaceRotation[i] < 0 || m_gcmpSEIFaceRotation[i] > 3, "SEIGcmpFaceRotation must be in the range of 0 to 3");
if (m_gcmpSEIMappingFunctionType == 2)
{
xConfirmPara( m_gcmpSEIFunctionCoeffU[i] <= 0.0 || m_gcmpSEIFunctionCoeffU[i] > 1.0, "SEIGcmpFunctionCoeffU must be in the range (0, 1]");
xConfirmPara( m_gcmpSEIFunctionCoeffV[i] <= 0.0 || m_gcmpSEIFunctionCoeffV[i] > 1.0, "SEIGcmpFunctionCoeffV must be in the range (0, 1]");
}
if (i != 2 && (m_gcmpSEIPackingType == 4 || m_gcmpSEIPackingType == 5))
{
if (m_gcmpSEIFaceIndex[2] == 0 || m_gcmpSEIFaceIndex[2] == 1)
{
xConfirmPara( m_gcmpSEIFaceIndex[i] == 0 || m_gcmpSEIFaceIndex[i] == 1, "SEIGcmpFaceIndex[i] must be in the range of 2 to 5 for i equal to 0, 1, 3, or 4 when SEIGcmpFaceIndex[2] is equal to 0 or 1");
if (m_gcmpSEIPackingType == 4)
{
xConfirmPara( m_gcmpSEIFaceRotation[i] != 0 && m_gcmpSEIFaceRotation[i] != 2, "SEIGcmpFaceRotation[i] must be 0 or 2 for i equal to 0, 1, 3, or 4 when SEIGcmpFaceIndex[2] is equal to 0 or 1");
}
else
{
xConfirmPara( m_gcmpSEIFaceRotation[i] != 1 && m_gcmpSEIFaceRotation[i] != 3, "SEIGcmpFaceRotation[i] must be 1 or 3 for i equal to 0, 1, 3, or 4 when SEIGcmpFaceIndex[2] is equal to 0 or 1");
}
}
else if (m_gcmpSEIFaceIndex[2] == 2 || m_gcmpSEIFaceIndex[2] == 3)
{
xConfirmPara( m_gcmpSEIFaceIndex[i] == 2 || m_gcmpSEIFaceIndex[i] == 3, "SEIGcmpFaceIndex[i] must be 0, 1, 4 or 5 for i equal to 0, 1, 3, or 4 when SEIGcmpFaceIndex[2] is equal to 2 or 3");
if (m_gcmpSEIPackingType == 4)
{
if (m_gcmpSEIFaceIndex[i] == 1)
xConfirmPara( m_gcmpSEIFaceRotation[i] != 0 && m_gcmpSEIFaceRotation[i] != 2, "SEIGcmpFaceRotation[i] must be 0 or 2 when SEIGcmpFaceIndex[2] is equal to 2 or 3 and SEIGcmpFaceIndex[i] is equal to 1");
xConfirmPara( m_gcmpSEIFaceRotation[i] != 1 && m_gcmpSEIFaceRotation[i] != 3, "SEIGcmpFaceRotation[i] must be 1 or 3 when SEIGcmpFaceIndex[2] is equal to 2 or 3 and SEIGcmpFaceIndex[i] is equal to 0, 4 or 5");
}
else
{
if (m_gcmpSEIFaceIndex[i] == 1)
xConfirmPara( m_gcmpSEIFaceRotation[i] != 1 && m_gcmpSEIFaceRotation[i] != 3, "SEIGcmpFaceRotation[i] must be 1 or 3 when SEIGcmpFaceIndex[2] is equal to 2 or 3 and SEIGcmpFaceIndex[i] is equal to 1");
xConfirmPara( m_gcmpSEIFaceRotation[i] != 0 && m_gcmpSEIFaceRotation[i] != 2, "SEIGcmpFaceRotation[i] must be 0 or 2 when SEIGcmpFaceIndex[2] is equal to 2 or 3 and SEIGcmpFaceIndex[i] is equal to 0, 4 or 5");
}
}
else if (m_gcmpSEIFaceIndex[2] == 4 || m_gcmpSEIFaceIndex[2] == 5)
{
xConfirmPara( m_gcmpSEIFaceIndex[i] == 4 || m_gcmpSEIFaceIndex[i] == 5, "SEIGcmpFaceIndex[i] must be in the range of 0 to 3 for i equal to 0, 1, 3, or 4 when SEIGcmpFaceIndex[2] is equal to 4 or 5");
if (m_gcmpSEIPackingType == 4)
{
if (m_gcmpSEIFaceIndex[i] == 0)
xConfirmPara( m_gcmpSEIFaceRotation[i] != 0 && m_gcmpSEIFaceRotation[i] != 2, "SEIGcmpFaceRotation[i] must be 0 or 2 when SEIGcmpFaceIndex[2] is equal to 4 or 5 and SEIGcmpFaceIndex[i] is equal to 0");
xConfirmPara( m_gcmpSEIFaceRotation[i] != 1 && m_gcmpSEIFaceRotation[i] != 3, "SEIGcmpFaceRotation[i] must be 1 or 3 when SEIGcmpFaceIndex[2] is equal to 4 or 5 and SEIGcmpFaceIndex[i] is equal to 1, 2 or 3");
}
else
{
if (m_gcmpSEIFaceIndex[i] == 0)
xConfirmPara( m_gcmpSEIFaceRotation[i] != 1 && m_gcmpSEIFaceRotation[i] != 3, "SEIGcmpFaceRotation[i] must be 1 or 3 when SEIGcmpFaceIndex[2] is equal to 4 or 5 and SEIGcmpFaceIndex[i] is equal to 0");
xConfirmPara( m_gcmpSEIFaceRotation[i] != 0 && m_gcmpSEIFaceRotation[i] != 2, "SEIGcmpFaceRotation[i] must be 0 or 2 when SEIGcmpFaceIndex[2] is equal to 4 or 5 and SEIGcmpFaceIndex[i] is equal to 1, 2 or 3");
}
if (m_gcmpSEIGuardBandFlag)
{
xConfirmPara( m_gcmpSEIGuardBandSamplesMinus1 < 0 || m_gcmpSEIGuardBandSamplesMinus1 > 15, "SEIGcmpGuardBandSamplesMinus1 must be in the range of 0 to 15");
}
}
xConfirmPara(m_log2ParallelMergeLevel < 2, "Log2ParallelMergeLevel should be larger than or equal to 2");
xConfirmPara(m_log2ParallelMergeLevel > m_uiCTUSize, "Log2ParallelMergeLevel should be less than or equal to CTU size");

Karsten Suehring
committed
#if U0033_ALTERNATIVE_TRANSFER_CHARACTERISTICS_SEI
xConfirmPara(m_preferredTransferCharacteristics > 255, "transfer_characteristics_idc should not be greater than 255.");
#endif
xConfirmPara( unsigned(m_ImvMode) > 1, "ImvMode exceeds range (0 to 1)" );
if (m_AffineAmvr)
{
xConfirmPara(!m_ImvMode, "AffineAmvr cannot be used when IMV is disabled.");
}

Karsten Suehring
committed
xConfirmPara( m_decodeBitstreams[0] == m_bitstreamFileName, "Debug bitstream and the output bitstream cannot be equal.\n" );
xConfirmPara( m_decodeBitstreams[1] == m_bitstreamFileName, "Decode2 bitstream and the output bitstream cannot be equal.\n" );
xConfirmPara(unsigned(m_LMChroma) > 1, "LMMode exceeds range (0 to 1)");
if (m_gopBasedTemporalFilterPastRefs != 0 || m_gopBasedTemporalFilterFutureRefs != 0)
Rickard Sjöberg
committed
{
xConfirmPara(m_temporalSubsampleRatio != 1, "GOP Based Temporal Filter only support Temporal sub-sample ratio 1");
}

Karsten Suehring
committed
#if EXTENSION_360_VIDEO
check_failed |= m_ext360.verifyParameters();
#endif
xConfirmPara(m_useColorTrans && (m_log2MaxTbSize == 6), "Log2MaxTbSize must be less than 6 when ACT is enabled, otherwise ACT needs to be disabled");
xConfirmPara(m_uiCTUSize <= 32 && (m_log2MaxTbSize == 6), "Log2MaxTbSize must be less than 6 when CTU size is 32");

Karsten Suehring
committed
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
#undef xConfirmPara
return check_failed;
}
const char *profileToString(const Profile::Name profile)
{
static const uint32_t numberOfProfiles = sizeof(strToProfile)/sizeof(*strToProfile);
for (uint32_t profileIndex = 0; profileIndex < numberOfProfiles; profileIndex++)
{
if (strToProfile[profileIndex].value == profile)
{
return strToProfile[profileIndex].str;
}
}
//if we get here, we didn't find this profile in the list - so there is an error
EXIT( "ERROR: Unknown profile \"" << profile << "\" in profileToString" );
return "";
}
void EncAppCfg::xPrintParameter()
{
//msg( DETAILS, "\n" );
msg( DETAILS, "Input File : %s\n", m_inputFileName.c_str() );
msg( DETAILS, "Bitstream File : %s\n", m_bitstreamFileName.c_str() );
msg( DETAILS, "Reconstruction File : %s\n", m_reconFileName.c_str() );
msg( DETAILS, "Real Format : %dx%d %gHz\n", m_sourceWidth - m_confWinLeft - m_confWinRight, m_sourceHeight - m_confWinTop - m_confWinBottom, (double)m_iFrameRate / m_temporalSubsampleRatio );
msg( DETAILS, "Internal Format : %dx%d %gHz\n", m_sourceWidth, m_sourceHeight, (double)m_iFrameRate / m_temporalSubsampleRatio );

Karsten Suehring
committed
msg( DETAILS, "Sequence PSNR output : %s\n", ( m_printMSEBasedSequencePSNR ? "Linear average, MSE-based" : "Linear average only" ) );
msg( DETAILS, "Hexadecimal PSNR output : %s\n", ( m_printHexPsnr ? "Enabled" : "Disabled" ) );

Karsten Suehring
committed
msg( DETAILS, "Sequence MSE output : %s\n", ( m_printSequenceMSE ? "Enabled" : "Disabled" ) );
msg( DETAILS, "Frame MSE output : %s\n", ( m_printFrameMSE ? "Enabled" : "Disabled" ) );
msg( DETAILS, "MS-SSIM output : %s\n", ( m_printMSSSIM ? "Enabled" : "Disabled") );

Karsten Suehring
committed
msg( DETAILS, "Cabac-zero-word-padding : %s\n", ( m_cabacZeroWordPaddingEnabled ? "Enabled" : "Disabled" ) );
if (m_isField)
{
msg( DETAILS, "Frame/Field : Field based coding\n" );
msg( DETAILS, "Field index : %u - %d (%d fields)\n", m_FrameSkip, m_FrameSkip + m_framesToBeEncoded - 1, m_framesToBeEncoded );
msg( DETAILS, "Field Order : %s field first\n", m_isTopFieldFirst ? "Top" : "Bottom" );
}
else
{
msg( DETAILS, "Frame/Field : Frame based coding\n" );
msg( DETAILS, "Frame index : %u - %d (%d frames)\n", m_FrameSkip, m_FrameSkip + m_framesToBeEncoded - 1, m_framesToBeEncoded );
}
{
msg( DETAILS, "Profile : %s\n", profileToString(m_profile) );
}
Adrian Browne
committed
msg( DETAILS,"AllRapPicturesFlag : %d\n", m_allRapPicturesFlag );
msg(DETAILS, "CTU size / min CU size : %d / %d \n", m_uiMaxCUWidth, 1 << m_log2MinCuSize);
msg(DETAILS, "subpicture info present flag : %s\n", m_subPicInfoPresentFlag ? "Enabled" : "Disabled");
Kui Fan
committed
if (m_subPicInfoPresentFlag)
LI JINGYA
committed
{
msg(DETAILS, "number of subpictures : %d\n", m_numSubPics);
msg(DETAILS, "subpicture size same flag : %d\n", m_subPicSameSizeFlag);
msg(DETAILS, "[0]th subpicture size : [%d %d]\n", m_subPicWidth[0], m_subPicHeight[0]);
for (int i = 0; i < m_numSubPics; i++)
{
if (!m_subPicSameSizeFlag)
{
msg(DETAILS, "[%d]th subpicture location : [%d %d]\n", i, m_subPicCtuTopLeftX[i],
m_subPicCtuTopLeftY[i]);
msg(DETAILS, "[%d]th subpicture size : [%d %d]\n", i, m_subPicWidth[i], m_subPicHeight[i]);
msg(DETAILS, "[%d]th subpicture treated as picture : %d\n", i,
m_subPicTreatedAsPicFlag[i] ? "Enabled" : "Disabled");
msg(DETAILS, "loop filter across [%d]th subpicture : %d\n", i,
m_loopFilterAcrossSubpicEnabledFlag[i] ? "Enabled" : "Disabled");
Kui Fan
committed
msg(DETAILS, "subpicture ID present flag : %s\n",
m_subPicIdMappingExplicitlySignalledFlag ? "Enabled" : "Disabled");
if (m_subPicIdMappingExplicitlySignalledFlag)
Kui Fan
committed
{
msg(DETAILS, "subpicture ID signalling present flag : %d\n", m_subPicIdMappingInSpsFlag);
for (int i = 0; i < m_numSubPics; i++)
LI JINGYA
committed
{
msg(DETAILS, "[%d]th subpictures ID length : %d\n", i, m_subPicIdLen);
msg(DETAILS, "[%d]th subpictures ID : %d\n", i, m_subPicId[i]);
msg( DETAILS, "Max TB size : %d \n", 1 << m_log2MaxTbSize );

Karsten Suehring
committed
msg( DETAILS, "Motion search range : %d\n", m_iSearchRange );
msg( DETAILS, "Intra period : %d\n", m_iIntraPeriod );
msg( DETAILS, "Decoding refresh type : %d\n", m_iDecodingRefreshType );
msg( DETAILS, "DRAP period : %d\n", m_drapPeriod );
msg( DETAILS, "EDRAP period : %d\n", m_edrapPeriod );

Karsten Suehring
committed
#if QP_SWITCHING_FOR_PARALLEL
if (m_qpIncrementAtSourceFrame.bPresent)
{
msg( DETAILS, "QP : %d (incrementing internal QP at source frame %d)\n", m_iQP, m_qpIncrementAtSourceFrame.value);
}
else
{
msg( DETAILS, "QP : %d\n", m_iQP);
}
#else
msg( DETAILS, "QP : %5.2f\n", m_fQP );
#endif
msg( DETAILS, "Max dQP signaling subdiv : %d\n", m_cuQpDeltaSubdiv);

Karsten Suehring
committed
msg( DETAILS, "Cb QP Offset (dual tree) : %d (%d)\n", m_cbQpOffset, m_cbQpOffsetDualTree);
msg( DETAILS, "Cr QP Offset (dual tree) : %d (%d)\n", m_crQpOffset, m_crQpOffsetDualTree);
msg( DETAILS, "QP adaptation : %d (range=%d)\n", m_bUseAdaptiveQP, (m_bUseAdaptiveQP ? m_iQPAdaptationRange : 0) );
msg( DETAILS, "GOP size : %d\n", m_iGOPSize );
msg( DETAILS, "Input bit depth : (Y:%d, C:%d)\n", m_inputBitDepth[CHANNEL_TYPE_LUMA], m_inputBitDepth[CHANNEL_TYPE_CHROMA] );
msg( DETAILS, "MSB-extended bit depth : (Y:%d, C:%d)\n", m_MSBExtendedBitDepth[CHANNEL_TYPE_LUMA], m_MSBExtendedBitDepth[CHANNEL_TYPE_CHROMA] );
msg( DETAILS, "Internal bit depth : (Y:%d, C:%d)\n", m_internalBitDepth[CHANNEL_TYPE_LUMA], m_internalBitDepth[CHANNEL_TYPE_CHROMA] );
msg( DETAILS, "Intra reference smoothing : %s\n", (m_enableIntraReferenceSmoothing ? "Enabled" : "Disabled") );
Philippe de Lagrange
committed
if (m_cuChromaQpOffsetList.size() > 0)
{
msg( DETAILS, "Chroma QP offset list : (" );
for (int i=0; i < m_cuChromaQpOffsetList.size(); i++)
{
msg( DETAILS, "%d %d %d%s", m_cuChromaQpOffsetList[i].u.comp.CbOffset, m_cuChromaQpOffsetList[i].u.comp.CrOffset, m_cuChromaQpOffsetList[i].u.comp.JointCbCrOffset,
(i+1 < m_cuChromaQpOffsetList.size() ? ", " : ")\n") );
}
msg( DETAILS, "cu_chroma_qp_offset_subdiv : %d\n", m_cuChromaQpOffsetSubdiv);
Philippe de Lagrange
committed
msg( DETAILS, "cu_chroma_qp_offset_enabled_flag : %s\n", (m_cuChromaQpOffsetEnabled ? "Enabled" : "Disabled") );
Philippe de Lagrange
committed
}
else
{
msg( DETAILS, "Chroma QP offset list : Disabled\n" );
}

Karsten Suehring
committed
msg( DETAILS, "extended_precision_processing_flag : %s\n", (m_extendedPrecisionProcessingFlag ? "Enabled" : "Disabled") );
Hong-Jheng Jhu
committed
msg( DETAILS, "TSRC_Rice_present_flag : %s\n", (m_tsrcRicePresentFlag ? "Enabled" : "Disabled") );
msg( DETAILS, "reverse_last_sig_coeff_enabled_flag : %s\n", (m_reverseLastSigCoeffEnabledFlag ? "Enabled" : "Disabled") );

Karsten Suehring
committed
msg( DETAILS, "transform_skip_rotation_enabled_flag : %s\n", (m_transformSkipRotationEnabledFlag ? "Enabled" : "Disabled") );
msg( DETAILS, "transform_skip_context_enabled_flag : %s\n", (m_transformSkipContextEnabledFlag ? "Enabled" : "Disabled") );
msg( DETAILS, "high_precision_offsets_enabled_flag : %s\n", (m_highPrecisionOffsetsEnabledFlag ? "Enabled" : "Disabled") );
msg( DETAILS, "rrc_rice_extension_flag : %s\n", (m_rrcRiceExtensionEnableFlag ? "Enabled" : "Disabled") );

Karsten Suehring
committed
msg( DETAILS, "persistent_rice_adaptation_enabled_flag: %s\n", (m_persistentRiceAdaptationEnabledFlag ? "Enabled" : "Disabled") );
msg( DETAILS, "cabac_bypass_alignment_enabled_flag : %s\n", (m_cabacBypassAlignmentEnabledFlag ? "Enabled" : "Disabled") );
switch (m_costMode)
{
case COST_STANDARD_LOSSY: msg( DETAILS, "Cost function: : Lossy coding (default)\n"); break;
case COST_SEQUENCE_LEVEL_LOSSLESS: msg( DETAILS, "Cost function: : Sequence_level_lossless coding\n"); break;
case COST_LOSSLESS_CODING: msg( DETAILS, "Cost function: : Lossless coding with fixed QP of %d\n", LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP); break;
case COST_MIXED_LOSSLESS_LOSSY_CODING: msg( DETAILS, "Cost function: : Mixed_lossless_lossy coding with QP'=%d for lossless evaluation\n", LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME); break;
default: msg( DETAILS, "Cost function: : Unknown\n"); break;
}
msg( DETAILS, "RateControl : %d\n", m_RCEnableRateControl );
msg( DETAILS, "WeightedPredMethod : %d\n", int(m_weightedPredictionMethod));

Karsten Suehring
committed
if(m_RCEnableRateControl)
{
msg( DETAILS, "TargetBitrate : %d\n", m_RCTargetBitrate );
msg( DETAILS, "KeepHierarchicalBit : %d\n", m_RCKeepHierarchicalBit );
msg( DETAILS, "LCULevelRC : %d\n", m_RCLCULevelRC );
msg( DETAILS, "UseLCUSeparateModel : %d\n", m_RCUseLCUSeparateModel );
msg( DETAILS, "InitialQP : %d\n", m_RCInitialQP );
msg( DETAILS, "ForceIntraQP : %d\n", m_RCForceIntraQP );
#if U0132_TARGET_BITS_SATURATION
msg( DETAILS, "CpbSaturation : %d\n", m_RCCpbSaturationEnabled );
if (m_RCCpbSaturationEnabled)
{
msg( DETAILS, "CpbSize : %d\n", m_RCCpbSize);
msg( DETAILS, "InitalCpbFullness : %.2f\n", m_RCInitialCpbFullness);
}
#endif
}
Seungwook Hong
committed
#if GDR_ENABLED
msg(DETAILS, "GDREnabled : %d\n", m_gdrEnabled);
if (m_gdrEnabled)
{
msg(DETAILS, "GDR Start : %d\n", m_gdrPocStart);
msg(DETAILS, "GDR Interval : %d\n", m_gdrInterval);
msg(DETAILS, "GDR Period : %d\n", m_gdrPeriod);
}
#endif

Karsten Suehring
committed
msg( DETAILS, "Max Num Merge Candidates : %d\n", m_maxNumMergeCand );
msg( DETAILS, "Max Num Affine Merge Candidates : %d\n", m_maxNumAffineMergeCand );
msg( DETAILS, "Max Num Geo Merge Candidates : %d\n", m_maxNumGeoCand );
msg( DETAILS, "Max Num IBC Merge Candidates : %d\n", m_maxNumIBCMergeCand );

Karsten Suehring
committed
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
msg( DETAILS, "\n");
msg( VERBOSE, "TOOL CFG: ");
msg( VERBOSE, "IBD:%d ", ((m_internalBitDepth[CHANNEL_TYPE_LUMA] > m_MSBExtendedBitDepth[CHANNEL_TYPE_LUMA]) || (m_internalBitDepth[CHANNEL_TYPE_CHROMA] > m_MSBExtendedBitDepth[CHANNEL_TYPE_CHROMA])));
msg( VERBOSE, "HAD:%d ", m_bUseHADME );
msg( VERBOSE, "RDQ:%d ", m_useRDOQ );
msg( VERBOSE, "RDQTS:%d ", m_useRDOQTS );
msg( VERBOSE, "RDpenalty:%d ", m_rdPenalty );
#if SHARP_LUMA_DELTA_QP
msg( VERBOSE, "LQP:%d ", m_lumaLevelToDeltaQPMapping.mode );
#endif
msg( VERBOSE, "SQP:%d ", m_uiDeltaQpRD );
msg( VERBOSE, "ASR:%d ", m_bUseASR );
msg( VERBOSE, "MinSearchWindow:%d ", m_minSearchWindow );
msg( VERBOSE, "RestrictMESampling:%d ", m_bRestrictMESampling );
msg( VERBOSE, "FEN:%d ", int(m_fastInterSearchMode) );
msg( VERBOSE, "ECU:%d ", m_bUseEarlyCU );
msg( VERBOSE, "FDM:%d ", m_useFastDecisionForMerge );
msg( VERBOSE, "ESD:%d ", m_useEarlySkipDetection );
msg( VERBOSE, "TransformSkip:%d ", m_useTransformSkip );
msg( VERBOSE, "TransformSkipFast:%d ", m_useTransformSkipFast );
msg( VERBOSE, "TransformSkipLog2MaxSize:%d ", m_log2MaxTransformSkipBlockSize);
msg(VERBOSE, "ChromaTS:%d ", m_useChromaTS);
msg( VERBOSE, "BDPCM:%d ", m_useBDPCM );
msg( VERBOSE, "Tiles: %dx%d ", m_numTileCols, m_numTileRows );
msg( VERBOSE, "Slices: %d ", m_numSlicesInPic);
msg( VERBOSE, "MCTS:%d ", m_MCTSEncConstraint );

Karsten Suehring
committed
msg( VERBOSE, "SAO:%d ", (m_bUseSAO)?(1):(0));
msg( VERBOSE, "ALF:%d ", m_alf ? 1 : 0 );
msg( VERBOSE, "CCALF:%d ", m_ccalf ? 1 : 0 );
msg(VERBOSE, "MaxNumALFAPS", m_maxNumAlfAps);
msg(VERBOSE, "ConstantJointCbCrSignFlag", m_constantJointCbCrSignFlag);

Karsten Suehring
committed
msg( VERBOSE, "WPP:%d ", (int)m_useWeightedPred);
msg( VERBOSE, "WPB:%d ", (int)m_useWeightedBiPred);
msg( VERBOSE, "PME:%d ", m_log2ParallelMergeLevel);
const int iWaveFrontSubstreams = m_entropyCodingSyncEnabledFlag ? (m_sourceHeight + m_uiMaxCUHeight - 1) / m_uiMaxCUHeight : 1;

Karsten Suehring
committed
msg( VERBOSE, " WaveFrontSynchro:%d WaveFrontSubstreams:%d", m_entropyCodingSyncEnabledFlag?1:0, iWaveFrontSubstreams);
msg( VERBOSE, " ScalingList:%d ", m_useScalingListId );
Martin Pettersson
committed
msg( VERBOSE, "TMVPMode:%d ", m_TMVPModeId );

Karsten Suehring
committed
msg( VERBOSE, " DQ:%d ", m_depQuantEnabledFlag);
msg( VERBOSE, " SignBitHidingFlag:%d ", m_signDataHidingEnabledFlag);
msg( VERBOSE, "RecalQP:%d ", m_recalculateQPAccordingToLambda ? 1 : 0 );
{
msg( VERBOSE, "\nTOOL CFG: " );
msg( VERBOSE, "LFNST:%d ", m_LFNST );

Karsten Suehring
committed
msg( VERBOSE, "Affine:%d ", m_Affine );
if ( m_Affine )
{
msg( VERBOSE, "AffineType:%d ", m_AffineType );
}
msg(VERBOSE, "PROF:%d ", m_PROF);
msg(VERBOSE, "SbTMVP:%d ", m_sbTmvpEnableFlag);

Karsten Suehring
committed
msg( VERBOSE, "IMV:%d ", m_ImvMode );
msg( VERBOSE, "BIO:%d ", m_BIO );

Karsten Suehring
committed
msg( VERBOSE, "LMChroma:%d ", m_LMChroma );
msg( VERBOSE, "HorCollocatedChroma:%d ", m_horCollocatedChromaFlag );
msg( VERBOSE, "VerCollocatedChroma:%d ", m_verCollocatedChromaFlag );
{
std::string s;
const int m = m_mtsMode + 4 * m_mtsImplicitIntra;
if (m != 0)
{
s = "(";
s += (m & 1) != 0 ? "explicit intra" : "implicit intra";
if (m & 2)
{
s += ", explicit inter";
}
s += ")";
}
msg(VERBOSE, "MTS:%d%s ", m != 0, s.c_str());
}
msg( VERBOSE, "SBT:%d ", m_SBT );
msg( VERBOSE, "ISP:%d ", m_ISP );
msg( VERBOSE, "CompositeLTReference:%d ", m_compositeRefEnabled);
msg( VERBOSE, "Bcw:%d ", m_bcw );
msg( VERBOSE, "BcwFast:%d ", m_BcwFast );
Shunsuke Iwamura
committed
#if LUMA_ADAPTIVE_DEBLOCKING_FILTER_QP_OFFSET
msg( VERBOSE, "LADF:%d ", m_LadfEnabed );
msg(VERBOSE, "CIIP:%d ", m_ciip);
msg( VERBOSE, "Geo:%d ", m_Geo );
m_allowDisFracMMVD = m_MMVD ? m_allowDisFracMMVD : false;
if ( m_MMVD )
msg(VERBOSE, "AllowDisFracMMVD:%d ", m_allowDisFracMMVD);
msg( VERBOSE, "AffineAmvr:%d ", m_AffineAmvr );
Hongbin Liu
committed
m_AffineAmvrEncOpt = m_AffineAmvr ? m_AffineAmvrEncOpt : false;
msg( VERBOSE, "AffineAmvrEncOpt:%d ", m_AffineAmvrEncOpt );
msg(VERBOSE, "DMVR:%d ", m_DMVR);
msg(VERBOSE, "MmvdDisNum:%d ", m_MmvdDisNum);
msg(VERBOSE, "JointCbCr:%d ", m_JointCbCrMode);

Karsten Suehring
committed
}
m_useColorTrans = (m_chromaFormatIDC == CHROMA_444) ? m_useColorTrans : 0u;
msg(VERBOSE, "ACT:%d ", m_useColorTrans);
Yung-Hsuan Chao (Jessie)
committed
msg(VERBOSE, "PLT:%d ", m_PLTMode);
msg( VERBOSE, "HashME:%d ", m_HashME );
msg( VERBOSE, "WrapAround:%d ", m_wrapAround);
if( m_wrapAround )
msg( VERBOSE, "WrapAroundOffset:%d ", m_wrapAroundOffset );

Karsten Suehring
committed
// ADD_NEW_TOOL (add some output indicating the usage of tools)
msg( VERBOSE, "VirtualBoundariesEnabledFlag:%d ", m_virtualBoundariesEnabledFlag );
msg( VERBOSE, "VirtualBoundariesPresentInSPSFlag:%d ", m_virtualBoundariesPresentFlag );
if( m_virtualBoundariesPresentFlag )
{
Sheng-Yen Lin
committed
msg(VERBOSE, "vertical virtual boundaries:[");
for (unsigned i = 0; i < m_numVerVirtualBoundaries; i++)
{
msg(VERBOSE, " %d", m_virtualBoundariesPosX[i]);
}
msg(VERBOSE, " ] horizontal virtual boundaries:[");
for (unsigned i = 0; i < m_numHorVirtualBoundaries; i++)
{
msg(VERBOSE, " %d", m_virtualBoundariesPosY[i]);
}
msg(VERBOSE, " ] ");
}
msg(VERBOSE, "Reshape:%d ", m_lmcsEnabled);
if (m_lmcsEnabled)
msg(VERBOSE, "(Signal:%s ", m_reshapeSignalType == 0 ? "SDR" : (m_reshapeSignalType == 2 ? "HDR-HLG" : "HDR-PQ"));
msg(VERBOSE, "Opt:%d", m_adpOption);
if (m_adpOption > 0) { msg(VERBOSE, " CW:%d", m_initialCW); }
msg(VERBOSE, " CSoffset:%d", m_CSoffset);
msg(VERBOSE, "MRL:%d ", m_MRL);
msg(VERBOSE, "MIP:%d ", m_MIP);

Karsten Suehring
committed
msg( VERBOSE, "\nFAST TOOL CFG: " );
msg( VERBOSE, "LCTUFast:%d ", m_useFastLCTU );

Karsten Suehring
committed
msg( VERBOSE, "FastMrg:%d ", m_useFastMrg );
msg( VERBOSE, "PBIntraFast:%d ", m_usePbIntraFast );
if( m_ImvMode ) msg( VERBOSE, "IMV4PelFast:%d ", m_Imv4PelFast );
if (m_mtsMode)
{
msg(VERBOSE, "MTSMaxCand: %1d(intra) %1d(inter) ", m_MTSIntraMaxCand, m_MTSInterMaxCand);
}
if( m_ISP ) msg( VERBOSE, "ISPFast:%d ", m_useFastISP );
if( m_LFNST ) msg( VERBOSE, "FastLFNST:%d ", m_useFastLFNST );
msg( VERBOSE, "AMaxBT:%d ", m_useAMaxBT );
msg( VERBOSE, "E0023FastEnc:%d ", m_e0023FastEnc );
msg( VERBOSE, "ContentBasedFastQtbt:%d ", m_contentBasedFastQtbt );
msg( VERBOSE, "UseNonLinearAlfLuma:%d ", m_useNonLinearAlfLuma );
msg( VERBOSE, "UseNonLinearAlfChroma:%d ", m_useNonLinearAlfChroma );
msg( VERBOSE, "MaxNumAlfAlternativesChroma:%d ", m_maxNumAlfAlternativesChroma );
Philipp Merkle
committed
if( m_MIP ) msg(VERBOSE, "FastMIP:%d ", m_useFastMIP);
msg( VERBOSE, "FastLocalDualTree:%d ", m_fastLocalDualTreeMode );

Karsten Suehring
committed
if (m_resChangeInClvsEnabled)
msg( VERBOSE, "RPR:(%1.2lfx, %1.2lfx)|%d ", m_scalingRatioHor, m_scalingRatioVer, m_switchPocPeriod );
}
else
{
msg( VERBOSE, "RPR:%d ", 0 );
msg(VERBOSE, "TemporalFilter:%d/%d ", m_gopBasedTemporalFilterPastRefs, m_gopBasedTemporalFilterFutureRefs);
msg(VERBOSE, "SEI CTI:%d ", m_ctiSEIEnabled);
Rickard Sjöberg
committed
#if EXTENSION_360_VIDEO
m_ext360.outputConfigurationSummary();
#endif
if( m_constrainedRaslEncoding )
{
msg(VERBOSE, "\n\nWarning: with SEIConstrainedRASL enabled, LMChroma estimation is skipped in RASL frames" );
Christian Bartnik
committed
if( m_wrapAround )
{
msg(VERBOSE, "\n and wrap-around motion compensation is disabled in RASL frames" );
}

Karsten Suehring
committed
msg( VERBOSE, "\n\n");
msg( NOTICE, "\n");
fflush( stdout );
}
Martin Pettersson
committed
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
bool EncAppCfg::xHasNonZeroTemporalID ()
{
for (unsigned int i = 0; i < m_iGOPSize; i++)
{
if ( m_GOPList[i].m_temporalId != 0 )
{
return true;
}
}
return false;
}
bool EncAppCfg::xHasLeadingPicture ()
{
for (unsigned int i = 0; i < m_iGOPSize; i++)
{
for ( unsigned int j = 0; j < m_GOPList[i].m_numRefPics0; j++)
{
if ( m_GOPList[i].m_deltaRefPics0[j] < 0 )
{
return true;
}
}
for ( unsigned int j = 0; j < m_GOPList[i].m_numRefPics1; j++)
{
if ( m_GOPList[i].m_deltaRefPics1[j] < 0 )
{
return true;
}
}
}
return false;
}

Karsten Suehring
committed
bool confirmPara(bool bflag, const char* message)
{
if (!bflag)
{
return false;
}
msg( ERROR, "Error: %s\n",message);
return true;
}
Martin Pettersson
committed