...
 
Commits (796)
......@@ -10,3 +10,8 @@ deploy
*.suo
.vs/
.vscode/
*.blg
*.bbl
*.pyc
/out/
/doc/_minted-software-manual/
......@@ -28,6 +28,7 @@ if( CMAKE_SYSTEM_NAME STREQUAL "Linux" )
endif()
set( EXTENSION_360_VIDEO OFF CACHE BOOL "If EXTENSION_360_VIDEO is on, 360Lib will be added" )
set( EXTENSION_HDRTOOLS OFF CACHE BOOL "If EXTENSION_HDRTOOLS is on, HDRLib will be added" )
set( SET_ENABLE_TRACING OFF CACHE BOOL "Set ENABLE_TRACING as a compiler flag" )
set( ENABLE_TRACING OFF CACHE BOOL "If SET_ENABLE_TRACING is on, it will be set to this value" )
......@@ -112,6 +113,7 @@ if( CMAKE_CXX_COMPILER_ID STREQUAL "GNU" )
if( USE_ADDRESS_SANITIZER )
# add compile options
add_compile_options( "-fsanitize=address" )
add_link_options( "-fsanitize=address" )
endif()
endif()
......@@ -136,6 +138,9 @@ if( EXTENSION_360_VIDEO )
add_subdirectory( "source/Lib/Lib360" )
add_subdirectory( "source/Lib/AppEncHelper360" )
endif()
if ( EXTENSION_HDRTOOLS )
add_subdirectory( "source/Lib/HDRLib")
endif()
add_subdirectory( "source/Lib/DecoderAnalyserLib" )
add_subdirectory( "source/Lib/DecoderLib" )
add_subdirectory( "source/Lib/EncoderLib" )
......
......@@ -21,20 +21,38 @@ mkdir build
Use one of the following CMake commands, based on your platform. Feel free to change the commands to satisfy
your needs.
**Windows Visual Studio 2015 64 Bit:**
**Windows Visual Studio 2015/17/19 64 Bit:**
Use the proper generator string for generating Visual Studio files, e.g. for VS 2015:
```bash
cd build
cmake .. -G "Visual Studio 14 2015 Win64"
```
Then open the generated solution file in MS Visual Studio.
For VS 2017 use "Visual Studio 15 2017 Win64", for VS 2019 use "Visual Studio 16 2019".
Visual Studio 2019 also allows you to open the CMake directory directly. Choose "File->Open->CMake" for this option.
**macOS Xcode:**
For generating an Xcode workspace type:
```bash
cd build
cmake .. -G "Xcode"
```
Then open the generated work space in Xcode.
For generating Makefiles with optional non-default compilers, use the following commands:
```bash
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9
```
In this example the brew installed GCC 9 is used for a release build.
**Linux**
For generating Linux Release Makefile:
......
......@@ -61,13 +61,6 @@ SliceArgument : 1500 # Argument for 'SliceMode'.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
......@@ -75,8 +68,11 @@ CUTransquantBypassFlagForce: 0 # Force transquant bypass
#============ VTM settings ======================
LoopFilterTcOffset_div2 : 0
SEIDecodedPictureHash : 0
CbQpOffset : 1
CrQpOffset : 1
CbQpOffset : 0
CrQpOffset : 0
SameCQPTablesForAllChroma : 1
QpInValCb : 1 31 43
QpOutValCb : 1 32 41
TemporalSubsampleRatio : 8
ReWriteParamSets : 1
......@@ -90,15 +86,15 @@ DualITree : 1 # separate partitioning of luma and chroma
MinQTLumaISlice : 8
MinQTChromaISlice : 4
MinQTNonISlice : 8
MaxBTDepth : 3
MaxBTDepthISliceL : 3
MaxBTDepthISliceC : 3
MaxMTTHierarchyDepth : 3
MaxMTTHierarchyDepthISliceL : 3
MaxMTTHierarchyDepthISliceC : 3
MTS : 1
MTSIntraMaxCand : 3
MTSInterMaxCand : 4
SBT : 1
LFNST : 1
LFNST : 1
ISP : 1
Affine : 1
SubPuMvp : 1
......@@ -107,13 +103,14 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
IBC : 0 # turned off in CTC
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
AffineAmvr : 0
LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 1 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
MIP : 1
JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable
# Fast tools
PBIntraFast : 1
......@@ -121,7 +118,7 @@ ISPFast : 1
FastMrg : 1
AMaxBT : 1
FastMIP : 1
FastLFNST : 1
FastLFNST : 1
# Encoder optimization tools
AffineAmvrEncOpt : 0
......
......@@ -69,13 +69,6 @@ SliceArgument : 1500 # Argument for 'SliceMode'.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
......@@ -92,9 +85,11 @@ RCForceIntraQP : 0 # Rate control: force int
#============ VTM settings ======================
LoopFilterTcOffset_div2 : 0
SEIDecodedPictureHash : 0
CbQpOffset : 1
CrQpOffset : 1
CbQpOffset : 0
CrQpOffset : 0
SameCQPTablesForAllChroma : 1
QpInValCb : 32 44
QpOutValCb : 32 41
ReWriteParamSets : 1
#============ NEXT ====================
......@@ -106,9 +101,9 @@ DualITree : 1 # separate partitioning of luma and chroma
MinQTLumaISlice : 8
MinQTChromaISlice : 4
MinQTNonISlice : 8
MaxBTDepth : 3
MaxBTDepthISliceL : 3
MaxBTDepthISliceC : 3
MaxMTTHierarchyDepth : 3
MaxMTTHierarchyDepthISliceL : 3
MaxMTTHierarchyDepthISliceC : 3
MTS : 1
MTSIntraMaxCand : 3
......@@ -130,17 +125,21 @@ LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 2 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
MIP : 1
JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable
PROF : 1
PPSorSliceMode : 3
# Fast tools
PBIntraFast : 1
ISPFast : 1
ISPFast : 0
FastMrg : 1
AMaxBT : 1
FastMIP : 0
FastLocalDualTreeMode : 2
# Encoder optimization tools
AffineAmvrEncOpt : 0
MmvdDisNum : 6
MmvdDisNum : 6
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......
......@@ -69,13 +69,6 @@ SliceArgument : 1500 # Argument for 'SliceMode'.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
......@@ -92,9 +85,11 @@ RCForceIntraQP : 0 # Rate control: force int
#============ VTM settings ======================
LoopFilterTcOffset_div2 : 0
SEIDecodedPictureHash : 0
CbQpOffset : 1
CrQpOffset : 1
CbQpOffset : 0
CrQpOffset : 0
SameCQPTablesForAllChroma : 1
QpInValCb : 32 44
QpOutValCb : 32 41
ReWriteParamSets : 1
#============ NEXT ====================
......@@ -106,9 +101,9 @@ DualITree : 1 # separate partitioning of luma and chroma
MinQTLumaISlice : 8
MinQTChromaISlice : 4
MinQTNonISlice : 8
MaxBTDepth : 3
MaxBTDepthISliceL : 3
MaxBTDepthISliceC : 3
MaxMTTHierarchyDepth : 3
MaxMTTHierarchyDepthISliceL : 3
MaxMTTHierarchyDepthISliceC : 3
MTS : 1
MTSIntraMaxCand : 3
......@@ -123,8 +118,8 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBiFast : 1
GBi : 1
GBiFast : 1
MHIntra : 1
Triangle : 1
IBC : 0 # turned off in CTC
......@@ -134,17 +129,21 @@ LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 2 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
MIP : 1
JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable
PROF : 1
PPSorSliceMode : 2
# Fast tools
PBIntraFast : 1
ISPFast : 1
ISPFast : 0
FastMrg : 1
AMaxBT : 1
FastMIP : 0
FastLocalDualTreeMode : 2
# Encoder optimization tools
AffineAmvrEncOpt : 0
MmvdDisNum : 6
MmvdDisNum : 6
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......
......@@ -83,13 +83,6 @@ SliceArgument : 1500 # Argument for 'SliceMode'.
LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF and DB, is across or not across slice boundary.
# 0:not across, 1: across
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
......@@ -106,9 +99,11 @@ RCForceIntraQP : 0 # Rate control: force int
#============ VTM settings ======================
LoopFilterTcOffset_div2 : 0
SEIDecodedPictureHash : 0
CbQpOffset : 1
CrQpOffset : 1
CbQpOffset : 0
CrQpOffset : 0
SameCQPTablesForAllChroma : 1
QpInValCb : 32 44
QpOutValCb : 32 41
ReWriteParamSets : 1
#============ NEXT ====================
......@@ -120,15 +115,15 @@ DualITree : 1 # separate partitioning of luma and chroma
MinQTLumaISlice : 8
MinQTChromaISlice : 4
MinQTNonISlice : 8
MaxBTDepth : 3
MaxBTDepthISliceL : 3
MaxBTDepthISliceC : 3
MaxMTTHierarchyDepth : 3
MaxMTTHierarchyDepthISliceL : 3
MaxMTTHierarchyDepthISliceC : 3
MTS : 1
MTSIntraMaxCand : 3
MTSInterMaxCand : 4
SBT : 1
LFNST : 1
LFNST : 1
ISP : 1
MMVD : 1
Affine : 1
......@@ -138,9 +133,9 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBi : 1
GBiFast : 1
BIO : 1
BIO : 1
MHIntra : 1
Triangle : 1
IBC : 0 # turned off in CTC
......@@ -152,18 +147,22 @@ LMCSUpdateCtrl : 0 # LMCS model update control: 0:RA, 1:AI, 2
MIP : 1
DMVR : 1
SMVD : 1
JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable
PROF : 1
PPSorSliceMode : 1
# Fast tools
PBIntraFast : 1
ISPFast : 1
ISPFast : 0
FastMrg : 1
AMaxBT : 1
FastMIP : 0
FastLFNST : 0
FastLFNST : 0
FastLocalDualTreeMode : 1
# Encoder optimization tools
AffineAmvrEncOpt : 1
MmvdDisNum : 6
MmvdDisNum : 6
### DO NOT ADD ANYTHING BELOW THIS LINE ###
### DO NOT DELETE THE EMPTY LINE BELOW ###
......
......@@ -75,7 +75,7 @@ SliceMode : 3 # 0: Disable all slice options.
# 1: Enforce maximum number of LCU in an slice,
# 2: Enforce maximum number of bytes in an 'slice'
# 3: Enforce maximum number of tiles in a slice
SliceArgument : 4 # Argument for 'SliceMode'.
SliceArgument : 2 # Argument for 'SliceMode'.
# If SliceMode==1 it represents max. SliceGranularity-sized blocks per slice.
# If SliceMode==2 it represents max. bytes per slice.
# If SliceMode==3 it represents max. tiles per slice.
......@@ -86,6 +86,9 @@ LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF a
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
UniformTileColsWidthMinus1 : 0 # Width to use if TileUniformSpacing is equal to 1
UniformTileRowHeightMinus1 : 0 # Height to use if TileUniformSpacing is equal to 1
NumTileColumnsMinus1 : 1 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 1 # Number of tile rows in a picture minus 1
......@@ -96,13 +99,6 @@ LFCrossTileBoundaryFlag : 0 # In-loop filtering is ac
RectSliceFlag : 0
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
......@@ -133,9 +129,9 @@ DualITree : 1 # separate partitioning of luma and chroma
MinQTLumaISlice : 8
MinQTChromaISlice : 4
MinQTNonISlice : 8
MaxBTDepth : 3
MaxBTDepthISliceL : 3
MaxBTDepthISliceC : 3
MaxMTTHierarchyDepth : 3
MaxMTTHierarchyDepthISliceL : 3
MaxMTTHierarchyDepthISliceC : 3
MTS : 1
MTSIntraMaxCand : 3
......
......@@ -86,6 +86,8 @@ LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF a
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
UniformTileColsWidthMinus1 : 0 # Width to use if TileUniformSpacing is equal to 1
UniformTileRowHeightMinus1 : 0 # Height to use if TileUniformSpacing is equal to 1
NumTileColumnsMinus1 : 3 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 1 1 1 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 1 # Number of tile rows in a picture minus 1
......@@ -98,13 +100,6 @@ RectSliceFlag : 1
NumRectSlicesInPicMinus1 : 3
RectSlicesBoundaryArray : 0 4 1 5 2 6 3 7
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
......@@ -135,9 +130,9 @@ DualITree : 1 # separate partitioning of luma and chroma
MinQTLumaISlice : 8
MinQTChromaISlice : 4
MinQTNonISlice : 8
MaxBTDepth : 3
MaxBTDepthISliceL : 3
MaxBTDepthISliceC : 3
MaxMTTHierarchyDepth : 3
MaxMTTHierarchyDepthISliceL : 3
MaxMTTHierarchyDepthISliceC : 3
MTS : 1
MTSIntraMaxCand : 3
......
......@@ -84,8 +84,11 @@ LFCrossSliceBoundaryFlag : 1 # In-loop filtering, including ALF a
# 0:not across, 1: across
#============ Tiles ================
TileUniformSpacing : 0 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
TileUniformSpacing : 1 # 0: the column boundaries are indicated by TileColumnWidth array, the row boundaries are indicated by TileRowHeight array
# 1: the column and row boundaries are distributed uniformly
UniformTileColsWidthMinus1 : 1 # Width to use if TileUniformSpacing is equal to 1
UniformTileRowHeightMinus1 : 0 # Height to use if TileUniformSpacing is equal to 1
NumTileColumnsMinus1 : 1 # Number of tile columns in a picture minus 1
TileColumnWidthArray : 2 # Array containing tile column width values in units of CTU (from left to right in picture)
NumTileRowsMinus1 : 1 # Number of tile rows in a picture minus 1
......@@ -98,13 +101,6 @@ RectSliceFlag : 1
NumRectSlicesInPicMinus1 : 3
RectSlicesBoundaryArray : 0 0 1 1 2 2 3 3
#============ PCM ================
PCMEnabledFlag : 0 # 0: No PCM mode
PCMLog2MaxSize : 5 # Log2 of maximum PCM block size.
PCMLog2MinSize : 3 # Log2 of minimum PCM block size.
PCMInputBitDepthFlag : 1 # 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
PCMFilterDisableFlag : 0 # 0: Enable loop filtering on I_PCM samples. 1: Disable loop filtering on I_PCM samples.
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
......@@ -135,9 +131,9 @@ DualITree : 1 # separate partitioning of luma and chroma
MinQTLumaISlice : 8
MinQTChromaISlice : 4
MinQTNonISlice : 8
MaxBTDepth : 3
MaxBTDepthISliceL : 3
MaxBTDepthISliceC : 3
MaxMTTHierarchyDepth : 3
MaxMTTHierarchyDepthISliceL : 3
MaxMTTHierarchyDepthISliceC : 3
MTS : 1
MTSIntraMaxCand : 3
......
IBC : 1
HashME : 1
RDPCM: 1
BDPCM: 1
......@@ -12,3 +12,14 @@ WCGPPSChromaQpScale : -0.46 # Linear chroma QP offset mapping (s
WCGPPSChromaQpOffset : 9.26 # Linear chroma QP offset mapping (offset) based on QP
WCGPPSCbQpScale : 1.14 # Scale factor depending on capture and representation color space
WCGPPSCrQpScale : 1.79 # Scale factor depending on capture and representation color space
CbQpOffset : 0
CrQpOffset : 0
SameCQPTablesForAllChroma : 1
QpInValCb : 9 23 33 42
QpOutValCb : 9 24 33 37
CclmCollocatedChroma : 1
#======== HDR Metrics ============
CalculateHdrMetrics : 1 # Calculate HDR metrics for Class H1 (PQ) content
\ No newline at end of file
......@@ -7,3 +7,9 @@ LMCSSignalType : 2 # Input signal type: 0:SDR, 1:HDR-PQ
#======== Chroma QP scale ============
WCGPPSEnable : 0 # enable WCG Chroma scale
CbQpOffset : 0
CrQpOffset : 0
SameCQPTablesForAllChroma : 1
QpInValCb : 9 23 33 42
QpOutValCb : 9 24 33 37
......@@ -12,4 +12,10 @@ Level : 4.1
#======== Chroma QP scale =============
WCGPPSCbQpScale : 1.04 # Scale factor depending on capture and representation color space
WCGPPSCrQpScale : 1.39 # Scale factor depending on capture and representation color space
WCGPPSCrQpScale : 1.39 # Scale factor depending on capture and representation color space
#======== HDR Metrics ============
CropOffsetLeft : 10
CropOffsetTop : 10
CropOffsetRight : -10
CropOffsetBottom : -10
# Reference picture resampling CE settings for scaling ratio and number of encoded frames
ScalingRatioHor : 1.5
ScalingRatioVer : 1.5
FractionNumFrames : 0.5
UpscaledOutput : 1
\ No newline at end of file
# Reference picture resampling CE settings for scaling ratio and number of encoded frames
ScalingRatioHor : 2.0
ScalingRatioVer : 2.0
FractionNumFrames : 0.5
UpscaledOutput : 1
# Reference picture resampling CE settings for scaling ratio and number of encoded frames
ScalingRatioHor : 4.0
ScalingRatioVer : 4.0
FractionNumFrames : 0.5
UpscaledOutput : 1
SEIBufferingPeriod: 1
SEIPictureTiming: 1
VuiParametersPresent: 1
RCCpbSize: 2000
......@@ -11,6 +11,7 @@ import sys
import pyhhi.build.common.system as system
import pyhhi.build.common.util as util
import pyhhi.build.common.ver as ver
import pyhhi.build.common.bldtools as bldtools
import pyhhi.build.cmksupp as cmksupp
from pyhhi.build.common.bldtools import BuildScriptInstaller
from pyhhi.build.common.error import InvalidCommandLineArgumentError
......@@ -24,7 +25,7 @@ class CMakeLauncherApp(object):
self._cmake_launcher = None
self._dict_generator_choice = {'linux': ['umake', 'ninja'],
'macosx': ['xcode', 'umake', 'ninja'],
'windows': ['vs15', 'vs14', 'vs12', 'vs11', 'vs10', 'umake', 'mgwmake', 'ninja']}
'windows': ['vs16', 'vs15', 'vs14', 'vs12', 'vs11', 'vs10', 'umake', 'mgwmake', 'ninja']}
self._top_dir = None
self._cmake_mod_list = ['pyhhi.build.app.cmk',
'pyhhi.build.cmkfnd',
......@@ -93,14 +94,14 @@ class CMakeLauncherApp(object):
%(prog)s [options] [variant=debug,release,relwithdebinfo,minsizerel] [link=static,shared] [toolset=<toolset_spec>] [address-model=32]
%(prog)s is a script front end to cmake to simplify its usage on Linux,
Windows, MacOSX using cmake's generators "Unix Makefiles", "Xcode" and
"Visual Studio 15 - Visual Studio 10" and its compilers.
Windows, MacOSX using cmake's generators "Unix Makefiles", "Ninja", "Xcode" and
"Visual Studio 16 - Visual Studio 10" and its compilers.
arguments:
variant: debug if not specified
link: static if not specified
toolset: default c++ compiler if not specified
examples/windows: msvc-19.13, msvc-19.0, msvc-18.0, msvc-17.0, msvc-16.0, intel, gcc
examples/windows: msvc-19.1x, msvc-19.0, msvc-18.0, msvc-17.0, msvc-16.0, intel, gcc
examples/linux: gcc-4.9, gcc-5, gcc-6, clang, intel
address-model=32: windows: builds 32 bit binaries instead of 64 bit binaries
......@@ -131,7 +132,7 @@ usage examples:
parser.add_argument("-g", "-G", action="store", dest="generator", choices=self._dict_generator_choice[self._sys_info.get_platform()],
help="""specify a cmake generator the script has special support for.
Supported generators: ninja, umake, mgwmake, vs15, vs14, vs12, vs11, vs10, xcode.
Supported generators: ninja, umake, mgwmake, vs16, vs15, vs14, vs12, vs11, vs10, xcode.
The choices accepted are platform and installation dependent. The environment variable
DEFAULT_CMAKE_GENERATOR may be used to override the default value.""")
......@@ -155,13 +156,14 @@ usage examples:
parser.add_argument("--clean-first", action="store_true", dest="clean_first", default=False,
help="build target clean first, then build the active target.")
parser.add_argument("--verbosity", action="store", dest="build_verbosity", choices=['quiet', 'minimal', 'normal', 'detailed', 'diagnostic'], default='minimal',
help="specify msbuild verbosity level [default: %(default)s].")
parser.add_argument("--verbosity", action="store", dest="build_verbosity", choices=['cmake', 'quiet', 'minimal', 'normal', 'detailed', 'diagnostic'], default='minimal',
help="""specify (ms)build verbosity level [default: %(default)s].
The choice 'cmake' requires cmake 3.14.x or higher to increase build verbosity for Visual Studio and other generators.""")
util.app_args_add_log_level(parser)
g = parser.add_argument_group("advanced options")
g.add_argument("-i", action="store", dest="install_dir", nargs='?', const=os.path.join(self._sys_info.get_home_dir(), 'bin'),
g.add_argument("-i", action="store", dest="install_dir", nargs='?', const=os.path.join(self._sys_info.get_home_dir(native=True), 'bin'),
help="install this script and exit. The default destination directory is %(const)s.")
g.add_argument("--py-cache-clean", action="store", dest="py_cache_dirs", nargs='+',
......@@ -282,11 +284,26 @@ usage examples:
# looks like a cross compiler specification which requires a toolchain file matching the toolset spec and the linux system.
toolset_spec_norm = self._find_toolchain_file(toolset_spec_norm)
elif self._sys_info.is_windows():
# msvc-19.00 -> normalized to 19.0
re_match = re.match(r'msvc-(\d+)\.(\d+)', toolset_spec)
if re_match:
minor_version = int(re_match.group(2))
toolset_spec_norm = "msvc-{0}.{1:d}".format(re_match.group(1), minor_version)
if toolset_spec.startswith('msvc-'):
msvc_registry = bldtools.MsvcRegistry()
if toolset_spec == 'msvc-19.2x':
if msvc_registry.is_version_installed((14, 2)):
cl_version = msvc_registry.get_compiler_version((14, 2))
toolset_spec_norm = "msvc-{0:d}.{1:d}".format(cl_version[0], cl_version[1])
else:
raise InvalidCommandLineArgumentError("toolset={} not available.".format(toolset_spec))
elif toolset_spec == 'msvc-19.1x':
if msvc_registry.is_version_installed((14, 1)):
cl_version = msvc_registry.get_compiler_version((14, 1))
toolset_spec_norm = "msvc-{0:d}.{1:d}".format(cl_version[0], cl_version[1])
else:
raise InvalidCommandLineArgumentError("toolset={} not available.".format(toolset_spec))
else:
# msvc-19.00 -> normalized to 19.0
re_match = re.match(r'msvc-(\d+)\.(\d+)', toolset_spec)
if re_match:
minor_version = int(re_match.group(2))
toolset_spec_norm = "msvc-{0}.{1:d}".format(re_match.group(1), minor_version)
elif self._sys_info.is_macosx():
pass
else:
......
......@@ -155,6 +155,7 @@ class CMakeLauncher(object):
'mgwmake': 'MinGW Makefiles',
'ninja': 'Ninja',
'xcode': 'Xcode',
'vs16': 'Visual Studio 16 2019',
'vs15': 'Visual Studio 15 2017',
'vs14': 'Visual Studio 14 2015',
'vs12': 'Visual Studio 12 2013',
......@@ -178,13 +179,30 @@ class CMakeLauncher(object):
'vs12': ['msvc-18.0', 'msvc-17.0', 'msvc-16.0'],
'vs11': ['msvc-17.0', 'msvc-16.0'],
'vs10': ['msvc-16.0']}
# vs15 has not a fixed compiler version and therefore the mapping is generated dynamically.
if self._msvc_registry.is_version_installed((14, 1)):
cl_version = self._msvc_registry.get_compiler_version((14, 1))
msvc_str = 'msvc-' + ver.version_tuple_to_str(cl_version[:2])
if cl_version[1] < 20:
self._dict_to_vs_platform_toolset[msvc_str] = 'v141'
self._dict_generator_alias_to_msvc_toolsets['vs15'] = [msvc_str, 'msvc-19.0', 'msvc-18.0', 'msvc-17.0', 'msvc-16.0']
if not self._msvc_registry.is_vs2019_toolset((14, 1)):
self._dict_generator_alias_to_msvc_toolsets['vs15'] = [msvc_str, 'msvc-19.0', 'msvc-18.0', 'msvc-17.0', 'msvc-16.0']
else:
assert False
# vs16 has not a fixed compiler version and therefore the mapping is generated dynamically.
if self._msvc_registry.is_version_installed((14, 2)):
cl_version = self._msvc_registry.get_compiler_version((14, 2))
msvc_str = 'msvc-' + ver.version_tuple_to_str(cl_version[:2])
if cl_version[1] < 30:
self._dict_to_vs_platform_toolset[msvc_str] = 'v142'
msvc_version_list = [msvc_str]
if self._msvc_registry.is_version_installed((14, 1)):
cl_version = self._msvc_registry.get_compiler_version((14, 1))
msvc_version_list.append("msvc-{0:d}.{1:d}".format(cl_version[0], cl_version[1]))
msvc_version_list.extend(['msvc-19.0', 'msvc-18.0', 'msvc-17.0', 'msvc-16.0'])
self._dict_generator_alias_to_msvc_toolsets['vs16'] = msvc_version_list
else:
assert False
......@@ -259,38 +277,43 @@ class CMakeLauncher(object):
vs_toolset = "Intel C++ Compiler %d.%d" % (compiler_info.version_major_minor[0], compiler_info.version_major_minor[1])
else:
assert False
cmake_argv = ['-G', self._dict_to_cmake_generator[generator_alias],
'-T', vs_toolset,
'-A', self._dict_to_vs_platform_name[compiler_info.target_arch]]
cmake_argv = ['-G', self._dict_to_cmake_generator[generator_alias]]
if generator_alias == 'vs16':
if ver.version_compare(compiler_info.version_major_minor, (19, 20)) < 0:
cmake_argv.extend(['-T', self._dict_to_vs_platform_toolset['msvc-' + ver.version_tuple_to_str(compiler_info.version_major_minor)]])
if compiler_info.target_arch != 'x86_64':
cmake_argv.extend(['-A', self._dict_to_vs_platform_name[compiler_info.target_arch]])
else:
cmake_argv.extend(['-T', vs_toolset, '-A', self._dict_to_vs_platform_name[compiler_info.target_arch]])
elif generator_alias == 'xcode':
cmake_argv = ['-G', self._dict_to_cmake_generator[generator_alias]]
elif generator_alias in ['umake', 'mgwmake', 'ninja']:
cmake_argv = ['-G', self._dict_to_cmake_generator[generator_alias],
'-DCMAKE_BUILD_TYPE=' + self._dict_to_cmake_config[cfg]]
'-DCMAKE_BUILD_TYPE:STRING=' + self._dict_to_cmake_config[cfg]]
if compiler_info.is_cross_compiler():
cmake_argv.append('-DCMAKE_TOOLCHAIN_FILE=' + compiler_info.cmake_toolchain_file)
cmake_argv.append('-DCMAKE_TOOLCHAIN_FILE:FILEPATH=' + compiler_info.cmake_toolchain_file)
else:
if compiler_info.cmake_cxx_compiler:
cmake_argv.append('-DCMAKE_CXX_COMPILER=' + compiler_info.cmake_cxx_compiler)
cmake_argv.append('-DCMAKE_CXX_COMPILER:FILEPATH=' + compiler_info.cmake_cxx_compiler)
if compiler_info.cmake_c_compiler:
cmake_argv.append('-DCMAKE_C_COMPILER=' + compiler_info.cmake_c_compiler)
cmake_argv.append('-DCMAKE_C_COMPILER:FILEPATH=' + compiler_info.cmake_c_compiler)
if cmake_argv_optional:
# Add any additional arguments to the cmake command line.
cmake_argv.extend(cmake_argv_optional)
if lnk_variant == 'shared':
cmake_argv.append('-DBUILD_SHARED_LIBS=1')
cmake_argv.append('-DBUILD_SHARED_LIBS:BOOL=ON')
if self._is_multi_configuration_generator():
cmake_config_types = [self._dict_to_cmake_config[x] for x in self._default_config_types]
for b_cfg in build_configs:
if b_cfg not in self._default_config_types:
cmake_config_types.append(self._dict_to_cmake_config[b_cfg])
cmake_argv.append('-DCMAKE_CONFIGURATION_TYPES=' + ';'.join(cmake_config_types))
cmake_argv.append('-DCMAKE_CONFIGURATION_TYPES:STRING=' + ';'.join(cmake_config_types))
# cmake_argv.append(self._top_dir)
# print("launch_config(): cmake_args", cmake_argv)
# print("build dir:", b_dir)
# print("top dir:", self._top_dir)
if (not self._sys_info.is_windows()) and (ver.version_compare(self._cmake_finder.get_cmake_version(), (3, 13, 0)) >= 0):
# Not done for windows yet avoiding potential issues with command line length limits.
if ver.version_compare(self._cmake_finder.get_cmake_version(), (3, 13, 0)) >= 0:
cmake_argv.extend(['-S', self._top_dir, '-B', b_dir])
retv = self.launch_cmake(cmake_argv)
else:
......@@ -410,9 +433,11 @@ class CMakeLauncher(object):
elif self._sys_info.get_platform() == 'macosx':
generator_alias = 'xcode'
elif self._sys_info.get_platform() == 'windows':
# e.g. 14.1, 14.0, 12.0 etc.
# e.g. 14.2, 14.1, 14.0, 12.0 etc.
bb_vs_latest_version = self._msvc_registry.get_latest_version()
if ver.version_compare(bb_vs_latest_version, (14,1)) == 0:
if ver.version_compare(bb_vs_latest_version, (14, 2)) == 0:
generator_alias = 'vs16'
elif ver.version_compare(bb_vs_latest_version, (14, 1)) == 0:
generator_alias = 'vs15'
else:
generator_alias = 'vs' + str(bb_vs_latest_version[0])
......@@ -565,8 +590,20 @@ class CMakeLauncher(object):
self._add_cmake_build_tool_options(cmake_argv, ['-parallelizeTargets', '-jobs', str(build_jobs)])
def _add_cmake_build_verbosity_option(self, cmake_argv, generator_alias, verbosity_level):
if generator_alias.startswith('vs'):
self._add_cmake_build_tool_options(cmake_argv, ['/verbosity:' + verbosity_level])
if verbosity_level == 'cmake':
cmake_version = self._cmake_finder.get_cmake_version()
if ver.version_compare(cmake_version, (3, 14)) >= 0:
# self._add_cmake_build_tool_options(cmake_argv, ['-v'])
# -v is a cmake option and not a build tool option and therefore
# it has to be inserted left of '--'
if '--' in cmake_argv:
index = cmake_argv.index('--')
cmake_argv.insert(index, '-v')
else:
cmake_argv.append('-v')
else:
if generator_alias.startswith('vs'):
self._add_cmake_build_tool_options(cmake_argv, ['/verbosity:' + verbosity_level])
def _add_cmake_build_tool_options(self, cmake_argv, build_tool_options):
if not build_tool_options:
......
......@@ -4,4 +4,4 @@
# Any manual changes here will be overridden by the next build.
#-------------
CMAKE_BUILD_VERSION_STR = "3.13.0.2"
CMAKE_BUILD_VERSION_STR = "3.14.4.4"
......@@ -98,18 +98,18 @@ class SystemInfo(object):
if self._os_arch == 'x86_64':
if self._python_arch == 'x86':
self._program_dir = os.getenv('PROGRAMW6432')
self._programx86_dir = os.getenv('PROGRAMFILES')
self._program_dir = os.path.normpath(os.getenv('PROGRAMW6432'))
self._programx86_dir = os.path.normpath(os.getenv('PROGRAMFILES'))
else:
self._program_dir = os.getenv('PROGRAMFILES')
self._programx86_dir = os.getenv('PROGRAMFILES(X86)')
self._program_dir = os.path.normpath(os.getenv('PROGRAMFILES'))
self._programx86_dir = os.path.normpath(os.getenv('PROGRAMFILES(X86)'))
assert self._programx86_dir is not None
elif self._os_arch == 'x86':
self._program_dir = os.getenv('PROGRAMFILES')
self._program_dir = os.path.normpath(os.getenv('PROGRAMFILES'))
else:
assert False
assert self._program_dir is not None
self._program_data_dir = os.getenv('PROGRAMDATA')
self._program_data_dir = os.path.normpath(os.getenv('PROGRAMDATA'))
if self._windows_msys:
pass
......@@ -315,8 +315,12 @@ class SystemInfo(object):
def get_path(self):
return self._search_path
def get_home_dir(self):
return self._home_dir
def get_home_dir(self, native=False):
if self.is_windows_msys() and native:
home_dir = os.path.normpath(os.path.expandvars('$USERPROFILE'))
else:
home_dir = self._home_dir
return home_dir
def get_default_proj_home_dir(self):
return self._default_proj_home_dir
......@@ -339,7 +343,7 @@ class SystemInfo(object):
def get_short_path(self, fpath):
if self.is_windows():
fpath = self.get_short_path_win(fpath)
fpath = os.path.normpath(self.get_short_path_win(fpath))
return fpath
def get_short_path_win(self, fpath):
......@@ -440,13 +444,13 @@ class SystemInfo(object):
# make sure the user's home directory exists
if not os.path.exists(home_dir):
raise Exception('home directory "' + home_dir + '" does not exist.')
self._home_dir = home_dir
self._home_dir = os.path.normpath(home_dir)
def _query_default_proj_home_dir(self):
if 'PROJ_HOME' in os.environ:
proj_home_dir = os.path.expandvars('$PROJ_HOME')
proj_home_dir = os.path.normpath(os.path.expandvars('$PROJ_HOME'))
else:
proj_home_dir = os.path.join(self.get_home_dir(), 'projects')
proj_home_dir = os.path.join(self.get_home_dir(native=True), 'projects')
if os.path.exists(proj_home_dir):
self._default_proj_home_dir = proj_home_dir
else:
......@@ -459,7 +463,8 @@ class SystemInfo(object):
self._search_path.append(util.normalize_path(dir))
def _query_desktop_dir(self):
home_dir = self.get_home_dir()
# MSYS has its own environment but Desktop comes from the native windows home.
home_dir = self.get_home_dir(native=True)
desktop_dir = os.path.join(home_dir, 'Desktop')
if os.path.exists(desktop_dir):
self._desktop_dir = desktop_dir
......
......@@ -60,6 +60,8 @@ function( bb_dump_cmake_system_info )
message( STATUS "CMAKE_PROGRAM_PATH: ${CMAKE_PROGRAM_PATH}" )
message( STATUS "CMAKE_SYSTEM_PROGRAM_PATH: ${CMAKE_SYSTEM_PROGRAM_PATH}" )
message( STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}" )
message( STATUS "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}" )
if( CMAKE_CXX_COMPILER_LOADED )
message( STATUS "CMAKE_CXX_COMPILER_LOADED: on" )
endif()
......@@ -73,6 +75,7 @@ function( bb_dump_cmake_system_info )
message( STATUS "CMAKE_CXX_COMPILER_ARCHITECTURE_ID: ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" )
endif()
if( MSVC )
message( STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}" )
message( STATUS "CMAKE_VS_PLATFORM_NAME: ${CMAKE_VS_PLATFORM_NAME}" )
message( STATUS "CMAKE_VS_PLATFORM_TOOLSET: ${CMAKE_VS_PLATFORM_TOOLSET}" )
message( STATUS "MSVC_VERSION: ${MSVC_VERSION}" )
......@@ -119,6 +122,10 @@ endfunction( bb_dump_cmake_system_info )
function( bb_dump_target_properties target_ prop1_ )
if( NOT TARGET ${target_} )
message( WARNING "target ${target_} does not exist." )
return()
endif()
set( _prop_list ${prop1_} )
list( APPEND _prop_list ${ARGN} )
list( LENGTH _prop_list _prop_list_len )
......@@ -126,9 +133,12 @@ function( bb_dump_target_properties target_ prop1_ )
foreach( _prop ${_prop_list} )
get_target_property( _prop_value ${target_} ${_prop} )
if( _prop_value )
message( STATUS "bb_dump_target_properties: ${target_}: ${_prop}=${_prop_value}" )
message( STATUS "${target_}: ${_prop}=${_prop_value}" )
endif()
endforeach()
message( STATUS "bb_dump_target_properties: leaving" )
endfunction()
macro( bb_dump_imported_target_properties target_ )
bb_dump_target_properties( ${target_} IMPORTED_LOCATION IMPORTED_IMPLIB INTERFACE_INCLUDE_DIRECTORIES INTERFACE_COMPILE_DEFINITIONS INTERFACE_LINK_LIBRARIES )
endmacro()
......@@ -5,9 +5,9 @@
#
set( BBuildEnv_VERSION_MAJOR 3 )
set( BBuildEnv_VERSION_MINOR 13 )
set( BBuildEnv_VERSION_PATCH 0 )
set( BBuildEnv_VERSION_TWEAK 2 )
set( BBuildEnv_VERSION_MINOR 14 )
set( BBuildEnv_VERSION_PATCH 4 )
set( BBuildEnv_VERSION_TWEAK 4 )
# BBuildEnv version in decimal dotted format as supported by CMake's version compare operations.
set( BBuildEnv_VERSION "${BBuildEnv_VERSION_MAJOR}.${BBuildEnv_VERSION_MINOR}.${BBuildEnv_VERSION_PATCH}.${BBuildEnv_VERSION_TWEAK}" )
......@@ -19,7 +19,12 @@ list( APPEND CMAKE_FIND_ROOT_PATH ${ARM_LINUX_SYSROOT} )
# search headers and libraries in the target environment, search
# programs in the host environment
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
# Ubuntu/amd64 + foreign architecture arm64
set( CMAKE_LIBRARY_PATH /usr/lib/${GNU_MACHINE}-linux-gnu )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH )
#set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
set( USE_OPENCV_TOOLCHAIN_FLAGS ON )
......
No preview for this file type
......@@ -184,7 +184,6 @@ fontsize=\footnotesize}
\email{frank@bossentech.com}
\and
David Flynn
\email{dflynn@blackberry.com}
\and
Xiang Li
\email{xlxiangli@tencent.com}
......@@ -206,7 +205,7 @@ fontsize=\footnotesize}
\maketitle
\begin{abstract}
This document is a user manual describing usage of the VTM reference software
for the VVC project. It applies to version 5.2 of the software.
for the VVC project. It applies to version 6.2 of the software.
\end{abstract}
\tableofcontents
......@@ -854,10 +853,41 @@ Enables harmonization of Gop first field couple.
\Option{AccessUnitDelimiter} &
%\ShortOption{\None} &
\Default{0} &
\Default{1} &
Add Access Unit Delimiter NAL units between all Access Units.
\\
\Option{ScalingRatioHor} &
%\ShortOption{\None} &
\Default{1.0} &
Scaling ratio in horizontal direction for reference picture resampling.
\\
\Option{ScalingRatioVer} &
%\ShortOption{\None} &
\Default{1.0} &
Scaling ratio in vertical direction for reference picture resampling.
\\
\Option{FractionNumFrames} &
%\ShortOption{\None} &
\Default{1.0} &
Encode a fraction of the specified in FramesToBeEncoded frames.
\\
\Option{SwitchPocPeriod} &
%\ShortOption{\None} &
\Default{0} &
POC period at which resolution is changed.
\\
\Option{UpscaledOutput} &
%\ShortOption{\None} &
\Default{0} &
Picture output options: output upscaled (2), decoded but in full resolution buffer (1) or decoded cropped (0, default) picture for reference picture resampling.
\\
\end{OptionTableNoShorthand}
%%
......@@ -1052,6 +1082,13 @@ picture.
\end{tabular}
\\
\Option{DRAPPeriod} &
%\ShortOption{\None} &
\Default{0} &
Specifies the DRAP period in frames.
Dependent RAP indication SEI messages are disabled if DRAPPeriod is 0.
\\
\Option{GOPSize (-g)} &
%\ShortOption{-g} &
\Default{1} &
......@@ -1165,6 +1202,12 @@ Specifies the maximum number of merge candidates to use.
Specifies the maximum number of triangle merge candidates to use.
\\
\Option{MaxNumIBCMergeCand} &
%\ShortOption{\None} &
\Default{6} &
Specifies the maximum number of IBC merge candidates to use.
\\
\Option{DisableIntraInInter} &
%\ShortOption{\None} &
\Default{0} &
......@@ -1286,6 +1329,19 @@ Enabling this parameter can reduce the visibility of CU boundaries in the coded
\end{tabular}
\\
\Option{FastLocalDualTreeMode} &
%\ShortOption{\None} &
\Default{0} &
Controls intra coding speedup introducted with local dual tree mode.
\par
\begin{tabular}{cp{0.45\textwidth}}
0 & Disabled\\
1 & Stop testing intra modes in inter slices, if best cost is more that 1.5 times inter cost.\\
2 & Test only one intra mode in inter slices\\
\end{tabular}
\\
\end{OptionTableNoShorthand}
%%
......@@ -1334,6 +1390,62 @@ $\lambda = \lambda_{base} \times max(2, min(4, (sliceQP-12)/6))$
In addition, independent on the IntraQPFactor, if HadamardME=false, then for an inter slice the final $\lambda$ is scaled by a factor of $0.95$.
\\
\Option{UseIdentityTableForNon420Chroma}&
\Default{1}&
Specifies whether identity chroma QP mapping tables are used for 4:2:2 and 4:4:4 content. When set to 1, the identity chroma QP mapping table is used for all the three chroma components for 4:2:2 or 4:4:4 content. When set to 0, chroma QP
mapping table may be specified by other parameters in the configuration.
\\
\Option{SameCQPTablesForAllChroma}&
\Default{1}&
Specifies that the Cb, Cr and joint Cb-Cr components all use the same
chroma mapping table. When set to 1, the values of QpInValCr,
QpOutValCr, QpInValCbCr and QpOutValCbCr are ignored. When set to 0, all
Cb, Cr and joint Cb-Cr components may have different chroma QP mapping tables specified in the configuration file. Note that
SameCQPTablesForAllChroma is ignored when UseIdentityTableForNon420Chroma is set to 1 for 4:2:2 and 4:4:4 content.
\\
\Option{QpInValCb}%
\Option{QpOutValCb}&
\Default{\NotSet} &
Specifies the input and coordinates of the pivot points used to specify the chroma QP mapping tables for the Cb component. Default values are as follows:
\par
\begin{tabular}{cp{0.45\textwidth}}
QpInValCb & 25, 33, 43 \\
QpOutValCb & 25, 32, 37 \\
\end{tabular}
The values specify the pivot points for the chroma QP mapping table, the unspecified QP values are interpolated from the remaining values. E.g., the default values above specify that the pivot points for the chroma QP mapping table for the Cb component are (25, 25), (33, 32), (43, 37).
Note that that QpInValCr and QpOutValCr are ignored when UseIdentityTableForNon420Chroma is set to 1 for 4:2:2 and 4:4:4 content.
\\
\Option{QpInValCr}%
\Option{QpOutValCr}&
\Default{\NotSet} &
Specifies the input and coordinates of the pivot points used to specify the chroma QP mapping tables for the Cr component. Default values are as follows:
\par
\begin{tabular}{cp{0.45\textwidth}}
QpInValCr & 0 \\
QpOutValCr & 0 \\
\end{tabular}
The default values specify a pivot point of (0,0) which corresponds to an identity chroma QP mapping table. Note that that QpInValCr and QpOutValCr are ignored
when SameCQPTablesForAllChroma is set to 1 or when UseIdentityTableForNon420Chroma is set to 1 for 4:2:2 and 4:4:4 content.
\\
\Option{QpInValCbCr}%
\Option{QpOutValCbCr}&
\Default{\NotSet} &
Specifies the input and coordinates of the pivot points used to specify the chroma QP mapping tables for the joint Cb-Cr component. Default values are as follows:
\par
\begin{tabular}{cp{0.45\textwidth}}
QpInValrCr & 0 \\
QpOutValCbCr & 0 \\
\end{tabular}
The default values specify a pivot point of (0,0) which corresponds to a identity chroma QP mapping table. Note that that QpInValCbCr and QpOutVaCblCr are ignored
when SameCQPTablesForAllChroma is set to 1 or when UseIdentityTableForNon420Chroma is set to 1 for 4:2:2 and 4:4:4 content.
\\
\Option{CbQpOffset (-cbqpofs)}%
\Option{CrQpOffset (-crqpofs)} &
%\ShortOption{-cbqpofs}%
......@@ -1649,6 +1761,13 @@ Controls the mode used to determine per row and column tile sizes.
\end{tabular}
\\
\Option{UniformTileColsWidthMinus1}%
\Option{UniformTileRowHeightMinus1} &
%\ShortOption{\None} &
\Default{-1} &
Specifies the tile width and height to use if TileUniformSpacing is set to 1.
\\
\Option{NumTileColumnsMinus1}%
\Option{NumTileRowsMinus1} &
%\ShortOption{\None} &
......@@ -1822,6 +1941,12 @@ Enables or disables reduced testing of non-DCT-II transforms if ISP is likely to
This option has no effect if either ISP or MTS are disabled.
\\
\Option{JointCbCr} &
%\ShortOption{\None} &
\Default{false} &
Enables or disables the joint coding of chroma residuals.
\\
\Option{SAO} &
%\ShortOption{\None} &
\Default{true} &
......@@ -2018,6 +2143,34 @@ Controls the temporal motion vector prediction mode.
\end{tabular}
\\
\Option{PPSorSliceMode} &
%\ShortOption{\None} &
\Default{0} &
Enables signaling the below parameters either in PPS or for each slice according to the following preset modes:
\par
\begin{tabular}{cp{0.45\textwidth}}
0 & Always signaled per slice. \\
1 & RA settings. \\
2 & LDB settings. \\
3 & LDP settings. \\
\end{tabular}
\par
\begin{tabular}{p{5cm}llll}
& & & & \\
Parameter & \multicolumn{3}{l}{Mode} \\
& 0 & 1 & 2 & 3 \\
dep_quant_enabled_flag & s & p & p & p \\
ref_pic_list_sps_flag0 & s & s & p & p \\
ref_pic_list_sps_flag1 & s & s & p & p \\
temporal_mvp_enabled_flag & s & s & p & p \\
mvd_l1_zero_flag & s & s & p & s \\
collocated_from_l0_flag & s & s & p & s \\
six_minus_max_num_merge_cand & s & p & p & p \\
five_minus_max_num_subblock_merge_cand & s & p & p & p \\
max_num_merge_cand_minus_max_num_triangle_cand & s & p & p & s \\
\end{tabular}
\\
\Option{TransformSkip} &
%\ShortOption{\None} &
\Default{false} &
......@@ -2061,10 +2214,10 @@ Value shall be in the range 1..8.
Enables or disables symmetric MVD mode.
\\
\Option{RDPCM} &
\Option{BDPCM} &
%\ShortOption{\None} &
\Default{false} &
Enables or disables RDPCM coding mode.
Enables or disables the use of intra block differential pulse code modulation mode.
\\
\Option{LFNST} &
......@@ -2454,10 +2607,6 @@ Specifies the shift to apply to the SAO parameters. If negative, an estimate wil
Specifies the maximum TU size for which transform-skip can be used; the minimum value is 2. Version 1 and some Version 2 (RExt) profiles require this to be 2.
\\
\Option{BDPCM} &
\Default{false} &
When true, specifies the use of the BDPCM tool (for intra). Version 1 and some Version 2 (RExt) profiles require this to be false.
\\
\Option{ImplicitResidualDPCM} &
\Default{false} &
......@@ -3354,6 +3503,11 @@ Specifies the colour space conversion to apply to 444 video. Permitted values ar
If no value is specified, no colour space conversion is applied. The list may eventually also include RGB to YCbCr or YCgCo conversions.\\
\\
\Option{PYUV} &
\Default{false} &
When true, output 10-bit and 12-bit YUV data as 5-byte and 3-byte (respectively) packed YUV data. See doc/pyuv_format.pdf for details. Ignored for interlaced output.
\\
\Option{SEINoDisplay} &
\Default{false} &
When true, do not output frames for which there is an SEI NoDisplay message.
......
......@@ -153,6 +153,13 @@ uint32_t DecApp::decode()
{
read(nalu);
if(m_cDecLib.getFirstSliceInPicture() &&
(nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL ||
nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP))
{
xFlushOutput(pcListPic);
}
if ((m_iMaxTemporalLayer >= 0 && nalu.m_temporalId > m_iMaxTemporalLayer) || !isNaluWithinTargetDecLayerIdSet(&nalu) || !isNaluTheTargetLayer(&nalu))
{
bNewPicture = false;
......@@ -162,6 +169,11 @@ uint32_t DecApp::decode()
bNewPicture = m_cDecLib.decode(nalu, m_iSkipFrame, m_iPOCLastDisplay);
if (bNewPicture)
{
// check if new picture was detected at an access unit delimiter NALU
if(nalu.m_nalUnitType != NAL_UNIT_ACCESS_UNIT_DELIMITER)
{
msg( ERROR, "Error: New picture detected without access unit delimiter. VVC requires the presence of access unit delimiters.\n");
}
bitstreamFile.clear();
/* location points to the current nalunit payload[1] due to the
* need for the annexB parser to read three extra bytes.
......@@ -230,17 +242,6 @@ uint32_t DecApp::decode()
{
xWriteOutput( pcListPic, nalu.m_temporalId );
}
if ( (bNewPicture || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA) && m_cDecLib.getNoOutputPriorPicsFlag() )
{
m_cDecLib.checkNoOutputPriorPics( pcListPic );
m_cDecLib.setNoOutputPriorPicsFlag (false);
}
if ( bNewPicture &&
( nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
|| nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP) )
{
xFlushOutput( pcListPic );
}
if (nalu.m_nalUnitType == NAL_UNIT_EOS)
{
xWriteOutput( pcListPic, nalu.m_temporalId );
......@@ -248,7 +249,7 @@ uint32_t DecApp::decode()
}
// write reconstruction to file -- for additional bumping as defined in C.5.2.3
if (!bNewPicture && ((nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_TRAIL && nalu.m_nalUnitType <= NAL_UNIT_RESERVED_VCL_15)
|| (nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && nalu.m_nalUnitType <= NAL_UNIT_CODED_SLICE_GRA)))
|| (nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && nalu.m_nalUnitType <= NAL_UNIT_CODED_SLICE_GDR)))
{
xWriteOutput( pcListPic, nalu.m_temporalId );
}
......@@ -389,10 +390,11 @@ void DecApp::xWriteOutput( PicList* pcListPic, uint32_t tId )
numPicsNotYetDisplayed = numPicsNotYetDisplayed-2;
if ( !m_reconFileName.empty() )
{
const Window &conf = pcPicTop->cs->sps->getConformanceWindow();
const Window &conf = pcPicTop->cs->pps->getConformanceWindow();
const bool isTff = pcPicTop->topField;
bool display = true;
#if HEVC_SEI
if( m_decodedNoDisplaySEIEnabled )
{
SEIMessages noDisplay = getSeisByType( pcPic->SEIs, SEI::NO_DISPLAY );
......@@ -402,16 +404,17 @@ void DecApp::xWriteOutput( PicList* pcListPic, uint32_t tId )
display = false;
}
}
#endif
if (display)
{
m_cVideoIOYuvReconFile.write( pcPicTop->getRecoBuf(), pcPicBottom->getRecoBuf(),
m_outputColourSpaceConvert,
false, // TODO: m_packedYUVMode,
conf.getWindowLeftOffset(),
conf.getWindowRightOffset(),
conf.getWindowTopOffset(),
conf.getWindowBottomOffset(),
conf.getWindowLeftOffset() * SPS::getWinUnitX( pcPicTop->cs->sps->getChromaFormatIdc() ),
conf.getWindowRightOffset() * SPS::getWinUnitX( pcPicTop->cs->sps->getChromaFormatIdc() ),
conf.getWindowTopOffset() * SPS::getWinUnitY( pcPicTop->cs->sps->getChromaFormatIdc() ),
conf.getWindowBottomOffset() * SPS::getWinUnitY( pcPicTop->cs->sps->getChromaFormatIdc() ),
NUM_CHROMA_FORMAT, isTff );
}
}
......@@ -454,23 +457,30 @@ void DecApp::xWriteOutput( PicList* pcListPic, uint32_t tId )
if (!m_reconFileName.empty())
{
const Window &conf = pcPic->cs->sps->getConformanceWindow();
m_cVideoIOYuvReconFile.write( pcPic->getRecoBuf(),
const Window &conf = pcPic->cs->pps->getConformanceWindow();
const SPS* sps = pcPic->cs->sps;
ChromaFormat chromaFormatIDC = sps->getChromaFormatIdc();
if( m_upscaledOutput )
{
m_cVideoIOYuvReconFile.writeUpscaledPicture( *sps, *pcPic->cs->pps, pcPic->getRecoBuf(), m_outputColourSpaceConvert, m_packedYUVMode, m_upscaledOutput, NUM_CHROMA_FORMAT, m_bClipOutputVideoToRec709Range );
}