rfc9924v1.txt   rfc9924.txt 
skipping to change at line 170 skipping to change at line 170
The APV codec supports the following features: The APV codec supports the following features:
* Perceptually lossless video quality that is close to the original, * Perceptually lossless video quality that is close to the original,
uncompressed quality; uncompressed quality;
* Low complexity and high throughput intra frame only coding without * Low complexity and high throughput intra frame only coding without
inter frame coding; inter frame coding;
* Intra frame coding without prediction between pixel values but * Intra frame coding without prediction between pixel values but
between transformed values for low delay encoding; with prediction between transformed values for low delay encoding;
* High bit rates of up to a few Gbps for 2K, 4K, and 8K resolution * High bit rates of up to a few Gbps for 2K, 4K, and 8K resolution
content, enabled by a lightweight entropy coding scheme; content, enabled by a lightweight entropy coding scheme;
* Frame tiling for immersive content and for enabling parallel * Frame tiling for immersive content and for enabling parallel
encoding and decoding; encoding and decoding;
* Various chroma sampling formats from 4:0:0 to 4:4:4:4, and bit * Various chroma sampling formats from 4:0:0 to 4:4:4:4, and bit
depths from 10 to 16 (Note: Only the profiles supporting 10 bits depths from 10 to 16 (Note: Only the profiles supporting 10 bits
and 12 bits are currently defined); and 12 bits are currently defined);
* Multiple decoding and re-encoding without severe visual quality * The ability to decode and re-encode multiple times without severe
degradation; and visual quality degradation; and
* Various metadata including HDR10/10+ and user-defined formats. * Various metadata including HDR10/10+ and user-defined formats.
2. Terms 2. Terms
2.1. Terms and Definitions 2.1. Terms and Definitions
access unit (AU): a collection of primitive bitstream units (PBU) access unit (AU): a collection of primitive bitstream units (PBU)
including various types of frames, metadata, filler, and access including various types of frames, metadata, filler, and access
unit information, associated with a specific time unit information, associated with a specific time
skipping to change at line 319 skipping to change at line 319
frame in which the MBs are ordered consecutively in MB raster scan frame in which the MBs are ordered consecutively in MB raster scan
in a tile and the tiles in a frame are ordered consecutively in a in a tile and the tiles in a frame are ordered consecutively in a
raster scan of the tiles of the frame raster scan of the tiles of the frame
transform coefficient: a scalar quantity, considered to be in a transform coefficient: a scalar quantity, considered to be in a
frequency domain, that is associated with a particular one- frequency domain, that is associated with a particular one-
dimensional or two-dimensional index dimensional or two-dimensional index
2.2. Abbreviated Terms 2.2. Abbreviated Terms
I: intra
LSB: least significant bit LSB: least significant bit
MSB: most significant bit MSB: most significant bit
RGB: Red, Green and Blue RGB: Red, Green and Blue
3. Conventions Used in This Document 3. Conventions Used in This Document
3.1. General 3.1. General
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in "OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here. capitals, as shown here.
3.2. Operators 3.2. Operators
The operators and the order of precedence are the same as used in the The operators and the order of precedence are the same as used in the
C programming language [ISO9899], with the exception of the operators C programming language [ISO9899]. However, there are some exceptions
described in the Section 3.2.1 and Section 3.2.2 following widely for the operators described in the Section 3.2.1 and Section 3.2.2,
used industry practices for video codecs. which follows widely used industry practices for video codecs.
3.2.1. Arithmetic Operators 3.2.1. Arithmetic Operators
// //
an integer division with rounding of the result toward zero. For an integer division with rounding of the result toward zero. For
example, 7//4 and -7//-4 are rounded to 1 and -7//4 and 7//-4 are example, 7//4 and -7//-4 are rounded to 1 and -7//4 and 7//-4 are
rounded to -1 rounded to -1
/ or div(x,y) / or div(x,y)
a division in mathematical equations where no truncation or a division in mathematical equations where no truncation or
skipping to change at line 490 skipping to change at line 488
within the section in which they are derived. within the section in which they are derived.
Functions that specify properties of the current position in the Functions that specify properties of the current position in the
bitstream are referred to as syntax functions. These functions are bitstream are referred to as syntax functions. These functions are
specified in Section 5.2 and assume the existence of a bitstream specified in Section 5.2 and assume the existence of a bitstream
pointer with an indication of the position of the next bit to be read pointer with an indication of the position of the next bit to be read
by the decoding process from the bitstream. by the decoding process from the bitstream.
A one-dimensional array is referred to as a list. A two-dimensional A one-dimensional array is referred to as a list. A two-dimensional
array is referred to as a matrix. Arrays can either be syntax array is referred to as a matrix. Arrays can either be syntax
elements or variables. Square parentheses are used for the indexing elements or variables. Square brackets are used for the indexing of
of arrays. In reference to a visual depiction of a matrix, the first arrays. In reference to a visual depiction of a matrix, the first
square bracket is used as a column (horizontal) index and the second square bracket is used as a column (horizontal) index and the second
square bracket is used as a row (vertical) index. square bracket is used as a row (vertical) index.
A specification of values of the entries in rows and columns of an A specification of values of the entries in rows and columns of an
array may be denoted by {{...}{...}}, where each inner pair of array may be denoted by {{...}{...}}, where each inner pair of
brackets specifies the values of the elements within a row in brackets specifies the values of the elements within a row in
increasing column order and the rows are ordered in increasing row increasing column order and the rows are ordered in increasing row
order. Thus, setting a matrix s equal to {{1 6}{4 9}} specifies that order. Thus, setting a matrix s equal to {{1 6}{4 9}} specifies that
s[0][0] is set equal to 1, s[1][0] is set equal to 6, s[0][1] is set s[0][0] is set equal to 1, s[1][0] is set equal to 6, s[0][1] is set
equal to 4, and s[1][1] is set equal to 9. equal to 4, and s[1][1] is set equal to 9.
skipping to change at line 573 skipping to change at line 571
* Arrays representing other unspecified tri-stimulus color samplings * Arrays representing other unspecified tri-stimulus color samplings
(for example, YZX, also known as XYZ as specified in [CIE15]). (for example, YZX, also known as XYZ as specified in [CIE15]).
* Arrays representing other unspecified four color samplings * Arrays representing other unspecified four color samplings
For the convenience of notation and terminology in this document, the For the convenience of notation and terminology in this document, the
variables and terms associated with these arrays can be referred to variables and terms associated with these arrays can be referred to
as luma and chroma regardless of the actual color representation as luma and chroma regardless of the actual color representation
method in use. method in use.
The variables SubWidthC, SubHeightC, and NumComps are specified in The values of the variables SubWidthC, SubHeightC, and NumComps
Table 2, depending on the chroma format sampling structure, which is depend on the chroma format sampling structure as specified in
specified through chroma_format_idc. Other values of Table 2. The chroma format sampling structure is signaled through
chroma_format_idc, SubWidthC, SubHeightC, and NumComps may be chroma_format_idc. Other values of chroma_format_idc, SubWidthC,
specified in future versions of this document. SubHeightC, and NumComps may be specified in future versions of this
document.
+===================+==========+===========+============+==========+ +===================+==========+===========+============+==========+
| chroma_format_idc | Chroma | SubWidthC | SubHeightC | NumComps | | chroma_format_idc | Chroma | SubWidthC | SubHeightC | NumComps |
| | format | | | | | | format | | | |
+===================+==========+===========+============+==========+ +===================+==========+===========+============+==========+
| 0 | 4:0:0 | 1 | 1 | 1 | | 0 | 4:0:0 | 1 | 1 | 1 |
+-------------------+----------+-----------+------------+----------+ +-------------------+----------+-----------+------------+----------+
| 1 | reserved | reserved | reserved | reserved | | 1 | reserved | reserved | reserved | reserved |
+-------------------+----------+-----------+------------+----------+ +-------------------+----------+-----------+------------+----------+
| 2 | 4:2:2 | 2 | 1 | 3 | | 2 | 4:2:2 | 2 | 1 | 3 |
skipping to change at line 809 skipping to change at line 808
* a variable blkHeight specifying the height of a block. * a variable blkHeight specifying the height of a block.
Output of this process is the array inverseScan[rPos]. Output of this process is the array inverseScan[rPos].
The array index rPos specifies the raster scan position ranging from The array index rPos specifies the raster scan position ranging from
0 to (blkWidth * blkHeight)-1. Depending on the value of blkWidth 0 to (blkWidth * blkHeight)-1. Depending on the value of blkWidth
and blkHeight, the array inverseScan is derived as follows: and blkHeight, the array inverseScan is derived as follows:
* The variable forwardScan is derived by invoking the zig-zag scan * The variable forwardScan is derived by invoking the zig-zag scan
order one-dimensional array initialization process as specified in order initialization process as specified in Section 4.4.1 with
Section 4.4.1 with input parameters blkWidth and blkHeight. input parameters blkWidth and blkHeight.
* The output variable inverseScan is derived as follows: * The output variable inverseScan is derived as follows:
for(pos = 0; pos < blkWidth * blkHeight; pos++){ for(pos = 0; pos < blkWidth * blkHeight; pos++){
inverseScan[forwardScan[pos]] = pos inverseScan[forwardScan[pos]] = pos
} }
Figure 6: Pseudo-code for inverse zig-zag scan Figure 6: Pseudo-code for inverse zig-zag scan
5. Syntax and Semantics 5. Syntax and Semantics
5.1. Method of Specifying Syntax 5.1. Method of Specifying Syntax
The syntax tables specify a superset of the syntax of all allowed The syntax tables specify a superset of the syntax of all allowed
bitstreams. Note that a decoder MUST implement some means for bitstreams. Note that a decoder MUST implement some means for
identifying entry points into the bitstream and some means to identifying entry points into the bitstream and some means to
identify and handle non-conforming bitstreams. The methods for identify and handle non-conforming bitstreams. The methods for
identifying and handling errors and other such situations are not identifying and handling errors and other such situations are not
specified in this document. specified in this document.
The APV bitstream is described in this document using syntax code The APV bitstream is described using syntax code based on the C
based on the C programming language [ISO9899] and uses its if/else, programming language [ISO9899] -- including use of if/else, while,
while, and for keywords as well as functions defined within this and for -- as well as functions defined within this document.
document.
The syntax table in syntax code is presented in a two-column format The syntax table in syntax code is presented in a two-column format
such as shown in Figure 7. In this form, the type column provides a such as shown in Figure 7. In this form, the type column provides a
type referenced in that same line of syntax code by using the syntax type referenced in that same line of syntax code by using the syntax
elements processing functions defined in Section 5.2.5. elements processing functions defined in Section 5.2.5.
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
ExampleSyntaxCode(){ | ExampleSyntaxCode(){ |
operations | operations |
skipping to change at line 1022 skipping to change at line 1020
indicates the identifier to associate a coded frame with metadata. indicates the identifier to associate a coded frame with metadata.
More than two frames can have the same group_id in a single AU. A More than two frames can have the same group_id in a single AU. A
primary frame and a non-primary frame MUST have different group_id primary frame and a non-primary frame MUST have different group_id
values, and two non-primary frames MUST have different group_id values, and two non-primary frames MUST have different group_id
values. When the value of group_id is equal to 0, the value of values. When the value of group_id is equal to 0, the value of
pbu_type MUST be greater than 64. The value of 0xFFFF for pbu_type MUST be greater than 64. The value of 0xFFFF for
group_id is reserved for future use. group_id is reserved for future use.
reserved_zero_8bits reserved_zero_8bits
MUST be equal to 0 in bitstreams conforming to the profiles MUST be equal to 0 in bitstreams conforming to the profiles
specified in Section 9 of this version of the document. Values of specified in Section 9. Values of reserved_zero_8bits greater
reserved_zero_8bits greater than 0 are reserved for future use. than 0 are reserved for future use. Decoders conforming to the
Decoders conforming to the profiles specified in Section 9 of this profiles specified in Section 9 MUST ignore PBU with values of
version of the document MUST ignore PBU with values of
reserved_zero_8bits greater than 0. reserved_zero_8bits greater than 0.
5.3.4. Frame 5.3.4. Frame
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
frame(){ | frame(){ |
frame_header() | frame_header() |
for(i = 0; i < NumTiles; i++){ | for(i = 0; i < NumTiles; i++){ |
tile_size[i] | u(32) tile_size[i] | u(32)
skipping to change at line 1077 skipping to change at line 1074
} | } |
tile_info() | tile_info() |
reserved_zero_8bits | u(8) reserved_zero_8bits | u(8)
byte_alignment() | byte_alignment() |
} | } |
Figure 12: frame_header() syntax code Figure 12: frame_header() syntax code
reserved_zero_8bits reserved_zero_8bits
MUST be equal to 0 in bitstreams conforming to the profiles MUST be equal to 0 in bitstreams conforming to the profiles
specified in Section 9 of this version of the document. Values of specified in Section 9. Values of reserved_zero_8bits greater
reserved_zero_8bits greater than 0 are reserved for future use. than 0 are reserved for future use. Decoders conforming to the
Decoders conforming to the profiles specified in Section 9 of this profiles specified in Section 9 MUST ignore PBU with values of
version of the document MUST ignore PBU with values of
reserved_zero_8bits greater than 0. reserved_zero_8bits greater than 0.
color_description_present_flag equal to 1 color_description_present_flag equal to 1
specifies that color_primaries, transfer_characteristics, and specifies that color_primaries, transfer_characteristics, and
matrix_coefficients are present. color_description_present_flag matrix_coefficients are present. color_description_present_flag
equal to 0 specifies that color_primaries, equal to 0 specifies that color_primaries,
transfer_characteristics, and matrix_coefficients are not present. transfer_characteristics, and matrix_coefficients are not present.
color_primaries color_primaries
MUST have the semantics of ColourPrimaries as specified in [H273]. MUST have the semantics of ColourPrimaries as specified in [H273].
skipping to change at line 1118 skipping to change at line 1114
[H273]. When the full_range_flag syntax element is not present, [H273]. When the full_range_flag syntax element is not present,
the value of full_range_flag is inferred to be equal to 0. the value of full_range_flag is inferred to be equal to 0.
use_q_matrix use_q_matrix
with a value of 1 specifies that the quantization matrices are with a value of 1 specifies that the quantization matrices are
present. A value of 0 specifies that the quantization matrices present. A value of 0 specifies that the quantization matrices
are not present. are not present.
reserved_zero_8bits reserved_zero_8bits
MUST be equal to 0 in bitstreams conforming to the profiles MUST be equal to 0 in bitstreams conforming to the profiles
specified in Section 9 of this version of the document. Values of specified in Section 9. Values of reserved_zero_8bits greater
reserved_zero_8bits greater than 0 are reserved for future use. than 0 are reserved for future use. Decoders conforming to the
Decoders conforming to the profiles specified in Section 9 of this profiles specified in Section 9 MUST ignore PBU with values of
version of the document MUST ignore PBU with values of
reserved_zero_8bits greater than 0. reserved_zero_8bits greater than 0.
5.3.6. Frame Information 5.3.6. Frame Information
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
frame_info(){ | frame_info(){ |
profile_idc | u(8) profile_idc | u(8)
level_idc | u(8) level_idc | u(8)
band_idc | u(3) band_idc | u(3)
skipping to change at line 1164 skipping to change at line 1159
band_idc band_idc
specifies a maximum coded data rate of level_idc as specified in specifies a maximum coded data rate of level_idc as specified in
Section 9. Bitstreams SHALL NOT contain values of band_idc other Section 9. Bitstreams SHALL NOT contain values of band_idc other
than those specified in Section 9. The value of band_idc MUST be than those specified in Section 9. The value of band_idc MUST be
in the range of 0 to 3. Other values of band_idc are reserved for in the range of 0 to 3. Other values of band_idc are reserved for
future use. future use.
reserved_zero_5bits reserved_zero_5bits
MUST be equal to 0 in bitstreams conforming to the profiles MUST be equal to 0 in bitstreams conforming to the profiles
specified in Section 9 of this version of the document. Values of specified in Section 9. Values of reserved_zero_8bits greater
reserved_zero_8bits greater than 0 are reserved for future use. than 0 are reserved for future use. Decoders conforming to the
Decoders conforming to the profiles specified in Section 9 of this profiles specified in Section 9 MUST ignore PBU with values of
version of the document MUST ignore PBU with values of
reserved_zero_8bits greater than 0. reserved_zero_8bits greater than 0.
frame_width frame_width
specifies the width of the frame in units of luma samples. specifies the width of the frame in units of luma samples.
frame_width MUST be a multiple of 2 when chroma_format_idc has a frame_width MUST be a multiple of 2 when chroma_format_idc has a
value of 2. The value 0 is reserved for future use. value of 2. The value 0 is reserved for future use.
frame_height frame_height
specifies the height of the frame in units of luma samples. The specifies the height of the frame in units of luma samples. The
value 0 is reserved for future use. value 0 is reserved for future use.
skipping to change at line 1224 skipping to change at line 1218
values are reserved for future use. values are reserved for future use.
capture_time_distance capture_time_distance
indicates the time difference between the capture time of the indicates the time difference between the capture time of the
frames in the previous access unit and frames in the current frames in the previous access unit and frames in the current
access unit in milliseconds if there has been any access unit access unit in milliseconds if there has been any access unit
preceding the access unit this frame belongs to. preceding the access unit this frame belongs to.
reserved_zero_8bits reserved_zero_8bits
MUST be equal to 0 in bitstreams conforming to the profiles MUST be equal to 0 in bitstreams conforming to the profiles
specified in Section 9 of this version of the document. Values of specified in Section 9. Values of reserved_zero_8bits greater
reserved_zero_8bits greater than 0 are reserved for future use. than 0 are reserved for future use. Decoders conforming to the
Decoders conforming to the profiles specified in Section 9 of this profiles specified in Section 9 MUST ignore PBU with values of
version of the document MUST ignore PBU with values of
reserved_zero_8bits greater than 0. reserved_zero_8bits greater than 0.
5.3.7. Quantization Matrix 5.3.7. Quantization Matrix
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
quantization_matrix(){ | quantization_matrix(){ |
for(i = 0; i < NumComps; i++){ | for(i = 0; i < NumComps; i++){ |
for(y = 0; y < 8; y++){ | for(y = 0; y < 8; y++){ |
for(x = 0; x < 8; x++){ | for(x = 0; x < 8; x++){ |
skipping to change at line 1250 skipping to change at line 1243
} | } |
} | } |
} | } |
Figure 14: quantization_matrix() syntax code Figure 14: quantization_matrix() syntax code
q_matrix[i][x][y] q_matrix[i][x][y]
specifies a scaling value in the quantization matrices. When specifies a scaling value in the quantization matrices. When
q_matrix[i][x][y] is not present, it is inferred to be equal to q_matrix[i][x][y] is not present, it is inferred to be equal to
16. The array index i specifies an indicator for the color 16. The array index i specifies an indicator for the color
component; when chroma_format_idc is equal to 2 or 3, 0 for Y, 1 component; when chroma_format_idc is equal to 2 or 3, the value of
for Cb, and 2 for Cr. The value of 0 for q_matrix[i][x][y] is the index i is equal to 0 for Y component, 1 for Cb, and 2 for Cr.
reserved for future use. The value of 0 for q_matrix[i][x][y] is reserved for future use.
The quantization matrix, QMatrix[i][x][y], is derived as follows: The quantization matrix, QMatrix[i][x][y], is derived as follows:
* QMatrix[i][x][y] = q_matrix[i][x][y] * QMatrix[i][x][y] = q_matrix[i][x][y]
5.3.8. Tile Info 5.3.8. Tile Info
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
tile_info(){ | tile_info(){ |
skipping to change at line 1334 skipping to change at line 1327
Figure 16: au_info() syntax code Figure 16: au_info() syntax code
num_frames num_frames
indicates the number of frames contained in the current AU. indicates the number of frames contained in the current AU.
pbu_type pbu_type
has the same semantics as pbu_type in the pbu_header() syntax. has the same semantics as pbu_type in the pbu_header() syntax.
Note: The value of pbu_type MUST be 1, 2, 25, 26, or 27 in Note: The value of pbu_type MUST be 1, 2, 25, 26, or 27 in
bitstreams conforming to this version of the document. bitstreams conforming to this document.
group_id group_id
has the same semantics as group_id in the pbu_header() syntax. has the same semantics as group_id in the pbu_header() syntax.
reserved_zero_8bits reserved_zero_8bits
MUST be equal to 0 in bitstreams conforming to the profiles MUST be equal to 0 in bitstreams conforming to the profiles
specified in Section 9 of this version of the document. Values of specified in Section 9. Values of reserved_zero_8bits greater
reserved_zero_8bits greater than 0 are reserved for future use. than 0 are reserved for future use. Decoders conforming to the
Decoders conforming to the profiles specified in Section 9 of this profiles specified in Section 9 MUST ignore PBU with values of
version of the document MUST ignore PBU with values of
reserved_zero_8bits greater than 0. reserved_zero_8bits greater than 0.
5.3.10. Metadata 5.3.10. Metadata
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
metadata(){ | metadata(){ |
metadata_size | u(32) metadata_size | u(32)
currReadSize = 0 | currReadSize = 0 |
do{ | do{ |
skipping to change at line 1460 skipping to change at line 1452
tile_header_size tile_header_size
indicates the size of the tile header in bytes. indicates the size of the tile header in bytes.
tile_index tile_index
specifies the tile index in raster order in a frame. tile_index specifies the tile index in raster order in a frame. tile_index
MUST have the same value as tileIdx. MUST have the same value as tileIdx.
tile_data_size[i] tile_data_size[i]
indicates the size of the i-th color component data in a tile in indicates the size of the i-th color component data in a tile in
bytes. The array index i specifies an indicator for the color bytes. The array index i specifies an indicator for the color
component; when chroma_format_idc is equal to 2 or 3, 0 for Y, 1 component; when chroma_format_idc is equal to 2 or 3, the value of
for Cb, and 2 for Cr. The value of 0 for tile_data_size[i] is the index i is equal to 0 for Y component, 1 for Cb, and 2 for Cr.
reserved for future use. The value of 0 for tile_data_size[i] is reserved for future use.
tile_qp[i] tile_qp[i]
specifies the quantization parameter value for i-th color specifies the quantization parameter value for i-th color
component. The array index i specifies an indicator for the color component. The array index i specifies an indicator for the color
component; when chroma_format_idc is equal to 2 or 3, 0 for Y, 1 component; when chroma_format_idc is equal to 2 or 3, the value of
for Cb, and 2 for Cr. The Qp[i] to be used for the MBs in the the index i is equal to 0 for Y component, 1 for Cb, and 2 for Cr.
tile are derived as follows: The Qp[i] to be used for the MBs in the tile are derived as
follows:
* Qp[i] = tile_qp[i] - QpBdOffset * Qp[i] = tile_qp[i] - QpBdOffset
* Qp[i] MUST be in the range of -QpBdOffset to 51, inclusive. * Qp[i] MUST be in the range of -QpBdOffset to 51, inclusive.
reserved_zero_8bits reserved_zero_8bits
MUST be equal to 0 in bitstreams conforming to the profiles MUST be equal to 0 in bitstreams conforming to the profiles
specified in Section 9 of this version of the document. Values of specified in Section 9. Values of reserved_zero_8bits greater
reserved_zero_8bits greater than 0 are reserved for future use. than 0 are reserved for future use. Decoders conforming to the
Decoders conforming to the profiles specified in Section 9 of this profiles specified in Section 9 MUST ignore PBU with values of
version of the document MUST ignore PBU with values of
reserved_zero_8bits greater than 0. reserved_zero_8bits greater than 0.
5.3.14. Tile Data 5.3.14. Tile Data
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
tile_data(tileIdx, cIdx){ | tile_data(tileIdx, cIdx){ |
x0 = ColStarts[tileIdx % TileCols] | x0 = ColStarts[tileIdx % TileCols] |
y0 = RowStarts[tileIdx // TileCols] | y0 = RowStarts[tileIdx // TileCols] |
numMbColsInTile = (ColStarts[tileIdx % TileCols + 1] - | numMbColsInTile = (ColStarts[tileIdx % TileCols + 1] - |
skipping to change at line 1508 skipping to change at line 1500
for(i = 0; i < numMbsInTile; i++){ | for(i = 0; i < numMbsInTile; i++){ |
xMb = x0 + ((i % numMbColsInTile) * MbWidth) | xMb = x0 + ((i % numMbColsInTile) * MbWidth) |
yMb = y0 + ((i // numMbColsInTile) * MbHeight) | yMb = y0 + ((i // numMbColsInTile) * MbHeight) |
macroblock_layer(xMb, yMb, cIdx) | macroblock_layer(xMb, yMb, cIdx) |
} | } |
byte_alignment() | byte_alignment() |
} | } |
Figure 21: tile_data() syntax code Figure 21: tile_data() syntax code
The tile_data() syntax calculates the location of the macroblocks
belonging to each tile and collects them.
5.3.15. Macroblock Layer 5.3.15. Macroblock Layer
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
macroblock_layer(xMb, yMb, cIdx){ | macroblock_layer(xMb, yMb, cIdx){ |
subW = (cIdx == 0)? 1 : SubWidthC | subW = (cIdx == 0)? 1 : SubWidthC |
subH = (cIdx == 0)? 1 : SubHeightC | subH = (cIdx == 0)? 1 : SubHeightC |
blkWidth = (cIdx == 0)? MbWidth : MbWidthC | blkWidth = (cIdx == 0)? MbWidth : MbWidthC |
blkHeight = (cIdx == 0)? MbHeight : MbHeightC | blkHeight = (cIdx == 0)? MbHeight : MbHeightC |
TrSize = 8 | TrSize = 8 |
skipping to change at line 1552 skipping to change at line 1547
specifies the sign of the difference between the current DC specifies the sign of the difference between the current DC
transform coefficient level and PrevDC. sign_dc_coeff_diff equal transform coefficient level and PrevDC. sign_dc_coeff_diff equal
to 0 specifies that the difference has a positive value. to 0 specifies that the difference has a positive value.
sign_dc_coeff_diff equal to 1 specifies that the difference has a sign_dc_coeff_diff equal to 1 specifies that the difference has a
negative value. negative value.
The transform coefficients are represented by the arrays The transform coefficients are represented by the arrays
TransCoeff[cIdx][x0][y0]. The array indices x0, y0 specify the TransCoeff[cIdx][x0][y0]. The array indices x0, y0 specify the
location (x0, y0) relative to the top-left sample for each component location (x0, y0) relative to the top-left sample for each component
of the frame. The array index cIdx specifies an indicator for the of the frame. The array index cIdx specifies an indicator for the
color component; when chroma_format_idc is equal to 2 or 3, 0 for Y, color component; when chroma_format_idc is equal to 2 or 3, the value
1 for Cb, and 2 for Cr. The value of TransCoeff[cIdx][x0][y0] MUST of the index i is equal to 0 for Y component, 1 for Cb, and 2 for Cr.
be in the range of -32768 to 32767, inclusive. The value of TransCoeff[cIdx][x0][y0] MUST be in the range of -32768
to 32767, inclusive.
5.3.16. AC Coefficient Coding 5.3.16. AC Coefficient Coding
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
ac_coeff_coding(x0, y0, log2BlkWidth, log2BlkHeight, cIdx){ | ac_coeff_coding(x0, y0, log2BlkWidth, log2BlkHeight, cIdx){ |
scanPos = 1 | scanPos = 1 |
firstAC = 1 | firstAC = 1 |
PrevLevel = Prev1stAcLevel | PrevLevel = Prev1stAcLevel |
PrevRun = 0 | PrevRun = 0 |
skipping to change at line 1646 skipping to change at line 1642
This process is invoked to obtain a decoded frame from a bitstream. This process is invoked to obtain a decoded frame from a bitstream.
Input to this process is a bitstream of a coded frame. Output of Input to this process is a bitstream of a coded frame. Output of
this process is a decoded frame. this process is a decoded frame.
The decoding process operates as follows for the current frame: The decoding process operates as follows for the current frame:
* The syntax structure for a coded frame is parsed to obtain the * The syntax structure for a coded frame is parsed to obtain the
parsed syntax structures. parsed syntax structures.
* The processes in Sections 6.1, 6.2, and 6.3 specify the decoding * The processes in Sections 6.1, 6.2, and 6.3 specify the decoding
processes using syntax elements in all syntax structures. It is processes using syntax elements in all syntax structures. For
the requirement of bitstream conformance that the coded tiles of bitstreams conforming to this document, the coded tiles of the
the frame MUST contain tile data for every MB of the frame, such frame MUST contain tile data for every MB of the frame, such that
that the division of the frame into tiles and the division of the the division of the frame into tiles and the division of the tiles
tiles into MBs each forms a partitioning of the frame. into MBs form a partitioning of the frame.
* After all the tiles in the current frame have been decoded, the * After all the tiles in the current frame have been decoded, the
decoded frame is cropped using the cropping rectangle if decoded frame is cropped using the cropping rectangle if
FrameWidthInSamplesY is not equal to FrameWidthInMbY * MbWidth or FrameWidthInSamplesY is not equal to FrameWidthInMbY * MbWidth or
FrameHeightInSamplesY is not equal to FrameHeightInMbsY * FrameHeightInSamplesY is not equal to FrameHeightInMbsY *
MbHeight. MbHeight.
* The cropping rectangle, which specifies the samples of a frame * The cropping rectangle, which specifies the samples of a frame
that are output, is derived as follows: that are output, is derived as follows:
skipping to change at line 1677 skipping to change at line 1673
frame coordinates (x//SubWidthC, y//SubHeightC), where (x,y) frame coordinates (x//SubWidthC, y//SubHeightC), where (x,y)
are the frame coordinates of the specified luma samples. are the frame coordinates of the specified luma samples.
6.1. MB Decoding Process 6.1. MB Decoding Process
This process is invoked for each MB. This process is invoked for each MB.
Input to this process is a luma location (xMb, yMb) specifying the Input to this process is a luma location (xMb, yMb) specifying the
top-left sample of the current luma MB relative to the top-left luma top-left sample of the current luma MB relative to the top-left luma
sample of the current frame. Outputs of this process are the sample of the current frame. Outputs of this process are the
reconstructed samples of all the NumComps color components (when reconstructed samples of all color components. The total number of
chroma_format_idc is equal to 2 or 3, Y, Cb, and Cr) for the current color components is indicated by the value of NumComps for the
MB. current MB. For example, when chroma_format_idc is equal to 2 or 3,
the value of NumComps is equal to 3 and three components, Y
component, Cb component, and Cr component, are reconstructed
The following steps apply: The following steps apply:
* Let recSamples[0] be a (MbWidth)x(MbHeight) array of the * Let recSamples[0] be a (MbWidth)x(MbHeight) array of the
reconstructed samples of the first color component (when reconstructed samples of the first color component (when
chroma_format_idc is equal to 2 or 3, Y). chroma_format_idc is equal to 2 or 3, Y).
* The block reconstruction process as specified in Section 6.2 is * The block reconstruction process as specified in Section 6.2 is
invoked with the luma location (xMb, yMb), the variable nBlkW set invoked with the luma location (xMb, yMb), the variable nBlkW set
equal to MbWidth, the variable nBlkH set equal to MbHeight, the equal to MbWidth, the variable nBlkH set equal to MbHeight, the
variable cIdx set equal to 0, and the (MbWidth)x(MbHeight) array variable cIdx set equal to 0, and the (MbWidth)x(MbHeight) array
recSamples[0] as inputs. The output is a modified version of the recSamples[0] as inputs. The output is a modified version of the
(MbWidth)x(MbHeight) array recSamples[0], which is the (MbWidth)x(MbHeight) array recSamples[0], which is the
reconstructed samples of the first color component for the current reconstructed samples of the first color component for the current
MB. MB.
* When chroma_format_idc is not equal to 0, let recSamples[1] be a * When chroma_format_idc is not equal to 0, let recSamples[1] be a
(MbWidthC)x(MbHeightC) array of the reconstructed samples of the (MbWidthC)x(MbHeightC) array of the reconstructed samples of the
second color component (when chroma_format_idc is equal to 2 or 3, second color component. For example, when chroma_format_idc is
Cb). equal to 2 or 3, recSamples[1] is the Cb color component.
* When chroma_format_idc is not equal to 0, the block reconstruction * When chroma_format_idc is not equal to 0, the block reconstruction
process as specified in Section 6.2 is invoked with the luma process as specified in Section 6.2 is invoked with the luma
location (xMb, yMb), the variable nBlkW set equal to MbWidthC, the location (xMb, yMb), the variable nBlkW set equal to MbWidthC, the
variable nBlkH set equal to MbHeightC, the variable cIdx set equal variable nBlkH set equal to MbHeightC, the variable cIdx set equal
to 1, and the (MbWidthC)x(MbHeightC) array recSamples[1] as to 1, and the (MbWidthC)x(MbHeightC) array recSamples[1] as
inputs. The output is a modified version of the inputs. The output is a modified version of the
(MbWidthC)x(MbHeightC) array recSamples[1], which is the (MbWidthC)x(MbHeightC) array recSamples[1], which is the
reconstructed samples of the second color component for the reconstructed samples of the second color component for the
current MB. current MB.
* When chroma_format_idc is not equal to 0, let recSamples[2] be a * When chroma_format_idc is not equal to 0, let recSamples[2] be a
(MbWidthC)x(MbHeightC) array of the reconstructed samples of the (MbWidthC)x(MbHeightC) array of the reconstructed samples of the
third color component(when chroma_format_idc is equal to 2 or 3, third color component. For example, when chroma_format_idc is
Cr). equal to 2 or 3, recSamples[2] is the Cr color component.
* When chroma_format_idc is not equal to 0, the block reconstruction * When chroma_format_idc is not equal to 0, the block reconstruction
process as specified in Section 6.2 is invoked with the luma process as specified in Section 6.2 is invoked with the luma
location (xMb, yMb), the variable nBlkW set equal to MbWidthC, the location (xMb, yMb), the variable nBlkW set equal to MbWidthC, the
variable nBlkH set equal to MbHeightC, the variable cIdx set equal variable nBlkH set equal to MbHeightC, the variable cIdx set equal
to 2, and the (MbWidthC)x(MbHeightC) array recSamples[2] as to 2, and the (MbWidthC)x(MbHeightC) array recSamples[2] as
inputs. The output is a modified version of the inputs. The output is a modified version of the
(MbWidthC)x(MbHeightC) array recSamples[2], which is the (MbWidthC)x(MbHeightC) array recSamples[2], which is the
reconstructed samples of the third color component for the current reconstructed samples of the third color component for the current
MB. MB.
skipping to change at line 1771 skipping to change at line 1769
* The variables numBlkX and numBlkY are derived as follows: * The variables numBlkX and numBlkY are derived as follows:
- numBlkX = nBlkW // TrSize - numBlkX = nBlkW // TrSize
- numBlkY = nBlkH // TrSize - numBlkY = nBlkH // TrSize
* For yIdx = 0..numBlkY - 1, the following applies: * For yIdx = 0..numBlkY - 1, the following applies:
- For xIdx = 0..numBlkX - 1, the following applies: - For xIdx = 0..numBlkX - 1, the following applies:
The variables xBlk and yBlk are derived as follows: o The variables xBlk and yBlk are derived as follows:
* xBlk = xMb // (cIdx==0? 1: SubWidthC) + xIdx*TrSize + xBlk = xMb // (cIdx==0? 1: SubWidthC) + xIdx*TrSize
* yBlk = yMb // (cIdx==0? 1: SubHeightC) + yIdx*TrSize + yBlk = yMb // (cIdx==0? 1: SubHeightC) + yIdx*TrSize
* The scaling and transformation process as specified in Section 6.3 o The scaling and transformation process as specified in
is invoked with the location (xBlk, yBlk), the variable cIdx set Section 6.3 is invoked with the location (xBlk, yBlk), the
equal to cIdx, the transform width nBlkW set equal to TrSize, and variable cIdx set equal to cIdx, the transform width nBlkW
the transform height nBlkH set equal to TrSize as inputs. The set equal to TrSize, and the transform height nBlkH set
output is a (TrSize)x(TrSize) array r of a reconstructed block. equal to TrSize as inputs. The output is a
(TrSize)x(TrSize) array r of a reconstructed block.
* The (TrSize)x(TrSize) array recSamples is modified as follows: o The (TrSize)x(TrSize) array recSamples is modified as
follows:
- recSamples[(xIdx * TrSize) + i, (yIdx * TrSize) + j] = r[i,j], + recSamples[(xIdx * TrSize) + i, (yIdx * TrSize) + j] =
with i=0..TrSize-1, j=0..TrSize-1 r[i,j], with i=0..TrSize-1, j=0..TrSize-1
6.3. Scaling and Transformation Process 6.3. Scaling and Transformation Process
Inputs to this process are: Inputs to this process are:
* a location (xBlkY, yBlkY) of the current color component * a location (xBlkY, yBlkY) of the current color component
specifying the top-left sample of the current block relative to specifying the top-left sample of the current block relative to
the top-left sample of the current frame, the top-left sample of the current frame,
* a variable cIdx specifying the color component of the current * a variable cIdx specifying the color component of the current
skipping to change at line 1927 skipping to change at line 1927
6.3.2.2. Transformation Process 6.3.2.2. Transformation Process
Inputs to this process are: Inputs to this process are:
* a variable nTbS specifying the sample size of scaled transform * a variable nTbS specifying the sample size of scaled transform
coefficients, and coefficients, and
* a list of scaled transform coefficients x with elements x[j], with * a list of scaled transform coefficients x with elements x[j], with
j = 0..(nTbS - 1). j = 0..(nTbS - 1).
* Output of this process is the list of transformed samples y with Output of this process is the list of transformed samples y with
elements y[i], with i = 0..(nTbS - 1). elements y[i], with i = 0..(nTbS - 1).
* The transformation matrix derivation process as specified in The transformation matrix derivation process as specified in
Section 6.3.2.3 is invoked with the transform size nTbS as input, Section 6.3.2.3 is invoked with the transform size nTbS as input, and
and the transformation matrix transMatrix as output. the transformation matrix transMatrix as output.
* The list of transformed samples y[i] with i = 0..(nTbS - 1) is The list of transformed samples y[i] with i = 0..(nTbS - 1) is
derived as follows: derived as follows:
- y[i] = sum(j = 0, nTbS - 1, transMatrix[i][j] * x[j]) * y[i] = sum(j = 0, nTbS - 1, transMatrix[i][j] * x[j])
6.3.2.3. Transformation Matrix Derivation Process 6.3.2.3. Transformation Matrix Derivation Process
Input to this process is a variable nTbS specifying the horizontal Input to this process is a variable nTbS specifying the horizontal
sample size of scaled transform coefficients. sample size of scaled transform coefficients.
Output of this process is the transformation matrix transMatrix. Output of this process is the transformation matrix transMatrix.
The transformation matrix transMatrix is derived based on nTbs as The transformation matrix transMatrix is derived based on nTbs as
follows: follows:
skipping to change at line 2188 skipping to change at line 2188
metadata_user_defined(payloadSize) | metadata_user_defined(payloadSize) |
} | } |
else{ | else{ |
metadata_undefined(payloadSize) | metadata_undefined(payloadSize) |
} | } |
byte_alignment() | byte_alignment() |
} | } |
Figure 28: metadata_payload() syntax code Figure 28: metadata_payload() syntax code
The syntax and semantics of each type of metadata are defined in
Section 8.2.
8.2. List of Metadata Syntax and Semantics 8.2. List of Metadata Syntax and Semantics
8.2.1. Filler Metadata 8.2.1. Filler Metadata
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
metadata_filler(payloadSize){ | metadata_filler(payloadSize){ |
for(i = 0; i < payloadSize; i++){ | for(i = 0; i < payloadSize; i++){ |
ff_byte | f(8) ff_byte | f(8)
} | } |
skipping to change at line 2268 skipping to change at line 2271
white_point_chromaticity_x | u(16) white_point_chromaticity_x | u(16)
white_point_chromaticity_y | u(16) white_point_chromaticity_y | u(16)
max_mastering_luminance | u(32) max_mastering_luminance | u(32)
min_mastering_luminance | u(32) min_mastering_luminance | u(32)
} | } |
Figure 30: metadata_mdcv() syntax code Figure 30: metadata_mdcv() syntax code
primary_chromaticity_x[i] primary_chromaticity_x[i]
specifies a 0.16 fixed-point format of X chromaticity coordinate specifies a 0.16 fixed-point format of X chromaticity coordinate
of mastering display as defined by CIE 1931, where i = 0, 1, 2 of mastering display in terms of CIE 1931 as specified in
specifies Red, Green, Blue, respectively. [ISO11664-1], where i = 0, 1, 2 specifies Red, Green, Blue,
respectively.
primary_chromaticity_y[i] primary_chromaticity_y[i]
specifies a 0.16 fixed-point format of Y chromaticity coordinate specifies a 0.16 fixed-point format of Y chromaticity coordinate
of mastering display as defined by CIE 1931, where i = 0, 1, 2 of mastering display in terms of CIE 1931 as specified in
specifies Red, Green, Blue, respectively. [ISO11664-1], where i = 0, 1, 2 specifies Red, Green, Blue,
respectively.
white_point_chromaticity_x white_point_chromaticity_x
specifies a 0.16 fixed-point format of white point X chromaticity specifies a 0.16 fixed-point format of white point X chromaticity
coordinate of mastering display as defined by CIE 1931. coordinate of mastering display in terms of CIE 1931 as specified
in [ISO11664-1].
white_point_chromaticity_y white_point_chromaticity_y
specifies a 0.16 fixed-point format of white point Y chromaticity specifies a 0.16 fixed-point format of white point Y chromaticity
coordinate as mastering display defined by CIE 1931. coordinate as mastering display in terms of CIE 1931 as specified
in [ISO11664-1].
max_mastering_luminance max_mastering_luminance
is a 24.8 fixed-point format of maximum display mastering is a 24.8 fixed-point format of maximum display mastering
luminance, represented in candelas per square meter. luminance, represented in candelas per square meter.
min_mastering_luminance min_mastering_luminance
is an 18.14 fixed-point format of minimum display mastering is an 18.14 fixed-point format of minimum display mastering
luminance, represented in candelas per square meter. luminance, represented in candelas per square meter.
8.2.4. Content Light-Level Information Metadata 8.2.4. Content Light-Level Information Metadata
skipping to change at line 2305 skipping to change at line 2312
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
metadata_cll(payloadSize){ | metadata_cll(payloadSize){ |
max_cll | u(16) max_cll | u(16)
max_fall | u(16) max_fall | u(16)
} | } |
Figure 31: metadata_cll() syntax code Figure 31: metadata_cll() syntax code
max_cll max_cll
specifies the maximum content light level information as specified specifies the maximum content light level information as specified
in [CEA-861.3], Appendix A. in [CTA-861.3], Appendix A.
max_fall max_fall
specifies the maximum frame-average light level information as specifies the maximum frame-average light level information as
specified in [CEA-861.3], Appendix A. specified in [CTA-861.3], Appendix A.
8.2.5. User-Defined Metadata 8.2.5. User-Defined Metadata
This metadata has user data identified by a universal unique This metadata has user data identified by a universal unique
identifier as specified in [RFC9562], the contents of which are not identifier as specified in [RFC9562], the contents of which are not
specified in this document. specified in this document.
syntax code | type syntax code | type
------------------------------------------------------------|----- ------------------------------------------------------------|-----
metadata_user_defined(payloadSize){ | metadata_user_defined(payloadSize){ |
skipping to change at line 2378 skipping to change at line 2385
subset of features supported in a profile. subset of features supported in a profile.
Each level with a band specifies a set of limits on the values that Each level with a band specifies a set of limits on the values that
may be taken by the syntax elements of this document. For any given may be taken by the syntax elements of this document. For any given
profile, a level with a band generally corresponds to a particular profile, a level with a band generally corresponds to a particular
decoder processing load and memory capability. The constraints set decoder processing load and memory capability. The constraints set
by levels and bands are orthogonal to the constraints defined by by levels and bands are orthogonal to the constraints defined by
profiles so that the same set of level and band definitions is used profiles so that the same set of level and band definitions is used
with all profiles. For example, a certain level L and a certain band with all profiles. For example, a certain level L and a certain band
B can be combined with either profile X or profile Y to specifically B can be combined with either profile X or profile Y to specifically
different set of constraints. define two different sets of constraints.
NOTE: Individual implementations may support a different level for NOTE: Individual implementations may support a different level for
each supported profile. each supported profile.
9.2. Requirements on Video Decoder Capability 9.2. Requirements on Video Decoder Capability
Capabilities of video decoders conforming to this document are Capabilities of video decoders conforming to this document are
specified in terms of the ability to decode video streams conforming specified in terms of the ability to decode video streams conforming
to the constraints of profiles, levels, and bands specified in this to the constraints of profiles, levels, and bands specified in this
section. When expressing the capabilities of a decoder for a section. When expressing the capabilities of a decoder for a
skipping to change at line 2427 skipping to change at line 2434
Coded frames conforming to the 422-10 profile MUST obey the following Coded frames conforming to the 422-10 profile MUST obey the following
constraints: constraints:
* chroma_format_idc MUST be equal to 2. * chroma_format_idc MUST be equal to 2.
* bit_depth_minus8 MUST be equal to 2. * bit_depth_minus8 MUST be equal to 2.
* pbu_type MUST be equal to 1. * pbu_type MUST be equal to 1.
Any levels and bands constraints specified in Section 9.4 MUST be Coded frames conforming to the 422-10 profile MUST also conform to
fulfilled. Decoders conforming to the 422-10 profile at a specific any levels and bands constraints specified in Section 9.4. Decoders
level (identified by a specific value of L) and a specific band conforming to the 422-10 profile at a specific level (identified by a
(identified by a specific value of B) MUST be capable of decoding all specific value of L) and a specific band (identified by a specific
coded frames for which all of the following conditions apply: value of B) MUST be capable of decoding all coded frames for which
all of the following conditions apply:
* The coded frame is indicated to conform to the 422-10 profile. * The coded frame is indicated to conform to the 422-10 profile.
* The coded frame is indicated to conform to a level (by a specific * The coded frame is indicated to conform to a level (by a specific
value of level_idc) that is lower than or equal to level L. value of level_idc) that is lower than or equal to level L.
* The coded frame is indicated to conform to a band (by a specific * The coded frame is indicated to conform to a band (by a specific
value of band_idc) that is lower than or equal to level B. value of band_idc) that is lower than or equal to band B.
9.3.3. 422-12 Profile 9.3.3. 422-12 Profile
Conformance of a coded frame to the 422-12 profile is indicated by Conformance of a coded frame to the 422-12 profile is indicated by
profile_idc equal to 44. profile_idc equal to 44.
Coded frames conforming to the 422-12 profile MUST obey the following Coded frames conforming to the 422-12 profile MUST obey the following
constraints: constraints:
* chroma_format_idc MUST be equal to 2. * chroma_format_idc MUST be equal to 2.
* bit_depth_minus8 MUST be in the range of 2 to 4. * bit_depth_minus8 MUST be in the range of 2 to 4.
* pbu_type MUST be equal to 1. * pbu_type MUST be equal to 1.
Any levels and bands constraints specified in Section 9.4 MUST be Coded frames conforming to the 422-12 profile MUST also conform to
fulfilled. Decoders conforming to the 422-12 profile at a specific any levels and bands constraints specified in Section 9.4. Decoders
level (identified by a specific value of L) and a specific band conforming to the 422-12 profile at a specific level (identified by a
(identified by a specific value of B) MUST be capable of decoding all specific value of L) and a specific band (identified by a specific
coded frames for which all of the following conditions apply: value of B) MUST be capable of decoding all coded frames for which
all of the following conditions apply:
* The coded frame is indicated to conform to the 422-12 profile or * The coded frame is indicated to conform to the 422-12 profile or
the 422-10 profile. the 422-10 profile.
* The coded frame is indicated to conform to a level (by a specific * The coded frame is indicated to conform to a level (by a specific
value of level_idc) that is lower than or equal to level L. value of level_idc) that is lower than or equal to level L.
* The coded frame is indicated to conform to a band (by a specific * The coded frame is indicated to conform to a band (by a specific
value of band_idc) that is lower than or equal to level B. value of band_idc) that is lower than or equal to band B.
9.3.4. 444-10 Profile 9.3.4. 444-10 Profile
Conformance of a coded frame to the 444-10 profile is indicated by Conformance of a coded frame to the 444-10 profile is indicated by
profile_idc equal to 55. profile_idc equal to 55.
Coded frames conforming to the 444-10 profile MUST obey the following Coded frames conforming to the 444-10 profile MUST obey the following
constraints: constraints:
* chroma_format_idc MUST be in the range of 2 to 3. * chroma_format_idc MUST be in the range of 2 to 3.
* bit_depth_minus8 MUST be equal to 2. * bit_depth_minus8 MUST be equal to 2.
* pbu_type MUST be equal to 1. * pbu_type MUST be equal to 1.
Any levels and bands constraints specified in Section 9.4 MUST be Coded frames conforming to the 444-10 profile MUST also conform to
fulfilled. Decoders conforming to the 444-10 profile at a specific any levels and bands constraints specified in Section 9.4. Decoders
level (identified by a specific value of L) and a specific band conforming to the 444-10 profile at a specific level (identified by a
(identified by a specific value of B) MUST be capable of decoding all specific value of L) and a specific band (identified by a specific
coded frames for which all of the following conditions apply: value of B) MUST be capable of decoding all coded frames for which
all of the following conditions apply:
* The coded frame is indicated to conform to the 444-10 profile or * The coded frame is indicated to conform to the 444-10 profile or
the 422-10 profile. the 422-10 profile.
* The coded frame is indicated to conform to a level (by a specific * The coded frame is indicated to conform to a level (by a specific
value of level_idc) that is lower than or equal to level L. value of level_idc) that is lower than or equal to level L.
* The coded frame is indicated to conform to a band (by a specific * The coded frame is indicated to conform to a band (by a specific
value of band_idc) that is lower than or equal to level B. value of band_idc) that is lower than or equal to band B.
9.3.5. 444-12 Profile 9.3.5. 444-12 Profile
Conformance of a coded frame to the 444-12 profile is indicated by Conformance of a coded frame to the 444-12 profile is indicated by
profile_idc equal to 66. profile_idc equal to 66.
Coded frames conforming to the 444-12 profile MUST obey the following Coded frames conforming to the 444-12 profile MUST obey the following
constraints: constraints:
* chroma_format_idc MUST be in the range of 2 to 3. * chroma_format_idc MUST be in the range of 2 to 3.
* bit_depth_minus8 MUST be in the range of 2 to 4. * bit_depth_minus8 MUST be in the range of 2 to 4.
* pbu_type MUST be equal to 1. * pbu_type MUST be equal to 1.
Any levels and bands constraints specified in Section 9.4 MUST be Coded frames conforming to the 444-12 profile MUST also conform to
fulfilled. Decoders conforming to the 444-12 profile at a specific any levels and bands constraints specified in Section 9.4. Decoders
level (identified by a specific value of L) and a specific band conforming to the 444-12 profile at a specific level (identified by a
(identified by a specific value of B) MUST be capable of decoding all specific value of L) and a specific band (identified by a specific
coded frames for which all of the following conditions apply: value of B) MUST be capable of decoding all coded frames for which
all of the following conditions apply:
* The coded frame is indicated to conform to the 444-12 profile, the * The coded frame is indicated to conform to the 444-12 profile, the
444-10 profile, the 422-12 profile, or the 422-10 profile. 444-10 profile, the 422-12 profile, or the 422-10 profile.
* The coded frame is indicated to conform to a level (by a specific * The coded frame is indicated to conform to a level (by a specific
value of level_idc) that is lower than or equal to level L. value of level_idc) that is lower than or equal to level L.
* The coded frame is indicated to conform to a band (by a specific * The coded frame is indicated to conform to a band (by a specific
value of band_idc) that is lower than or equal to level B. value of band_idc) that is lower than or equal to band B.
9.3.6. 4444-10 Profile 9.3.6. 4444-10 Profile
Conformance of a coded frame to the 4444-10 profile is indicated by Conformance of a coded frame to the 4444-10 profile is indicated by
profile_idc equal to 77. profile_idc equal to 77.
Coded frames conforming to the 4444-10 profile MUST obey the Coded frames conforming to the 4444-10 profile MUST obey the
following constraints: following constraints:
* chroma_format_idc MUST be in the range of 2 to 4. * chroma_format_idc MUST be in the range of 2 to 4.
* bit_depth_minus8 MUST be equal to 2. * bit_depth_minus8 MUST be equal to 2.
* pbu_type MUST be equal to 1. * pbu_type MUST be equal to 1.
Any levels and bands constraints specified in Section 9.4 MUST be Coded frames conforming to the 4444-10 profile MUST also conform to
fulfilled. Decoders conforming to the 4444-10 profile at a specific any levels and bands constraints specified in Section 9.4. Decoders
level (identified by a specific value of L) and a specific band conforming to the 4444-10 profile at a specific level (identified by
(identified by a specific value of B) MUST be capable of decoding all a specific value of L) and a specific band (identified by a specific
coded frames for which all of the following conditions apply: value of B) MUST be capable of decoding all coded frames for which
all of the following conditions apply:
* The coded frame is indicated to conform to the 4444-10 profile, * The coded frame is indicated to conform to the 4444-10 profile,
the 444-10 profile, or the 422-10 profile. the 444-10 profile, or the 422-10 profile.
* The coded frame is indicated to conform to a level (by a specific * The coded frame is indicated to conform to a level (by a specific
value of level_idc) that is lower than or equal to level L. value of level_idc) that is lower than or equal to level L.
* The coded frame is indicated to conform to a band (by a specific * The coded frame is indicated to conform to a band (by a specific
value of band_idc) that is lower than or equal to level B. value of band_idc) that is lower than or equal to band B.
9.3.7. 4444-12 Profile 9.3.7. 4444-12 Profile
Conformance of a coded frame to the 4444-12 profile is indicated by Conformance of a coded frame to the 4444-12 profile is indicated by
profile_idc equal to 88. profile_idc equal to 88.
Coded frames conforming to the 4444-12 profile MUST obey the Coded frames conforming to the 4444-12 profile MUST obey the
following constraints: following constraints:
* chroma_format_idc MUST be in the range of 2 to 4. * chroma_format_idc MUST be in the range of 2 to 4.
* bit_depth_minus8 MUST be in the range of 2 to 4. * bit_depth_minus8 MUST be in the range of 2 to 4.
* pbu_type MUST be equal to 1. * pbu_type MUST be equal to 1.
Any levels and bands constraints specified in Section 9.4 MUST be Coded frames conforming to the 4444-12 profile MUST also conform to
fulfilled. Decoders conforming to the 4444-12 profile at a specific any levels and bands constraints specified in Section 9.4. Decoders
level (identified by a specific value of L) and a specific band conforming to the 4444-12 profile at a specific level (identified by
(identified by a specific value of B) MUST be capable of decoding all a specific value of L) and a specific band (identified by a specific
coded frames for which all of the following conditions apply: value of B) MUST be capable of decoding all coded frames for which
all of the following conditions apply:
* The coded frame is indicated to conform to the 4444-12 profile, * The coded frame is indicated to conform to the 4444-12 profile,
the 4444-10 profile, the 444-12 profile, the 444-10 profile, the the 4444-10 profile, the 444-12 profile, the 444-10 profile, the
422-12 profile, or the 422-10 profile. 422-12 profile, or the 422-10 profile.
* The coded frame is indicated to conform to a level (by a specific * The coded frame is indicated to conform to a level (by a specific
value of level_idc) that is lower than or equal to level L. value of level_idc) that is lower than or equal to level L.
* The coded frame is indicated to conform to a band (by a specific * The coded frame is indicated to conform to a band (by a specific
value of band_idc) that is lower than or equal to level B. value of band_idc) that is lower than or equal to band B.
9.3.8. 400-10 Profile 9.3.8. 400-10 Profile
Conformance of a coded frame to the 400-10 profile is indicated by Conformance of a coded frame to the 400-10 profile is indicated by
profile_idc equal to 99. profile_idc equal to 99.
Coded frames conforming to the 400-10 profile MUST obey the following Coded frames conforming to the 400-10 profile MUST obey the following
constraints: constraints:
* chroma_format_idc MUST be equal to 0. * chroma_format_idc MUST be equal to 0.
* bit_depth_minus8 MUST be equal to 2. * bit_depth_minus8 MUST be equal to 2.
* pbu_type MUST be equal to 1. * pbu_type MUST be equal to 1.
Any levels and bands constraints specified in Section 9.4 MUST be Coded frames conforming to the 400-10 profile MUST also conform to
fulfilled. Decoders conforming to the 400-10 profile at a specific any levels and bands constraints specified in Section 9.4. Decoders
level (identified by a specific value of L) and a specific band conforming to the 400-10 profile at a specific level (identified by a
(identified by a specific value of B) MUST be capable of decoding all specific value of L) and a specific band (identified by a specific
coded frames for which all of the following conditions apply: value of B) MUST be capable of decoding all coded frames for which
all of the following conditions apply:
* The coded frame is indicated to conform to the 400-10 profile. * The coded frame is indicated to conform to the 400-10 profile.
* The coded frame is indicated to conform to a level (by a specific * The coded frame is indicated to conform to a level (by a specific
value of level_idc) that is lower than or equal to level L. value of level_idc) that is lower than or equal to level L.
* The coded frame is indicated to conform to a band (by a specific * The coded frame is indicated to conform to a band (by a specific
value of band_idc) that is lower than or equal to level B. value of band_idc) that is lower than or equal to band B.
9.4. Levels and Bands 9.4. Levels and Bands
9.4.1. General 9.4.1. General
For purposes of comparison of level capabilities, a particular level For purposes of comparison of level capabilities, a particular level
of each band is considered to be a lower level than some other level of each band is considered to be a lower level than some other level
when the value of the level_idc of the particular level of each band when the value of the level_idc of the particular level of each band
is less than that of the other level. is less than that of the other level.
skipping to change at line 2735 skipping to change at line 2749
its allocated memory or to take an excessive amount of resources to its allocated memory or to take an excessive amount of resources to
decode. An overrun in allocated memory could lead to arbitrary code decode. An overrun in allocated memory could lead to arbitrary code
execution by an attacker. The same applies to the encoder, even execution by an attacker. The same applies to the encoder, even
though problems in encoders are typically rare. Malicious video though problems in encoders are typically rare. Malicious video
streams MUST NOT cause the encoder to misbehave because this would streams MUST NOT cause the encoder to misbehave because this would
allow an attacker to attack transcoding gateways. A frequent allow an attacker to attack transcoding gateways. A frequent
security problem in image and video codecs is failure to check for security problem in image and video codecs is failure to check for
integer overflows. An example is allocating "frame_width * integer overflows. An example is allocating "frame_width *
frame_height" in pixel count computations without considering that frame_height" in pixel count computations without considering that
the multiplication result may have overflowed the range of the the multiplication result may have overflowed the range of the
arithmetic type. The implementation MUST ensure that no read outside arithmetic type. The implementation MUST ensure that any data
allocated and initialized memory occurs. outside of allocated and initialized memory cannot be read.
A decoder MUST NOT try to process the metadata whose type is not A decoder MUST NOT try to process the metadata whose type is not
recognized by the implementation. Failure to process any metadata recognized by the implementation. Failure to process any metadata
exactly according to the syntax structure specified MAY put a decoder exactly according to the syntax structure specified MAY put a decoder
in an unknown status. in an unknown status.
None of the content carried in APV is intended to be executable. None of the content carried in APV is intended to be executable.
11. IANA Considerations 11. IANA Considerations
This document has no actions for IANA. This document has no actions for IANA.
12. References 12. References
12.1. Normative References 12.1. Normative References
[CEA-861.3]
CEA, "CEA-861.3, HDR Static Metadata Extension", January
2015.
[CIE15] CIE, "Colorimetry, 4th Edition", DOI 10.25039/TR.015.2018, [CIE15] CIE, "Colorimetry, 4th Edition", DOI 10.25039/TR.015.2018,
2018, 2018,
<https://cie.co.at/publications/colorimetry-4th-edition>. <https://cie.co.at/publications/colorimetry-4th-edition>.
[CTA-861.3]
CTA, "HDR Static Metadata Extensions", CTA-861.3-A,
September 2019.
[H273] ITU-T, "Coding-independent code points for video signal [H273] ITU-T, "Coding-independent code points for video signal
type identification", ITU-T Recommendation H.273, ISO/ type identification", ITU-T Recommendation H.273, ISO/
IEC 23091-2:2025, July 2024, IEC 23091-2:2025, July 2024,
<https://www.itu.int/rec/T-REC-H.273>. <https://www.itu.int/rec/T-REC-H.273>.
[ISO11664-1]
ISO, "Colorimetry - Part 1: CIE standard colorimetric
observers", ISO/CIE 11664-1:2019, 2019,
<https://www.iso.org/standard/74164.html>.
[ISO9899] ISO/IEC, "Information technology - Programming languages - [ISO9899] ISO/IEC, "Information technology - Programming languages -
C", ISO/IEC 9899:2018, 2018, C", ISO/IEC 9899:2024, 2024,
<https://www.iso.org/standard/74528.html>. <https://www.iso.org/standard/82075.html>.
[ITUT-T35] ITU-T, "Procedure for the allocation of ITU-T defined [ITUT-T35] ITU-T, "Procedure for the allocation of ITU-T defined
codes for non-standard facilities", ITU-T codes for non-standard facilities", ITU-T
Recommendation T.35, February 2000, Recommendation T.35, February 2000,
<https://www.itu.int/rec/T-REC-T.35>. <https://www.itu.int/rec/T-REC-T.35>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
skipping to change at line 2801 skipping to change at line 2820
<https://www.oscars.org/>. <https://www.oscars.org/>.
[AOSP16APV] [AOSP16APV]
"Android open source project version 16", "Android open source project version 16",
<https://developer.android.com/about/versions/16/ <https://developer.android.com/about/versions/16/
features#apv>. features#apv>.
[ASWF] "The Academy Software Foundation", <https://www.aswf.io/>. [ASWF] "The Academy Software Foundation", <https://www.aswf.io/>.
[FFmpegAPVdec] [FFmpegAPVdec]
"FFmpeg implementation of APV decoder", 19 April 2025, "FFmpeg implementation of APV decoder", 20 November 2025,
<https://git.ffmpeg.org/gitweb/ffmpeg.git/ <https://ffmpeg.org/download.html#release_8.0>.
commit/483cadf8d77d3260eec8781f5f18c50f27e468f8>.
[FFmpegAPVenc] [FFmpegAPVenc]
"FFmpeg implementation of APV encoder", 23 April 2025, "FFmpeg implementation of APV encoder", 4 May 2025,
<https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/ <https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/
fab691edaf53bbf10429ef3448f1f274e5078395>. fab691edaf53bbf10429ef3448f1f274e5078395>.
[OpenAPV] "OpenAPV", commit 1a7845a, 16 December 2025, [OpenAPV] "OpenAPV", commit 1a7845a, 16 December 2025,
<https://github.com/AcademySoftwareFoundation/openapv>. <https://github.com/AcademySoftwareFoundation/openapv>.
Appendix A. Raw Bitstream Format Appendix A. Raw Bitstream Format
syntax code | type syntax code | type
--------------------------------------------------------------|----- --------------------------------------------------------------|-----
 End of changes. 64 change blocks. 
156 lines changed or deleted 174 lines changed or added

This html diff was produced by rfcdiff 1.48.