Skip to content
Snippets Groups Projects
software-manual.tex 225 KiB
Newer Older
\documentclass[a4paper,11pt]{jvetdoc}
Yan Zhang's avatar
Yan Zhang committed

\usepackage{geometry}[2010/02/12]

\usepackage{hyperref}
\hypersetup{colorlinks=true,
            linkcolor=black,      % color of internal links (change box color with linkbordercolor)
            citecolor=black,      % color of links to bibliography
            filecolor=black,      % color of file links
            urlcolor=blue}
\usepackage{color,soul}

\usepackage[position=bottom]{subfig}
\captionsetup[subfloat]{position=top}
\usepackage{multirow}
\usepackage{dcolumn}
\newcolumntype{.}{D{.}{.}{-1}}
\usepackage{colortbl}
\usepackage{makecell}
\usepackage{longtable}
\usepackage{array}
\usepackage{algorithm2e}
\usepackage{amsmath}

\urlstyle{same}

% code highlighting
\usepackage{minted,xcolor}
\definecolor{bggray}{gray}{0.95}
\setminted{
bgcolor=bggray,
xleftmargin=3ex,
breaklines=true,
fontsize=\footnotesize}


\usepackage[strings]{underscore}
\usepackage{csquotes}
\MakeOuterQuote{"}
\EnableQuotes

\newcommand\None{}
\newcommand\NotSet{}
\makeatletter
\newcommand{\Option}[1]{\ifx\optOption\@empty\gdef\optOption{#1}\else\g@addto@macro\optOption{ \\ #1}\fi}
\newcommand{\ShortOption}[1]{\ifx\optShortOption\@empty\gdef\optShortOption{#1}\else\g@addto@macro\optShortOption{ \\ #1}\fi}
\newcommand{\Default}[1]{\ifx\optDefault\@empty\gdef\optDefault{#1}\else\g@addto@macro\optDefault{ \\ #1}\fi}
\newcommand{\clearOptions}{\gdef\optOption{}\gdef\optShortOption{}\gdef\optDefault{}}
\makeatother
\newenvironment{OptionTable}[1]{%
	\footnotesize
	\def\arraystretch{1.8}
	\clearOptions
	\begin{longtable}{l<{\makecell[tl]{\optOption}}%
	                  >{\texttt\bgroup}l<{\makecell[tl]{\optShortOption}\egroup}%
	                  c<{\makecell[tc]{\optDefault}}%
	                  >{\def\arraystretch{1.0}}p{0.5\textwidth}<{\clearOptions}}
	\caption{#1} \\
	\hspace*{12em}&&\hspace*{8em}&\kill
	\hline
	 \thead{Option} &
	 \egroup\thead{Shorthand}\bgroup &
	 \thead{Default} &
	 \thead{Description} \\
	\hline
	\endfirsthead
	\caption[]{#1 (Continued)} \\
	\hspace*{12em}&&\hspace*{8em}&\kill
	\hline
	 \thead{Option} &
	 \egroup\thead{Shorthand}\bgroup &
	 \thead{Default} &
	 \thead{Description} \\
	\hline
	\endhead
	 \multicolumn{4}{r}{Continued...}\\
	 \hline
	\endfoot
	 \hline
	\endlastfoot
}{%
	\hline
	\end{longtable}
}

\newenvironment{OptionTableNoShorthand}[2]{%
	\scriptsize
	\def\arraystretch{1.8}
	\clearOptions
	\begin{longtable}{l<{\makecell[tl]{\optOption}}%
	                  c<{\makecell[tc]{\optDefault}}%
	                  >{\def\arraystretch{1.0}}p{0.5\textwidth}<{\clearOptions}}
	\caption{#1} \label{#2} \\
	\hspace*{12em}&\hspace*{8em}&\kill
	\hline
	 \thead{Option} &
	 \thead{Default} &
	 \thead{Description} \\
	\hline
	\endfirsthead
	\caption[]{#1 (Continued)} \\
	\hspace*{12em}&\hspace*{8em}&\kill
	\hline
	 \thead{Option} &
	 \thead{Default} &
	 \thead{Description} \\
	\hline
	\endhead
	 \multicolumn{3}{r}{Continued...}\\
	 \hline
	\endfoot
	 \hline
	\endlastfoot
}{%
	\hline
	\end{longtable}
}

\newenvironment{SEIListTable}[1]{%
	\scriptsize
	\def\arraystretch{1.8}
	\clearOptions
	\begin{longtable}{c<{\makecell[tl]{\optOption}}%
	                  l<{\makecell[tc]{\optDefault}}%
	                  >{\def\arraystretch{1.0}}p{0.3\textwidth}<{\clearOptions}}
	\caption{#1} \\
	\hspace*{12em}&\hspace*{8em}&\kill
	\hline
	 \thead{SEI Number} &
	 \thead{SEI Name} &
	 \thead{Table number of encoder controls, if available} \\
	\hline
	\endfirsthead
	\caption[]{#1 (Continued)} \\
	\hspace*{12em}&\hspace*{8em}&\kill
	\hline
	 \thead{SEI Number} &
	 \thead{SEI Name} &
	 \thead{Table number of encoder controls, if available} \\
	\hline
	\endhead
	 \multicolumn{3}{r}{Continued...}\\
	 \hline
	\endfoot
	 \hline
	\endlastfoot
}{%
	\hline
	\end{longtable}
}

\newenvironment{MacroTable}[1]{%
	\scriptsize
	\def\arraystretch{1.3}
	\clearOptions
	\begin{longtable}{lcp{0.5\textwidth}}
	 \caption{#1} \\
	%\hspace*{12em}&&\hspace*{8em}&\kill
	 \hline
	  \thead{Option} &
	  \thead{Default} &
	  \thead{Description} \\
	 \hline
	\endfirsthead
	 \caption[]{#1 (Continued)} \\
	 \hline
	  \thead{Option} &
	  \thead{Default} &
	  \thead{Description} \\
	 \hline
	\endhead
	 \multicolumn{3}{r}{Continued...}\\
	 \hline
	\endfoot
	 \hline
	\endlastfoot
}{%
	\end{longtable}
}

\title{VTM Software Manual}
\author{%
	Frank Bossen
	\email{frank@bossentech.com}
	\and
	David Flynn
	\and
	Xiang Li
	\email{xlxiangli@google.com}
Yan Zhang's avatar
Yan Zhang committed
	\and
	Karl Sharman
	\email{karl.sharman@eu.sony.com}
	\and
	Karsten S\"uhring
	\email{karsten.suehring@hhi.fraunhofer.de}
}

\jvetmeeting{}
\jvetdocnum{Software Manual}
\jvetdocstatus{Software AHG working document}
Yan Zhang's avatar
Yan Zhang committed
\jvetdocpurpose{Information}
\jvetdocsource{AHG chairs}

\begin{document}
\maketitle
\begin{abstract}
This document is a user manual describing usage of the VTM reference software
for the VVC project. It applies to version 19.1 of the software.
Yan Zhang's avatar
Yan Zhang committed
\end{abstract}

\tableofcontents
\listoftables


\section{General Information}
Reference software is being made available to provide a reference
implementation of the HEVC standard being developed by the Joint 
Video Experts Team (JVET) regrouping experts from
ITU-T SG 16 and ISO/IEC SC29 WG5. One of the main goals of the
Yan Zhang's avatar
Yan Zhang committed
reference software is to provide a basis upon which to conduct
experiments in order to determine which coding tools provide desired
coding performance. It is not meant to be a particularly efficient
implementation of anything, and one may notice its apparent
unsuitability for a particular use. It should not be construed to be a
reflection of how complex a production-quality implementation of a
future VVC standard would be.

This document aims to provide guidance on the usage of the reference
software. It is widely suspected to be incomplete and suggestions for
improvements are welcome. Such suggestions and general inquiries may be
sent to the general JVET email reflector on
\url{https://lists.rwth-aachen.de/postorius/lists/jvet.lists.rwth-aachen.de/} 
(registration required).

\subsection*{Bug reporting}
Bugs should be reported on the issue tracker set up at:

\url{https://jvet.hhi.fraunhofer.de/trac/vvc/}

\section{Installation and compilation}
The software may be retrieved from the GitLab server located at:

\url{https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM}

Table~\ref{tab:project-files} lists the compiler environments and versions 
for which building the software is tested.

Note that the software makes use of C++14 language features, which may not
Yan Zhang's avatar
Yan Zhang committed
be available in older compilers.

\begin{table}[ht]
\caption{Supported compilers}
\label{tab:project-files}
\centering
\begin{tabular}{ll}
\hline
 \thead{Compiler environment} &
 \thead{Versions} \\
\hline
MS Visual Studio  & 2017 and 2019 \\
GCC               & 7.3, 8.3 and 9.3\\
Yan Zhang's avatar
Yan Zhang committed
Xcode/clang       & latest \\
\hline
\end{tabular}
\end{table}

By default the software is built as 64-bit binaries to be used on a 64-bit OS. 
This allows the software to use more than 2GB of RAM.

The software uses CMake to create platform-specific build files. 

\subsection {Build instructions for plain CMake (suggested)}

\textbf{Note:} A working CMake installation is required for building the software.

CMake generates configuration files for the compiler environment/development
environment on each platform. The following is a list of examples for Windows
(MS Visual Studio), macOS (Xcode) and Linux (make).

Open a command prompt on your system and change into the root directory
of this project.

Create a build directory in the root directory:
\begin{minted}{bash}
mkdir build 
\end{minted}
Use one of the following CMake commands, based on your platform. Feel free to change the 
commands to satisfy your needs.

\textbf{Windows Visual Studio 2015 64 Bit:}
\begin{minted}{bash}
cd build
cmake .. -G "Visual Studio 14 2015 Win64"
\end{minted}
Then open the generated solution file in MS Visual Studio.

\textbf{macOS Xcode:}
\begin{minted}{bash}
cd build
cmake .. -G "Xcode"
\end{minted}
Then open the generated work space in Xcode.

\textbf{Linux}

For generating Linux Release Makefile:
\begin{minted}{bash}
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
\end{minted}
For generating Linux Debug Makefile:
\begin{minted}{bash}
cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug
\end{minted}
Then type
\begin{minted}{bash}
make -j
\end{minted}
to build the software.

For more details, refer to the CMake documentation: \url{https://cmake.org/cmake/help/latest/}

\subsection {Build instructions for make}

\textbf{Note:}
The build instructions in this section require the make tool and Python
to be installed, which are part of usual Linux and macOS environments. 
See section \ref{windowsinstall} for installation instruction for Python 
and GnuWin32 on Windows.

Open a command prompt on your system and change into the root directory
of this project.

To use the default system compiler simply call:
\begin{minted}{bash}
make all
\end{minted}
For MSYS2 and MinGW:
Open an MSYS MinGW 64-Bit terminal and change into the root directory
of this project.

Call:
\begin{minted}{bash}
make all toolset=gcc
\end{minted}

\subsection{Tool Installation on Windows}
\label{windowsinstall}

Download CMake: \url{http://www.cmake.org/} and install it.

Python and GnuWin32 are not mandatory, but they simplify the build process for the user.

\begin{table}[ht]
\footnotesize
\centering
\begin{tabular}{ll}
\hline
Python     &    \url{https://www.python.org/downloads/release/python-371/} \\
GnuWin32   &    \url{https://sourceforge.net/projects/getgnuwin32/files/getgnuwin32/0.6.30/GetGnuWin32-0.6.3.exe/download} \\
\hline
\end{tabular}
\end{table}

To use MinGW, install MSYS2:
\url{http://repo.msys2.org/distrib/msys2-x86_64-latest.exe}

Installation instructions:
\url{https://www.msys2.org/}

Install the needed toolchains:
\begin{minted}{bash}
pacman -S --needed base-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain git subversion mingw-w64-i686-cmake mingw-w64-x86_64-cmake
\end{minted}

%%%%
%%%%
%%%%
\section{Using the encoder}

\begin{minted}{bash}
EncoderApp [--help] [-li -c config.cfg] [-li --parameter=value]
Yan Zhang's avatar
Yan Zhang committed
\end{minted}

\begin{table}[ht]
\footnotesize
\centering
\begin{tabular}{lp{0.5\textwidth}}
\hline
 \thead{Option} &
 \thead{Description} \\
\hline
\texttt{--help} & Prints parameter usage. \\
\texttt{-li} & Applies to its next config file or command line parameter only to define  i-th layer encoding option. If empty, the configuration file applies to all layers\\
Yan Zhang's avatar
Yan Zhang committed
\texttt{-c} & Defines configuration file to use.  Multiple configuration files
     may be used with repeated --c options. \\
\texttt{--}\emph{parameter}\texttt{=}\emph{value}
    & Assigns value to a given parameter as further described below.
      Some parameters are also supported by shorthand
      "--\em{opt}~\emph{value}". These are shown in brackets after the parameter
      name in the tables of this document\\
\hline
\end{tabular}
\end{table}

Sample configuration files are provided in the cfg/ folder.
Parameters are defined by the last value encountered on the command line.
Therefore if a setting is set via a configuration file, and then a subsequent
command line parameter changes that same setting, the command line parameter
value will be used.

\subsection{GOP structure table}
\label{sec:gop-structure}
Defines the cyclic GOP structure that will be used repeatedly
throughout the sequence. The table should contain GOPSize lines,
named Frame1, Frame2, etc. The frames are listed in decoding
order, so Frame1 is the first frame in decoding order, Frame2 is
the second and so on. Among other things, the table specifies all
reference pictures kept by the decoder for each frame. This
includes pictures that are used for reference for the current
picture as well as pictures that will be used for reference in
the future. The encoder will not automatically calculate which
pictures have to be kept for future references, they must
be specified. Note that some specified reference frames for
pictures encoded in the very first GOP after an IDR frame might
not be available. This is handled automatically by the encoder,
so the reference pictures can be given in the GOP structure table
as if there were infinitely many identical GOPs before the
current one. Each line in the table contains the parameters used
for the corresponding frame, separated by whitespace:

\begin{itemize}
\item[]\textbf{Type}: Slice type, can be either I, P or B.

\item[]\textbf{POC}: Display order of the frame within a GOP, ranging
from 1 to GOPSize.

\item[]\textbf{QPOffset}: QP offset is added to the QP parameter to set
the final QP value to use for this frame.

\item[]\textbf{QPOffsetModelOff}: Offset parameter to a linear model to adjust final QP based on QP + QPoffset.

\item[]\textbf{QPOffsetModelScale}: Scale parameter to a linear model to adjust final QP based on QP + QPoffset.

\item[]\textbf{SliceCbQPOffset}: The slice-level Cb QP offset.

\item[]\textbf{SliceCrQPOffset}: The slice-level Cr QP offset.

\item[]\textbf{QPFactor}: Weight used during rate distortion
optimization. Higher values mean lower quality and less bits. Typical
range is between
0.3 and 1.

\item[]\textbf{tcOffsetDiv2}: An in-loop deblocking filter parameter for luma component, tcOffsetDiv2 
is added to the base parameter DeblockingFilterTcOffset_div2 to set the final tc_offset_div2 
Yan Zhang's avatar
Yan Zhang committed
parameter for this picture signalled in the slice segment header. The final 
value of tc_offset_div2 shall be an integer number in the range $-12..12$.
Yan Zhang's avatar
Yan Zhang committed

\item[]\textbf{betaOffsetDiv2}: An in-loop deblocking filter parameter for luma component, betaOffsetDiv2 
is added to the base parameter DeblockingFilterBetaOffset_div2 to set the final beta_offset_div2 
Yan Zhang's avatar
Yan Zhang committed
parameter for this picture signalled in the slice segment header. The final 
value of beta_offset_div2 shall be an integer number in the range $-12..12$.

\item[]\textbf{CbTcOffsetDiv2}: An in-loop deblocking filter parameter for Cb component, CbTcOffsetDiv2 
is added to the base parameter DeblockingFilterCbTcOffset_div2 to set the final tc_offset_div2 
parameter for this picture signalled in the slice segment header. The final 
value of tc_offset_div2 shall be an integer number in the range $-12..12$.

\item[]\textbf{CbBetaOffsetDiv2}: An in-loop deblocking filter parameter for Cb component, CbBetaOffsetDiv2 
is added to the base parameter DeblockingFilterCbBetaOffset_div2 to set the final beta_offset_div2 
parameter for this picture signalled in the slice segment header. The final 
value of beta_offset_div2 shall be an integer number in the range $-12..12$.

\item[]\textbf{CrTcOffsetDiv2}: An in-loop deblocking filter parameter for Cr component, CrTcOffsetDiv2 
is added to the base parameter DeblockingFilterCrTcOffset_div2 to set the final tc_offset_div2 
parameter for this picture signalled in the slice segment header. The final 
value of tc_offset_div2 shall be an integer number in the range $-12..12$.

\item[]\textbf{CrBetaOffsetDiv2}: An in-loop deblocking filter parameter for Cr component, CrBetaOffsetDiv2 
is added to the base parameter DeblockingFilterCrBetaOffset_div2 to set the final beta_offset_div2 
parameter for this picture signalled in the slice segment header. The final 
value of beta_offset_div2 shall be an integer number in the range $-12..12$.
Yan Zhang's avatar
Yan Zhang committed

\item[]\textbf{temporal_id}: Temporal layer of the frame. A frame cannot
predict from a frame with a higher temporal id. If a frame with higher
temporal IDs is listed among a frame's reference pictures, it is
not used, but is kept for possible use in future frames.

\item[]\textbf{num_ref_pics_active_L0}: Number of reference pictures in lists L0
that are used during coding.

\item[]\textbf{num_ref_pics_L0}: Size of reference picture list L0.
This includes pictures that are used for reference for the
current picture as well as pictures that will be used for reference in
the future.

\item[]\textbf{reference_pictures_L0}: A space-separated list of
num_ref_pics integers, specifying the POC of the reference pictures
kept, relative the POC of the current frame. The picture list shall be
ordered as their intendend order in the L0.
Note that any pictures not supplied in this list and in the list of L1 will be discarded and
therefore not available as reference pictures later.

\item[]\textbf{num_ref_pics_active_L1}: Number of reference pictures in lists L1
that are used during coding.

\item[]\textbf{num_ref_pics_L1}: Size of reference picture list L1.
This includes pictures that are used for reference for the
current picture as well as pictures that will be used for reference in
the future.

\item[]\textbf{reference_pictures_L1}: A space-separated list of
num_ref_pics integers, specifying the POC of the reference pictures
kept, relative the POC of the current frame. The picture list shall be
ordered as their intendend order in the L1.
Note that any pictures not supplied in this list and in the list of L0 will be discarded and
therefore not available as reference pictures later.

For example, consider the coding structure of Figure~\ref{fig:gop-example}.
This coding structure is of size 4. The pictures are listed in decoding
order. Frame1 shall therefore describe picture with $\textrm{POC}=4$. It
references picture 0, and therefore has 4 as a reference picture.
Similarly, Frame2 has a POC of 2, and since it references pictures 0 and
4, its reference pictures are listed as \verb|2 -2|. Frame3 is a special
case: even though it only references pictures with POC 0 and 2, it also
needs to include the picture with POC 4, which must be kept in order to
be used as a reference picture in the future. Note that picture with POC 4 can be
included in the L0 or L1. The reference picture list for Frame3 therefore becomes \verb|1 -1 -3|. 
Frame4 has a POC of 3 and its list of reference pictures is \verb|1 -1|.
\end{itemize}

\begin{figure}[h]
\caption{A GOP structure}
\label{fig:gop-example}
\centering
\includegraphics[width=0.7\textwidth]{figures/gop-structure-example}
\end{figure}

In order to specify this to the encoder, the parameters in
Table~\ref{tab:gop-example} could be used.

\begin{table}[ht]
\footnotesize
\caption{GOP structure example}
\label{tab:gop-example}
\centering
\begin{tabular}{lrrrr}
\hline
 \thead{} &
 \thead{Frame1} &
 \thead{Frame2} &
 \thead{Frame3} &
 \thead{Frame4} \\
\hline
Type                   &   P  &    B   &         B   &       B \\
POC                    &   4  &    2   &         1   &       3 \\
QPOffset               &   1  &    2   &         3   &       3 \\
QPOffsetModelOff       & 0.0  &  0.0   &       0.0   &     0.0 \\
QPOffsetModelScale     & 0.0  &  0.0   &       0.0   &     0.0 \\
SliceCbQPOffset        &   0  &    0   &         0   &       0 \\
SliceCrQPOffset        &   0  &    0   &         0   &       0 \\
QPfactor               & 0.5  &  0.5   &       0.5   &     0.5 \\
tcOffsetDiv2           &   0  &    1   &         2   &       2 \\  
betaOffsetDiv2         &   0  &    0   &         0   &       0 \\
CbTcOffsetDiv2         &   0  &    0   &         0   &       0 \\  
CbBetaOffsetDiv2       &   0  &    0   &         0   &       0 \\
CrTcOffsetDiv2         &   0  &    0   &         0   &       0 \\  
CrBetaOffsetDiv2       &   0  &    0   &         0   &       0 \\
Yan Zhang's avatar
Yan Zhang committed
temporal_id            &   0  &    1   &         2   &       2 \\
num_ref_pics_active_L0 &   1  &    1   &         1   &       1 \\
num_ref_pics_L0        &   1  &    1   &         1   &       1 \\
reference_pictures_L0  &   4  &    2   &         1   &       1 \\
num_ref_pics_active_L1 &   0  &    1   &         1   &       1 \\
num_ref_pics_L1        &   0  &    1   &         2   &       1 \\
reference_pictures_L1  &      & $-$2   & $-$1 $-$3   &    $-$1 \\
\hline
\end{tabular}
\end{table}

Here, the frames used for prediction have been given higher
quality by assigning a lower QP offset. Also, the non-reference
frames have been marked as belonging to a higher temporal layer,
to make it possible to decode only every other frame. Note: each
line should contain information for one frame, so this
configuration would be specified as:

\begin{verbatim}
Frame1: P 4 1 0 0 0.5 0 0 0 0 0 0 0 1 1  4 1 1  4
Frame2: B 2 2 0 0 0.5 1 0 0 0 0 0 1 1 1  2 1 1 -2
Frame3: B 1 3 0 0 0.5 2 0 0 0 0 0 2 1 1  1 1 2 -1 -3
Frame4: B 3 3 0 0 0.5 2 0 0 0 0 0 2 1 1  1 1 1 -1
Yan Zhang's avatar
Yan Zhang committed
\end{verbatim}




%%%%
%%%%
%%%%
\newgeometry{tmargin=1.6cm,lmargin=1cm,rmargin=1cm,bmargin=1in,nohead}
\subsection{Encoder parameters}

%%
%% File, I/O and source parameters
%%
Shorthand alternatives for the parameter that can be used on the command line are shown in brackets after the parameter name.

\begin{OptionTableNoShorthand}{File, I/O and source parameters.}{tab:fileIO}
\Option{InputFile (-i)} &
%\ShortOption{-i} &
\Default{\NotSet} &
Xiang Li's avatar
Xiang Li committed
Specifies the input video file. If the file extension is Y4M, picture width, picture height, input bitdepth, chroma format and frame rate from Y4M will override the input from cfg and command line options.
Yan Zhang's avatar
Yan Zhang committed

Video data must be in a raw 4:2:0, or 4:2:2 planar format, 4:4:4 planar format (Y$'$CbCr, RGB or GBR), or in a raw 4:0:0 format. 

Note: When the bit depth of samples is larger than 8, each sample is encoded in
2 bytes (little endian, LSB-justified).
\\

\Option{BitstreamFile (-b)} &
%\ShortOption{-b} &
\Default{\NotSet} &
Specifies the output coded bit stream file.
\\

\Option{ReconFile (-o)} &
%\ShortOption{-o} &
\Default{\NotSet} &
Xiang Li's avatar
Xiang Li committed
Specifies the output locally reconstructed video file. If more than one layer is encoded (i.e. MaxLayers > 1), a reconstructed file is written for each layer and the layer index is added as suffix to ReconFile. If one or more dots exist in the file name, the layer id is added before the last dot, e.g. 'reconst.yuv' becomes 'reconst0.yuv' for layer id 0, 'reconst' becomes 'reconst0'. If the file extension is Y4M, picture width, picture height, bitdepth, chroma format and frame rate of the current encoding will be output to the Y4M file.
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{SourceWidth (-wdt)}%
\Option{SourceHeight (-hgt)} &
%\ShortOption{-wdt}%
%\ShortOption{-hgt} &
\Default{0}%
\Default{0} &
Specifies the width and height of the input video in luma samples.
\\

\Option{InputBitDepth}
 &
%\ShortOption{\None} &
\Default{8} &
Specifies the bit depth of the input video.
\\

\Option{MSBExtendedBitDepth} &
%\ShortOption{\None} &
\Default{0} &
Extends the input video by adding MSBs of value 0. When 0, no extension is applied and the InputBitDepth is used.

The MSBExtendedBitDepth becomes the effective file InputBitDepth for subsequent processing.
\\

\Option{InternalBitDepth} &
%\ShortOption{\None} &
\Default{0} &
Specifies the bit depth used for coding. When 0, the setting defaults to the
value of the MSBExtendedBitDepth.

If the input video is a different bit depth to InternalBitDepth, it is
automatically converted by:
\begin{displaymath}
\left\lfloor
 \frac{\mathrm{Pel} * 2^{\mathrm{InternalBitDepth}}}{
     2^{\mathrm{MSBExtendedBitDepth}}}
\right\rfloor
\end{displaymath}

Note: The effect of this option is as if the input video is externally
converted to the MSBExtendedBitDepth and then to the InternalBitDepth
and then coded with this value as InputBitDepth. The codec has no
notion of different bit depths.
\\

\Option{OutputBitDepth} &
%\ShortOption{\None} &
\Default{0} &
Specifies the bit depth of the output locally reconstructed video file.
When 0, the setting defaults to the value of InternalBitDepth.
Note: This option has no effect on the decoding process.
\\

\Option{InputBitDepthC}%
\Option{MSBExtendedBitDepthC}%
\Option{OutputBitDepthC} &
%\ShortOption{\None} &
\Default{0}%
\Default{0}%
\Default{0} &
Specifies the various bit-depths for chroma components.  These only need
to be specified if non-equal luma and chroma bit-depth processing is
required. When 0, the setting defaults to the corresponding non-Chroma value.
\\

\Option{InputColourSpaceConvert} &
%\ShortOption{\None} &
\Default{\NotSet} &
The colour space conversion to apply to input video. Permitted values are:
\par
\begin{tabular}{lp{0.3\textwidth}}
  UNCHANGED & No colour space conversion is applied \\
  YCbCrToYCrCb & Swap the second and third components \\
  YCbCrtoYYY & Set the second and third components to the values in the first \\
  RGBtoGBR & Reorder the three components \\
\end{tabular}
\par
If no value is specified, no colour space conversion is applied. The list may eventually also include RGB to YCbCr or YCgCo conversions.
\\

\Option{SNRInternalColourSpace} &
%\ShortOption{\None} &
\Default{false} &
When this is set true, then no colour space conversion is applied prior to PSNR calculation, otherwise the inverse of InputColourSpaceConvert is applied.
\\

\Option{OutputInternalColourSpace} &
%\ShortOption{\None} &
\Default{false} &
When this is set true, then no colour space conversion is applied to the reconstructed video, otherwise the inverse of InputColourSpaceConvert is applied.
\\

\Option{InputChromaFormat} &
%\ShortOption{\None} &
\Default{420} &
Specifies the chroma format used in the input file. Permitted values (depending on the profile) are 400, 420, 422 or 444.
\\

\Option{ChromaFormatIDC (-cf)} &
%\ShortOption{-cf} &
\Default{0} &
Specifies the chroma format to use for processing. Permitted values (depending on the profile) are 400, 420, 422 or 444; the value of 0 indicates that the value of InputChromaFormat should be used instead.
\\

\Option{MSEBasedSequencePSNR} &
%\ShortOption{\None} &
\Default{false} &
When 0, the PSNR output is a linear average of the frame PSNRs; when 1, additional PSNRs are output which are formed from the average MSE of all the frames. The latter is useful when coding near-losslessly, where occasional frames become lossless.
\\

\Option{PrintFrameMSE} &
%\ShortOption{\None} &
\Default{false} &
When 1, the Mean Square Error (MSE) values of each frame will also be output alongside the default PSNR values.
\\

\Option{PrintSequenceMSE} &
%\ShortOption{\None} &
\Default{false} &
When 1, the Mean Square Error (MSE) values of the entire sequence will also be output alongside the default PSNR values.
\\

\Option{PrintWPSNR} &
%\ShortOption{\None} &
\Default{false} &
When 1, weighted PSNR (wPSNR) values of the entire sequence will also be output.
\\

Yan Zhang's avatar
Yan Zhang committed
\Option{SummaryOutFilename} &
%\ShortOption{\None} &
\Default{false} &
Filename to use for producing summary output file. If empty, do not produce a file.
\\

\Option{SummaryPicFilenameBase} &
%\ShortOption{\None} &
\Default{false} &
Base filename to use for producing summary picture output files. The actual filenames used will have I.txt, P.txt and B.txt appended. If empty, do not produce a file.
\\

\Option{SummaryVerboseness} &
%\ShortOption{\None} &
\Default{false} &
Specifies the level of the verboseness of the text output.
\\

\Option{CabacZeroWordPaddingEnabled} &
%\ShortOption{\None} &
\Default{false} &
When 1, CABAC zero word padding will be enabled. This is currently not the default value for the setting.
\\

\Option{ConformanceWindowMode} &
%\ShortOption{\None} &
Yan Zhang's avatar
Yan Zhang committed
Specifies how the parameters related to the conformance window are interpreted (cropping/padding).
The following modes are available:
\par
\begin{tabular}{cp{0.43\textwidth}}
0 & No cropping / padding \\
1 & Automatic padding to the next minimum CU size \\
2 & Padding according to parameters HorizontalPadding and VerticalPadding \\
3 & Cropping according to parameters ConfWinLeft, ConfWinRight, ConfWinTop and ConfWinBottom \\
\end{tabular}
\\

\Option{HorizontalPadding (-pdx)}%
\Option{VerticalPadding (-pdy)} &
%\ShortOption{-pdx}%
%\ShortOption{-pdy} &
\Default{0} &
Specifies the horizontal and vertical padding to be applied to the input
video in luma samples when ConformanceWindowMode is 2.  Must be a multiple of
the chroma resolution (e.g. a multiple of two for 4:2:0).
\\

\Option{ConfWinLeft}%
\Option{ConfWinRight}%
\Option{ConfWinTop}%
\Option{ConfWinBottom} &
%\ShortOption{\None} &
\Default{0} &
Specifies the horizontal and vertical cropping to be applied to the
Taoran Lu's avatar
Taoran Lu committed
input video in luma samples when ConformanceWindowMode is 3. 
Yan Zhang's avatar
Yan Zhang committed
Must be a multiple of the chroma resolution (e.g. a multiple of
two for 4:2:0).
\\

\Option{FrameRate (-fr)} &
%\ShortOption{-fr} &
\Default{0} &
Specifies the frame rate of the input video.

Note: This option only affects the reported bit rates.
\\

\Option{FrameSkip (-fs)} &
%\ShortOption{-fs} &
\Default{0} &
Specifies a number of frames to skip at beginning of input video file.
\\

\Option{FramesToBeEncoded (-f)} &
%\ShortOption{-f} &
\Default{0} &
Specifies the number of frames to be encoded (see note regarding TemporalSubsampleRatio). When 0, all frames are coded.
\\

\Option{TemporalSubsampleRatio (-ts)} &
%\ShortOption{-fs} &
\Default{1} &
Temporally subsamples the input video sequence. A value of $N$ will skip $(N-1)$ frames of input video after each coded input video frame. Note the FramesToBeEncoded does not account for the temporal skipping of frames, which will reduce the number of frames encoded accordingly. The reported bit rates will be reduced and VUI information is scaled so as to present the video at the correct speed. The minimum and default value is 1.
\\

\Option{FieldCoding} &
%\ShortOption{\None} &
\Default{false} &
When 1, indicates that field-based coding is to be applied.
\\

\Option{TopFieldFirst (-Tff)} &
%\ShortOption{\None} &
\Default{0} &
Indicates the order of the fields packed into the input frame. When 1, the top field is temporally first.
\\

\Option{ClipInputVideoToRec709Range} &
%\ShortOption{\None} &
\Default{0} &
If 1 then clip input video to the Rec. 709 Range on loading when InternalBitDepth is less than MSBExtendedBitDepth.
\\

\Option{ClipOutputVideoToRec709Range} &
%\ShortOption{\None} &
\Default{0} &
If 1 then clip output video to the Rec. 709 Range on saving when OutputBitDepth is less than InternalBitDepth.
\\

\Option{EfficientFieldIRAPEnabled} &
%\ShortOption{\None} &
\Default{1} &
Enable to code fields in a specific, potentially more efficient, order.
\\

\Option{HarmonizeGopFirstFieldCoupleEnabled} &
%\ShortOption{\None} &
\Default{1} &
Enables harmonization of Gop first field couple.
\\

\Option{AccessUnitDelimiter} &
%\ShortOption{\None} &
Yan Zhang's avatar
Yan Zhang committed
Add Access Unit Delimiter NAL units between all Access Units.
\\

\Option{EnablePictureHeaderInSliceHeader} &
%\ShortOption{\None} &
\Default{1} &
Enable Picture Header to be signalled in Slice Header when encoding with single slice per picture.
\\

\Option{RPR} &
%\ShortOption{\None} &
\Default{true} &
Specifies the value of sps_ref_pic_resampling_enabled_flag.
\\

\Option{ScalingRatioHor} &
%\ShortOption{\None} &
\Default{1.0} &
Scaling ratio in horizontal direction for reference picture resampling. When GOPBasedRPR is true unless ratio is defined the ratio will be set to 2.0.
\\

\Option{ScalingRatioVer} &
%\ShortOption{\None} &
\Default{1.0} &
Scaling ratio in vertical direction for reference picture resampling. When GOPBasedRPR is true unless ratio is defined the ratio will be set to 2.0.
\\

\Option{GOPBasedRPR} &
%\ShortOption{\None} &
\Default{false} &
Enables decision to encode pictures in GOP in full resolution or one of three downscaled resolutions (default is $1/2$, $2/3$ and $4/5$ in both dimensions).
First picture in GOP is rescaled to half resolution and then upscaled to full resolution. The luma PSNR of the rescaled picture compared to the source picture is compared with
PSNR thresholds for respective resolution: $(PsnrThresholdRPR - (QP - 37) * 0.5) < upscaledPSNR$.
The smallest resolution that has PSNR above the threshold is selected.
\\

\Option{GOPBasedRPRQPTh} &
%\ShortOption{\None} &
\Default{32} &
QP threshold parameter that determines which QP GOP-based RPR is invoked for given by $QP >= GOPBasedRPRQPTh$.
\\

\Option{ScalingRatioHor2} &
%\ShortOption{\None} &
\Default{1.5} &
Scaling ratio in hor direction for GOP based RPR ($2/3$).
\\

\Option{ScalingRatioVer2} &
%\ShortOption{\None} &
\Default{1.5} &
Scaling ratio in ver direction for GOP based RPR ($2/3$).
\\

\Option{ScalingRatioHor3} &
%\ShortOption{\None} &
\Default{1.25} &
Scaling ratio in hor direction for GOP based RPR ($4/5$).
\\

\Option{ScalingRatioVer3} &
%\ShortOption{\None} &
\Default{1.25} &
Scaling ratio in ver direction for GOP based RPR ($4/5$).
\\

\Option{PsnrThresholdRPR} &
%\ShortOption{\None} &
\Default{47.0} &
PSNR threshold for GOP based RPR for the case of ScalingRatioVer and ScalingRatioHor ($1/2$).
\\

\Option{PsnrThresholdRPR2} &
%\ShortOption{\None} &
\Default{44.0} &
PSNR threshold for GOP based RPR for the case of ScalingRatioVer2 and ScalingRatioHor2 ($2/3$).
\\

\Option{PsnrThresholdRPR3} &
%\ShortOption{\None} &
\Default{41.0} &
PSNR threshold for GOP based RPR for the case of ScalingRatioVer3 and ScalingRatioHor3 ($4/5$).
\\

\Option{QpOffsetRPR} &
%\ShortOption{\None} &
\Default{-6} &
QP offset for luma when encoding in reduced resolution with GOP based RPR ($1/2$).
\\

\Option{QpOffsetRPR2} &
%\ShortOption{\None} &
\Default{-4} &
QP offset for luma when encoding in reduced resolution with GOP based RPR ($2/3$).
\\

\Option{QpOffsetRPR3} &
%\ShortOption{\None} &
\Default{-2} &
QP offset for luma when encoding in reduced resolution with GOP based RPR ($4/5$).
\\

\Option{QpOffsetChromaRPR} &
%\ShortOption{\None} &
\Default{-6} &
QP offset for chroma when encoding in reduced resolution with GOP based RPR ($1/2$).
\\

\Option{QpOffsetChromaRPR2} &
%\ShortOption{\None} &
\Default{-4} &
QP offset for chroma when encoding in reduced resolution with GOP based RPR ($2/3$).
\\

\Option{QpOffsetChromaRPR3} &
%\ShortOption{\None} &
\Default{-2} &
QP offset for chroma when encoding in reduced resolution with GOP based RPR ($4/5$).
\\

\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. When GOPBasedRPR is true it will be set to 2.
Kenneth Andersson's avatar
Kenneth Andersson committed
\Option{UpscaleFilterForDisplay} &
%\ShortOption{\None} &
\Default{1} &
Filters used for upscaling reconstruction to full resolution (2: ECM 12-tap luma and 6-tap chroma MC filters, 1: Alternative 12-tap luma and 6-tap chroma filters, 0: VVC 8-tap luma and 4-tap chroma MC filters).
\\
Yan Zhang's avatar
Yan Zhang committed
\end{OptionTableNoShorthand}

\begin{OptionTableNoShorthand}{GOP based temporal filter parameters}{tab:gop-based-temporal-filter}
\Option{TemporalFilter} &
Enable motion-compensated temporal pre-filter. When enabled, at least one of TemporalFilterPastRefs and TemporalFilterFutureRefs
must be larger than 0.
\\
\Option{TemporalFilterPastRefs} &
%\ShortOption{\None} &
\Default{4} &
Number of past frames used by the temporal filter.
\Option{TemporalFilterFutureRefs} &
\Default{4} &
Number of future frames used by the temporal filter. This may be set to 0 to avoid using future frames.
\\
\Option{FirstValidFrame} &
%\ShortOption{\None} &
\Default{0} &
Index of first frame in video sequence that may be used by the temporal filter. If a negative value is given, the index defaults to the value
of FrameSkip.
\\
\Option{LastValidFrame} &
%\ShortOption{\None} &
\Default{MAX_INT} &
Index of last frame in video sequence that may be used by the temporal filter. If a negative value is given, the index defaults to the value
of FrameSkip + FramesToBeEncoded - 1.
\\
\Option{TemporalFilterStrengthFrame*} &
%\ShortOption{\None} &
\Default{} &
Strength for every * frame in GOP based temporal filter, where * is an integer. E.g. --TemporalFilterStrengthFrame8 0.95 will
enable GOP based temporal filter at every 8th frame with strength 0.95. Longer intervals overrides shorter when there are
multiple matches.
\\
\Option{AlfTrueOrg} &
%\ShortOption{\None} &
\Default{true} &
When GOP based temporal filter is enabled, enable or disable using true original samples for ALF optimization .
\\
\Option{SaoTrueOrg} &
When GOP based temporal filter is enabled, enable or disable using true original samples for SAO optimization .
Yan Zhang's avatar
Yan Zhang committed
%%
%% profile, level and conformance options
%%
\begin{OptionTableNoShorthand}{Profile and level parameters}{tab:profile}
\Option{Profile} &
%\ShortOption{\None} &
\Default{none} &
Specifies the profile to which the encoded bitstream complies.

Frank Bossen's avatar
Frank Bossen committed
Valid VVC Ver. 1 values are: none, main_10, main_10_still_picture, main_10_444, main_10_444_still_picture,
multilayer_main_10, multilayer_main_10_still_picture, multilayer_main_10_444, multilayer_main_10_444_still_picture.
When one of the still picture profiles are selected, the OnePictureOnlyConstraintFlag setting will be forced to 1.
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{Level} &
%\ShortOption{\None} &
\Default{none} &
Specifies the level to which the encoded bitstream complies.
Valid values are: none, 1, 2, 2.1, 3, 3.1, 4, 4.1, 5, 5.1, 5.2, 6, 6.1, 6.2, 15.5
Yan Zhang's avatar
Yan Zhang committed

NB: There is currently only limited validation that the encoder configuration complies with the profile, level and tier constraints.
\\

\Option{Tier} &
%\ShortOption{\None} &
\Default{main} &
Specifies the level tier to which the encoded bitsream complies.
Valid values are: main, high.

NB: There is currently only limited validation that the encoder configuration complies with the profile, level and tier constraints.
\\

\Option{FrameOnlyConstraintFlag} &
%\ShortOption{\None} &
\Default{1} &
Specifies the value of ptl_frame_only_constraint_flag .
\\

\Option{MultiLayerEnabledFlag} &
%\ShortOption{\None} &
\Default{0} &
Specifies the value of ptl_multilayer_enabled_flag.
\\

Yan Zhang's avatar
Yan Zhang committed
\Option{SubProfile} &
%\ShortOption{\None} &
\Default{0} &
Indicates interoperability metadata registered as specified by X Recommendation ITU-T T.35.
\\

\Option{EnableDecodingCapabilityInformation} &
Yan Zhang's avatar
Yan Zhang committed
%\ShortOption{\None} &
\Default{false} &
Enables writing of a decoding capability information (DCI). If disabled, no DCI will be written.
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{MaxBitDepthConstraint} &
%\ShortOption{\None} &
\Default{0} &
Brian Heng's avatar
Brian Heng committed
For --profile=main-RExt, specifies the value to use to derive the general_max_bit_depth constraint flags for RExt profiles; when 0, use InternalBitDepth.
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{MaxChromaFormatConstraint} &
%\ShortOption{\None} &
\Default{0} &
For --profile=main-RExt, specifies the chroma-format to use for the general profile constraints for RExt profiles; when 0, use the value of ChromaFormatIDC.
\\

\Option{GciPresentFlag} &
%\ShortOption{\None} &
\Default{1} &
Specifies the value of gci_present_flag
\\

\Option{IntraOnlyConstraintFlag} &
Yan Zhang's avatar
Yan Zhang committed
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_intra_only_constraint_flag
\\

\Option{AllLayersIndependentConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of all_layers_independent_constraint_flag
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{OnePictureOnlyConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of general_one_picture_only_constraint_flag
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{MaxBitDepthConstraintIdc} &
Yan Zhang's avatar
Yan Zhang committed
%\ShortOption{\None} &
\Default{16} &
Specifies the value of 16 minus gci_sixteen_minus_max_bitdepth_constraint_idc
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{MaxChromaFormatConstraintIdc} &
%\ShortOption{\None} &
\Default{3} &
Specifies the value of 3 minus gci_three_minus_max_chroma_format_constraint_idc
\\

Kui Fan's avatar
Kui Fan committed
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_trail_constraint_flag
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_stsa_constraint_flag
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_rasl_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_radl_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_idr_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_cra_constraint_flag
\\

\Option{GdrConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_gdr_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_aps_constraint_flag
\Option{NoIdrRplConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_idr_rpl_constraint_flag
\\

Kui Fan's avatar
Kui Fan committed
\Option{OneTilePerPicConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of one_tile_per_pic_constraint_flag
\\

bdchoi's avatar
bdchoi committed
\Option{PicHeaderInSliceHeaderConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of pic_header_in_slice_header_constraint_flag
\\

Kui Fan's avatar
Kui Fan committed
\Option{OneSlicePerPicConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of one_slice_per_pic_constraint_flag
\\
\Option{NoRectSliceConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_rectangular_slice_constraint_flag
\\
\Option{OneSlicePerSubpicConstraintFlag} &
Kui Fan's avatar
Kui Fan committed
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_one_slice_per_subpic_constraint_flag
\\

\Option{NoSubpicInfoConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_subpic_info_constraint_flag
\Option{MaxLog2CtuSizeConstraintIdc} &
%\ShortOption{\None} &
\Default{8} &
Specifies the value of gci_three_minus_max_log2_ctu_size_constraint_idc
\\

\Option{NoPartitionConstraintsOverrideConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_partition_constraints_override_constraint_flag
\\

\Option{NoMttConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_mtt_constraint_flag
\\

\Option{NoQtbttDualTreeIntraConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_qtbtt_dual_tree_intra_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_palette_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_ibc_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_isp_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_mrl_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_mip_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_cclm_constraint_flag
\\

\Option{NoRprConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_ref_pic_resampling_constraint_flag
\\

\Option{NoResChangeInClvsConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_res_change_in_clvs_constraint_flag
\\

\Option{NoWeightedPredictionConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_weighted_prediction_constraint_flag
\\

\Option{NoRefWraparoundConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_ref_wraparound_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_temporal_mvp_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_sbtmvp_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_amvr_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_smvd_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_bdof_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_dmvr_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_mmvd_constraint_flag
\\

\Option{NoAffineMotionConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_affine_motion_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_prof_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_bcw_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_ciip_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_gpm_constraint_flag
\\

\Option{NoTransformSkipConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_transform_skip_constraint_flag
\\

\Option{NoLumaTransformSize64ConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_luma_transform_size_64_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_bdpcm_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_mts_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_lfnst_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_joint_cbcr_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_sbt_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_act_constraint_flag
\\

\Option{NoExplicitScaleListConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_explicit_scaling_list_constraint_flag
\\

\Option{NoChromaQpOffsetConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gic_no_chroma_qp_offset_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_dep_quant_constraint_flag
\\

\Option{NoSignDataHidingConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_sign_data_hiding_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_cu_qp_delta_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_sao_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_alf_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_ccalf_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_lmcs_constraint_flag
\\

%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_ladf_constraint_flag
\\

\Option{NoVirtualBoundaryConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_virtual_boundaries_constraint_flag
\\

\Option{AllRapPicturesFlag} &
%\ShortOption{\None} &
\Default{false} &
Indicate that all pictures in OlsInScope are IRAP pictures or GDR pictures with ph_recovery_poc_cnt equal to 0
\\
Tomohiro Ikai's avatar
Tomohiro Ikai committed
\Option{NoExtendedPrecisionProcessingConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_extended_precision_processing_constraint_flag
\\

\Option{NoTsResidualCodingRiceConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_ts_residual_coding_rice_constraint_flag
\\

\Option{NoRrcRiceExtensionConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_rrc_rice_extension_constraint_flag
\\

\Option{NoPersistentRiceAdaptationConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_persistent_rice_adaptation_constraint_flag
\\

\Option{NoReverseLastSigCoeffConstraintFlag} &
%\ShortOption{\None} &
\Default{false} &
Specifies the value of gci_no_reverse_last_sig_coeff_constraint_flag
\\
Yan Zhang's avatar
Yan Zhang committed
\end{OptionTableNoShorthand}


%%
%% Layer parameters
%%

\begin{OptionTableNoShorthand}{Layer parameters}{tab:layer}
\Option{MaxLayers} &
%\ShortOption{\None} &
\Default{1} &
Specifies the value to use to derive the vps_max_layers_minus1 for layered coding
\\

\Option{MaxSubLayers} &
%\ShortOption{\None} &
Specifies the maximum number of temporal sublayers to signal in the VPS
\\

\Option{DefaultPtlDpbHrdMaxTidFlag} &
%\ShortOption{\None} &
\Default{true} &
Specifies the value of vps_default_ptl_dpb_hrd_max_tid_flag in the VPS
\Option{EnableOperatingPointInformation} &
%\ShortOption{\None} &
\Default{false} &
Enables writing of a operating point information (OPI). If disabled, no OPI will
be written.
\\

\Option{TargetOutputLayerSet} &
%\ShortOption{\None} &
\Default{\NotSet} &
Specifies the target Output Layer Set Idx to be signalled in OPI. When not provided the value may be inferred from the VPS.
\\

\Option{MaxTemporalLayer} &
%\ShortOption{\None} &
\Default{\NotSet} &
Defines the maximum temporal layer to be signalled in OPI. When not provided the value may be inferred from the VPS.
\\

\Option{AllowablePredDirection} &
%\ShortOption{\None} &
\Default{""} &
Specifies a list of values of the allowable prediction directions for dependent layers. The number of entries is equal to the number of temporal layers.
\par
\begin{tabular}{cp{0.45\textwidth}}
0 & Both inter-layer and intra-layer preditions are allowed for the speficied temporal layer. \\
1 & Only inter-layer predition is allowed for the speficied temporal layer. \\
2 & Only intra-layer predition is allowed for the speficied temporal layer. \\
\end{tabular}
\\

\Option{LayerId\emph{i}} &
%\ShortOption{\None} &
\Default{0} &
Specifies the nuh_layer_id of the i-th layer (with i an integer greater than 0)
\\

\Option{NumRefLayers\emph{i}} &
%\ShortOption{\None} &
\Default{0} &
Specifies the number of direct reference layers of the i-th layer (with i an integer greater than 0)
\\

\Option{RefLayerIdx\emph{i}} &
%\ShortOption{\None} &
\Default{""} &
Specifies a list of indexes of the reference layers of the i-th layer (with i an integer greater than 0)
\\

\Option{EachLayerIsAnOlsFlag} &
%\ShortOption{\None} &
\Default{true} &
Specifies the value of each_layer_is_an_ols_flag in the VPS
\\

\Option{OlsModeIdc} &
%\ShortOption{\None} &
\Default{0} &
Specifies the value of ols_mode_idc in the VPS
\\

\Option{NumOutputLayerSets} &
%\ShortOption{\None} &
\Default{1} &
Specifies the number of output layer sets (OLS) signalled in the VPS
\\

\Option{OlsOutputLayer\emph{i}} &
%\ShortOption{\None} &
\Default{""} &
Specifies a list of indexes of the output layers of the i-th OLS (with i an integer greater than 0) 
\\

\Option{NumPTLsInVPS} &
%\ShortOption{\None} &
\Default{1} &
Specifies the number of profile_tier_level (PTL) syntax structures signalled in the VPS 
\\

\Option{LevelPTL\emph{i}} &
%\ShortOption{\None} &
\Default{Level::NONE} &
Specifies the level to signal in the i-th PTL of the VPS (with i an integer greater than 0) 
\\

\Option{OlsPTLIdx\emph{i}} &
%\ShortOption{\None} &
\Default{0} &
Specifies the index of the PTL that applies to the i-th OLS (with i an integer greater than 0) 
\\

\Option{SamePicTimingInAllOLS} &
%\ShortOption{\None} &
\Default{1} &
Indicates that all OLSs are using the same (not nested) picture timing SEI message, i.e. picture timing SEI will not 
be included in scalable nesting SEI messages (if scalable nesting SEI is enabled).
\\
\Option{MaxTidILRefPicsPlusOneLayerId\emph{i}} &
\Default{""} &
Specifies a list of the maximum temporal ID of the reference layers of the i-th layer plus 1 (with i an integer greater than 0). The value 0 allows only to use IRAP pictures for inter-layer prediction.

\Option{AvoidIntraInDepLayer} &
%\ShortOption{\None} &
\Default{1} &
Replaces I slices in dependent layers with B slices, except for all-intra configuration (IntraPeriod=1).
\\

\Option{RPLofDepLayerInSH} &
%\ShortOption{\None} &
\Default{false} &
define Reference picture lists in slice header instead of SPS for dependant layers
\\
\end{OptionTableNoShorthand}


Yan Zhang's avatar
Yan Zhang committed
%%
%% Unit definition parameters
%%

\begin{OptionTableNoShorthand}{Unit definition parameters}{tab:unit}
\Option{CTUSize} &
%\ShortOption{\None} &
\Default{128} &
Defines the CTU size (width and height).
Yan Zhang's avatar
Yan Zhang committed
\Option{MaxCUWidth} &
%\ShortOption{\None} &
\Default{64} &
Defines the maximum CU width.
\\

\Option{MaxCUHeight} &
%\ShortOption{\None} &
\Default{64} &
Defines the maximum CU height.
\\

\Option{MaxCUSize (-s)} &
%\ShortOption{\None} &
\Default{64} &
Defines the maximum CU size.
\\

\Option{Log2MinCuSize} &
%\ShortOption{\None} &
\Default{2} &
Defines the minimum CU size in logarithm base 2.
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{QuadtreeTULog2MaxSize} &
%\ShortOption{\None} &
\Default{6 \\ ($= \mathrm{log}_2(64)$)} &
Defines the Maximum TU size in logarithm base 2.
\\

\Option{QuadtreeTULog2MinSize} &
%\ShortOption{\None} &
\Default{2 \\ ($= \mathrm{log}_2(4)$)} &
Defines the Minimum TU size in logarithm base 2.
\\

\Option{QuadtreeTUMaxDepthIntra} &
%\ShortOption{\None} &
\Default{1} &
Defines the depth of the TU tree for intra CUs.
\\

\Option{QuadtreeTUMaxDepthInter} &
%\ShortOption{\None} &
\Default{2} &
Defines the depth of the TU tree for inter CUs.
\\

Shelly Chiang's avatar
Shelly Chiang committed
\Option{MaxMTTHierarchyDepth} &
%\ShortOption{\None} &
\Default{3} &
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum depth of the multi-type tree for inter slices.
Shelly Chiang's avatar
Shelly Chiang committed
\\

\Option{MaxMTTHierarchyDepthI} &
%\ShortOption{\None} &
\Default{3} &
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum depth of the multi-type tree for intra slices.
Shelly Chiang's avatar
Shelly Chiang committed
\\

\Option{MaxMTTHierarchyDepthISliceC} &
%\ShortOption{\None} &
\Default{3} &
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum depth of the multi-type tree in dual tree for chroma components.
Shelly Chiang's avatar
Shelly Chiang committed
\\

\Option{MaxMTTHierarchyDepthISliceL} &
%\ShortOption{\None} &
\Default{3} &
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum depth of the multi-type tree in dual tree for luma component.
Shelly Chiang's avatar
Shelly Chiang committed
%\ShortOption{\None} &
\Default{4} &
Jie Chen's avatar
Jie Chen committed
Defines the initial minimum size of the quad tree in dual tree for chroma components.

Note: this size is defined in chroma sample unit in configuration, and it is converted
into luma sample unit according to the horizontal chroma subsampling ratio when applied
in the software. In chroma format 4:2:2 case, this value shall be set to the value of
the height of minimum chroma QT node in chroma samples.
Shelly Chiang's avatar
Shelly Chiang committed
\\

\Option{MinQTISlice} &
%\ShortOption{\None} &
\Default{8} &
Jie Chen's avatar
Jie Chen committed
Defines the initial minimum size of the quad tree for intra slices.
Shelly Chiang's avatar
Shelly Chiang committed
\\

\Option{MinQTLumaISlice} &
%\ShortOption{\None} &
\Default{8} &
Jie Chen's avatar
Jie Chen committed
Defines the initial minimum size of the quad tree in dual tree for luma component.
Shelly Chiang's avatar
Shelly Chiang committed
\\

\Option{MinQTNonISlice} &
%\ShortOption{\None} &
\Default{8} &
Jie Chen's avatar
Jie Chen committed
Defines the initial minimum size of the quad tree for inter slices.
\Option{MaxBTLumaISlice} &
%\ShortOption{\None} &
\Default{32} &
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum size of the binary tree in dual tree for luma component.
\\

\Option{MaxBTChromaISlice} &
%\ShortOption{\None} &
\Default{64} &
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum size of the binary tree in dual tree for chroma components.
Defines the initial maximum size of the binary tree for inter slices.
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum size of the tenary tree in dual tree for luma component.
\\

\Option{MaxTTChromaISlice} &
%\ShortOption{\None} &
\Default{32} &
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum size of the tenary tree in dual tree for chroma components.
Jie Chen's avatar
Jie Chen committed
Defines the initial maximum size of the tenary tree for inter slices.
Yan Zhang's avatar
Yan Zhang committed
\end{OptionTableNoShorthand}


%%
%% Coding structure parameters
%%

\begin{OptionTableNoShorthand}{Coding structure parameters}{tab:coding-structure}
\Option{IntraPeriod (-ip)} &
%\ShortOption{-ip} &
\Default{$-1$} &
Specifies the intra frame period.
A value of $-1$ implies an infinite period.
\\

\Option{DecodingRefreshType (-dr)} &
%\ShortOption{-dr} &
\Default{0} &
Specifies the type of decoding refresh to apply at the intra frame period
picture.
\par
\begin{tabular}{cp{0.45\textwidth}}
0 & Applies an I picture (not a intra random access point). \\
1 & Applies a CRA intra random access point (open GOP). \\
2 & Applies an IDR intra random access point (closed GOP). \\
3 & Use recovery point SEI messages to indicate random access. \\
\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{EDRAPPeriod} &
%\ShortOption{\None} &
\Default{0} &
Specifies the EDRAP period in frames.
Extended DRAP indication SEI messages are disabled if EDRAPPeriod is 0.
\\

Yan Zhang's avatar
Yan Zhang committed
\Option{GOPSize (-g)} &
%\ShortOption{-g} &
\Default{1} &
Specifies the size of the cyclic GOP structure.
\\

\Option{Frame\emph{N}} &
%\ShortOption{\None} &
\Default{\NotSet} &
Multiple options that define the cyclic GOP structure that will be used
repeatedly throughout the sequence.  The table should contain GOPSize
elements.
\par
See section~\ref{sec:gop-structure} for further details.
\\

\Option{ReWriteParamSets} &
%\ShortOption{-ip} &
\Default{$0$} &
Enable writing of parameter sets (SPS, PPS, etc.) before every (intra) random access point to enable true random access.
\\
\end{OptionTableNoShorthand}


%%
%% Motion estimation parameters
%%

\begin{OptionTableNoShorthand}{Motion estimation parameters}{tab:motion-estimation}
\Option{FastSearch} &
%\ShortOption{\None} &
\Default{1} &
Enables or disables the use of a fast motion search.
\par
\begin{tabular}{cp{0.45\textwidth}}
 0 & Full search method \\
 1 & Fast search method - TZSearch\\
 2 & Predictive motion vector fast search method \\
 3 & Extended TZSearch method \\
\end{tabular}
\\

\Option{SearchRange (-sr)} &
%\ShortOption{-sr} &
\Default{96} &
Specifies the search range used for motion estimation.

Note: the search range is defined around a predictor. Motion vectors
derived by the motion estimation may thus have values larger than the
search range.
\\

\Option{BipredSearchRange} &
%\ShortOption{\None} &
\Default{4} &
Specifies the search range used for bi-prediction refinement in motion
estimation.
\\

\Option{ClipForBiPredMEEnabled} &
%\ShortOption{\None} &
\Default{0} &
Enables clipping in the Bi-Pred ME, which prevents values over- or under-flowing. It is usually disabled to reduce encoder run-time.
\\

\Option{FastMEAssumingSmootherMVEnabled} &
%\ShortOption{\None} &
\Default{0} &
Enables fast ME assuming a smoother MV.
\\

\Option{HadamardME} &
%\ShortOption{\None} &
\Default{true} &
Enables or disables the use of the Hadamard transform in fractional-pel motion
estimation.
\par
\begin{tabular}{cp{0.45\textwidth}}
 0 & SAD for cost estimation \\
 1 & Hadamard for cost estimation \\
\end{tabular}
\\

\Option{ASR} &
%\ShortOption{\None} &
\Default{false} &
Enables or disables the use of adaptive search ranges, where the motion
search range is dynamically adjusted according to the POC difference
between the current and the reference pictures.
\begin{displaymath}
\resizebox{\hsize}{!}{$
\mathrm{SearchRange}= \mathrm{Round}\left(
                          \mathrm{SearchRange}
                          * \mathrm{ADAPT\_SR\_SCALE}
                          * \frac{\mathrm{abs}(
                                 \mathrm{POCcur} - \mathrm{POCref} )}{
                                 \mathrm{RateGOPSize}}\right)
$}
\end{displaymath}
\\

\Option{MaxNumMergeCand} &
%\ShortOption{\None} &
\Default{5} &
Specifies the maximum number of merge candidates to use.
\\

Yan Zhang's avatar
Yan Zhang committed
%\ShortOption{\None} &
\Default{5} &
Specifies the maximum number of geometric partitioning mode candidates to use.
\\

\Option{MaxNumIBCMergeCand} &
%\ShortOption{\None} &
\Default{6} &
Specifies the maximum number of IBC merge candidates to use.
Yan Zhang's avatar
Yan Zhang committed
\\

\Option{DisableIntraInInter} &
%\ShortOption{\None} &
\Default{0} &
Flag to disable intra PUs in inter slices.
\\

\Option{MMVD} &
%\ShortOption{\None} &
\Default{1} &
Enables or disables the merge mode with motion vector difference (MMVD).
\\

\Option{MmvdDisNum} &
%\ShortOption{\None} &
\Default{6} &
Specifies the number of MMVD distance entries used from the distance table at encoder.
\\
Shelly Chiang's avatar
Shelly Chiang committed

\Option{CIIP} &
%\ShortOption{\None} &
\Default{1} &
Enables or disables the merge mode with combined inter merge and intra prediction (CIIP).
\\
Yan Zhang's avatar
Yan Zhang committed
\end{OptionTableNoShorthand}


%%
%% Mode decision parameters
%%

\begin{OptionTableNoShorthand}{Mode decision parameters}{tab:mode-decision}
\Option{LambdaModifier$N$ (-LM$N$)} &
%\ShortOption{-LM$N$} &
\Default{1.0} &
Specifies a value that is multiplied with the Lagrange multiplier
$\lambda$, for use in the rate-distortion optimised cost calculation
when encoding temporal layer~$N$.
If LambdaModifierI is specified, then LambdaModifierI will be used for intra pictures.
\par
$N$ may be in the range 0 (inclusive) to 7 (exclusive).
\\

\Option{LambdaModifierI (-LMI)} &
%\ShortOption{-LMI} &
\Default{} &
Specifies one or more of the LambdaModifiers to use intra pictures at each of the temporal layers.
If not present, then the LambdaModifier$N$ settings are used instead. If the list of values
(comma or space separated) does not include enough values for each of the temporal layers,
the last value is repeated as required.
\\

\Option{IQPFactor (-IQF)} &
%\ShortOption{-IQF} &
\Default{-1} &
Specifies the QP factor to be used for intra pictures during the lambda computation.
(The values specified in the GOP structure are only used for inter pictures).
If negative (default), the following equation is used to derive the value:
\par
$IQP_{factor}=0.57*(1.0-Max(0.5, Min(0.0, 0.05*s)))$
\par
where $s = Int(isField ? (GS-1)/2 : GS-1)$ and
$GS$ is the gop size.
\\

\Option{ECU} &
%\ShortOption{\None} &
\Default{false} &
Enables or disables the use of early CU determination.  When enabled, skipped CUs will not be split further.
\\

\Option{ESD} &
%\ShortOption{\None} &
\Default{false} &
Enables or disables the use of early skip detection.  When enabled, the skip mode will be tested before any other.
\\

\Option{FEN} &
%\ShortOption{\None} &
\Default{0} &
Controls the use of different fast encoder coding tools.  The following
tools are supported in different combinations:
\par
\begin{tabular}{cp{0.45\textwidth}}
 a & In the SAD computation for blocks having size larger than 8, only
     the lines of even rows in the block are considered. \\
 b & The number of iterations used in the bi-directional motion vector
     refinement in the motion estimation process is reduced from 4 to 1. \\
\end{tabular}
Depending on the value of the parameter, the following combinations are
supported:
\par
\begin{tabular}{cp{0.45\textwidth}}
 0 & Disable all modes \\
 1 & Use both a \& b tools\\
 2 & Use only tool b \\
 3 & Use only tool a \\
\end{tabular}
\\

\Option{FDM} &
%\ShortOption{\None} &
\Default{true} &
Enables or disables the use of fast encoder decisions for 2Nx2N merge
mode.  When enabled, the RD cost for the merge mode of the current
candidate is not evaluated if the merge skip mode was the best merge
mode for one of the previous candidates.
\\

\Option{SBTFast64WidthTh} &
\Default{1920} &
Picture width threshold for testing size-64 SBT in RDO (now for HD and above sequences).
Yan Zhang's avatar
Yan Zhang committed
\Option{RDpenalty} &
%\ShortOption{\None} &
\Default{0} &
RD-penalty for 32x32 TU for intra in non-intra slices.
Enabling this parameter can reduce the visibility of CU boundaries in the coded picture.
\par
\begin{tabular}{cp{0.45\textwidth}}
 0 & No RD-penalty \\
 1 & RD-penalty \\
 2 & Maximum RD-penalty (no 32x32 TU)\\
\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}
\\

\Option{SplitPredictAdaptMode} &
%\ShortOption{\None} &
\Default{0} &
Control mode for split cost prediction, 0..2 (Default: 0)
\par
\begin{tabular}{cp{0.45\textwidth}}
 0 & QP based cost prediction.\\
 1 & QP and component type (luma/chroma) based cost prediction.\\
 2 & Cost prediction based on QP, component type and split type.\\
\end{tabular}
\\

\Option{DisableFastTTfromBT} &
%\ShortOption{\None} &
\Default{false} &
Disable fast decision for TT from BT.
\Option{TTFastSkip} &
%\ShortOption{\None} &
\Default{31} &
TT speedup option. Combination is allowed by bitwise OR.
\par
Loading
Loading full blame...