<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE rfc [ <!ENTITY nbsp " "> <!ENTITY zwsp "​"> <!ENTITY nbhy "‑"> <!ENTITY wj "⁠"> ]><?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) --><rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lim-apv-09" number="9924" category="info"submissionType="IETF"submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" updates="" obsoletes="" xml:lang="en" version="3"><!-- xml2rfc v2v3 conversion 3.31.0 --><front> <title abbrev="APV">Advanced Professional Video</title> <seriesInfoname="Internet-Draft" value="draft-lim-apv-09"/>name="RFC" value="9924"/> <author initials="Y." surname="Lim" fullname="Youngkwon Lim"> <organization>Samsung Electronics</organization> <address> <postal> <street>6105 Tennyson Pkwy, Ste 300</street><city>Plano, TX</city><city>Plano</city><region>TX</region> <code>75024</code><country>USA</country><country>United States of America</country> </postal> <email>yklwhite@gmail.com</email> </address> </author> <author initials="M." surname="Park" fullname="Minwoo Park"> <organization>Samsung Electronics</organization> <address> <postal> <street>34, Seongchon-gil, Seocho-gu</street> <city>Seoul</city> <code>3573</code> <country>Republic of Korea</country> </postal> <email>m.w.park@samsung.com</email> </address> </author> <author initials="M." surname="Budagavi" fullname="Madhukar Budagavi"> <organization>Samsung Electronics</organization> <address> <postal> <street>6105 Tennyson Pkwy, Ste 300</street><city>Plano, TX</city><city>Plano</city><region>TX</region> <code>75024</code><country>USA</country><country>United States of America</country> </postal> <email>m.budagavi@samsung.com</email> </address> </author> <author initials="R." surname="Joshi" fullname="Rajan Joshi"> <organization>Samsung Electronics</organization> <address> <postal> <street>11488 Tree Hollow Ln</street> <city>SanDiego, CA</city>Diego</city><region>CA</region> <code>92128</code><country>USA</country><country>United States of America</country> </postal> <email>rajan_joshi@ieee.org</email> </address> </author> <author initials="K." surname="Choi" fullname="Kwang Pyo Choi"> <organization>Samsung Electronics</organization> <address> <postal> <street>34 Seongchon-gil Seocho-gu</street> <city>Seoul</city> <code>3573</code> <country>Republic of Korea</country> </postal> <email>kwangpyo.choi@gmail.com</email> </address> </author> <dateyear="2025" month="October" day="20"/> <area>General</area> <workgroup>Independent Submission</workgroup>year="2026" month="February"/> <keyword>mezzanine codec</keyword> <keyword>visually lossless compression</keyword> <keyword>APV</keyword> <abstract><?line 125?><t>This document describes the bitstream format of Advanced Professional Video (APV) and its decoding process. APV is a professional video codec providing visually lossless compression mainly for recording and post production.</t> </abstract> </front> <middle> <?line 129?> <section anchor="introduction"> <name>Introduction</name> <t>This document defines the bitstream format and decoding process for the Advanced Professional Video (APV)Codec.codec. The APV codec is a professional video codec that was developed in response to the need forprofessional level high qualityprofessional-level, high-quality video recording and post production. The primary purpose of the APV codec is for use in professional video recording and editing workflows for various types of content. This specification is neither the product of the IETF nor a consensus view of the community.</t> <t>The APV codec supports the following features:</t> <ul spacing="normal"> <li> <t>Perceptually lossless video quality that is close to the original, uncompressed quality;</t> </li> <li> <t>Low complexity and high throughput intra frame only coding without inter frame coding;</t> </li> <!-- [rfced] Does "but between transformed values" mean "but with prediction between transformed values"? Please clarify. Original: * Intra frame coding without prediction between pixel values but between transformed values for low delay encoding; --> <li> <t>Intra frame coding without prediction between pixel values but between transformed values for low delay encoding;</t> </li> <li> <t>Highbit-ratesbit rates of up to a few Gbps for 2K,4K4K, and 8K resolution content, enabled by a lightweight entropy coding scheme;</t> </li> <li> <t>Frame tiling for immersive content and for enabling parallel encoding and decoding;</t> </li> <li> <t>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 10bitbits and 12bitbits are currently defined);</t> </li> <!-- [rfced] For clarity, may this text be updated as follows? Original: * Multiple decoding and re-encoding without severe visual quality degradation; and Perhaps: * the ability to decode and re-encode multiple times without severe visual quality degradation; and --> <li> <t>Multiple decoding and re-encoding without severe visual quality degradation; and</t> </li> <li> <t>Various metadata including HDR10/10+ and user-definedformat.</t>formats.</t> </li> </ul> </section> <section anchor="terms"> <name>Terms</name> <section anchor="terms-and-definitions"> <name>Terms anddefinitions</name> <ul spacing="normal"> <li> <t>accessDefinitions</name> <dl spacing="normal" newline="false"> <dt>access unit(AU): a(AU):</dt><dd>a collection of primitive bitstream units (PBU) including various types of frames, metadata, filler, and access unit information, associated with a specifictime</t> </li> <li> <t>band: atime</dd> <dt>band:</dt><dd>a defined set of constraints on the value of the maximum coded data rate of eachlevel</t> </li> <li> <t>block: MxNlevel</dd> <dt>block:</dt><dd>MxN (M-column by N-row) array of samples, or an MxN array of transformcoefficients</t> </li> <li> <t>byte-aligned: acoefficients</dd> <dt>byte-aligned:</dt><dd>a position in a bitstream that is an integer multiple of 8 bits from the position of the first bit in thebitstream</t> </li> <li> <t>chroma: abitstream</dd> <dt>chroma:</dt><dd>a sample array or single sample representing one of the two color difference signals related to the primary colors, represented by the symbols Cb and Cr in 4:2:2 or 4:4:4 colorformat</t> </li> <li> <t>coded frame: aformat</dd> <dt>coded frame:</dt><dd>a coded representation of a frame containing all macroblocks of theframe</t> </li> <li> <t>coded representation: aframe</dd> <dt>coded representation:</dt><dd>a data element as represented in its codedform</t> </li> <li> <t>component: anform</dd> <dt>component:</dt><dd>an array or a single sample from one of the three arrays (luma and two chroma) that compose a frame in 4:2:2, or 4:4:4 color format, or an array or a single sample from an array that compose a frame in 4:0:0 color format, or an array or a single sample from one of the four arrays that compose a frame in 4:4:4:4 colorformat.</t> </li> <li> <t>decoded frame: aformat.</dd> <dt>decoded frame:</dt><dd>a frame derived by decoding a codedframe</t> </li> <li> <t>decoder: anframe</dd> <dt>decoder:</dt><dd>an embodiment of a decodingprocess</t> </li> <li> <t>decoding process: aprocess</dd> <dt>decoding process:</dt><dd>a process specified that reads a bitstream and derives decoded frames fromit</t> </li> <li> <t>encoder: anit</dd> <dt>encoder:</dt><dd>an embodiment of an encodingprocess</t> </li> <li> <t>encoding process: aprocess</dd> <dt>encoding process:</dt><dd>a process that produces a bitstream conforming to thisdocument</t> </li> <li> <t>flag: adocument</dd> <dt>flag:</dt><dd>a variable or single-bit syntax element that can take one of the two possible values: 0 and1</t> </li> <li> <t>frame: an1</dd> <dt>frame:</dt><dd>an array of luma samples and two corresponding arrays of chroma samples in4:2:2,4:2:2 and 4:4:4 color format, or an array of samples in 4:0:0 color format, or four arrays of samples in 4:4:4:4 colorformat</t> </li> <li> <t>level: aformat</dd> <dt>level:</dt><dd>a defined set of constraints on the values that are taken by the syntax elements and variables of this document, or the value of a transform coefficient prior toscaling</t> </li> <li> <t>luma: ascaling</dd> <dt>luma:</dt><dd>a sample array or single sample representing the monochrome signal related to the primary colors, represented by the symbol or subscript Y orL</t> </li> <li> <t>macroblock (MB): aL</dd> <dt>macroblock (MB):</dt><dd>a square block of luma samples and two corresponding blocks of chroma samples of a frame in 4:2:2 or 4:4:4 color format, or a square block of samples of a frame in 4:0:0 color format, or four square blocks of samples of a frame in 4:4:4:4 colorformat</t> </li> <li> <t>metadata: dataformat</dd> <dt>metadata:</dt><dd>data describing various characteristics related to a bitstreamwihtoutwithout directly affecting the decoding process ofit.</t> </li> <li> <t>partitioning: ait.</dd> <dt>partitioning:</dt><dd>a division of a set into subsets such that each element of the set is in exactly one of thesubsets</t> </li> <li> <t>prediction: ansubsets</dd> <dt>prediction:</dt><dd>an embodiment of the predictionprocess</t> </li> <li> <t>prediction process: useprocess</dd> <dt>prediction process:</dt><dd>use of a predictor to provide an estimate of the data element currently beingdecoded</t> </li> <li> <t>predictor: adecoded</dd> <dt>predictor:</dt><dd>a combination of specified values or previously decoded data elements used in the decoding process of subsequent dataelements</t> </li> <li> <t>primitiveelements</dd> <dt>primitive bitstream unit(PBU): a(PBU):</dt><dd>a data structure to construct an access unit with frame andmetadata</t> </li> <li> <t>profile: ametadata</dd> <dt>profile:</dt><dd>a specified subset of the syntax of thisdocument</t> </li> <li> <t>quantizationdocument</dd> <dt>quantization parameter(QP): a(QP):</dt><dd>a variable used by the decoding process for the scaling value of transformcoefficients</t> </li> <li> <t>raster scan: acoefficients</dd> <dt>raster scan:</dt><dd>a mapping of a rectangular two-dimensional pattern to a one-dimensional pattern such that the first entries in the one-dimensional pattern are from the top row of the two-dimensional pattern scanned from left to right, followed by the second, third, etc., rows of the pattern each scanned from left toright</t> </li> <li> <t>raw bitstream: anright</dd> <dt>raw bitstream:</dt><dd>an encapsulation of a sequence of access units where a field indicating the size of an access unit precedes each access unit as defined in <xreftarget="appendix-rawbitstream"/></t> </li> <li> <t>source: atarget="appendix-rawbitstream"/></dd> <dt>source:</dt><dd>a term used to describe the video material or some of its attributes before the encodingprocess</t> </li> <li> <t>syntax element: anprocess</dd> <dt>syntax element:</dt><dd>an element of data represented in thebitstream</t> </li> <li> <t>syntax structure: zerobitstream</dd> <dt>syntax structure:</dt><dd>zero or more syntax elements present together in a bitstream in a specifiedorder</t> </li> <li> <t>tile: aorder</dd> <dt>tile:</dt><dd>a rectangular region of MBs within a particular tile column and a particular tile row in aframe</t> </li> <li> <t>tile column: aframe</dd> <dt>tile column:</dt><dd>a rectangular region of MBs having a height equal to the height of the frame and width specified by syntax elements in the frameheader</t> </li> <li> <t>tile row: aheader</dd> <dt>tile row:</dt><dd>a rectangular region of MBs having a height specified by syntax elements in the frame header and a width equal to the width of theframe</t> </li> <li> <t>tile scan: aframe</dd> <dt>tile scan:</dt><dd>a specific sequential ordering of MBs partitioning a 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 raster scan of the tiles of theframe</t> </li> <li> <t>transform coefficient: aframe</dd> <dt>transform coefficient:</dt><dd>a scalar quantity, considered to be in a frequency domain, that is associated with a particular one-dimensional or two-dimensionalindex</t> </li> </ul>index</dd> </dl> </section> <section anchor="abbreviated-terms"> <name>Abbreviatedterms</name> <ul spacing="normal"> <li> <t>I: intra</t> </li> <li> <t>LSB: leastTerms</name> <dl spacing="normal" newline="false"> <!-- [rfced] We do not believe we see "I" used in this manner, though we do see instances of "i". Please review and let us know if "I" should be removed or if other changes are needed. Original Section 2.2: * I: intra Original Section 3.2.1: * sum (i=x, y, f(i)) : a summation of f(i) with i taking all integer values from x up to and including y Original Section 5.3.7: The array index i specifies an indicator for the color component; ... --> <dt>I:</dt><dd>intra</dd> <dt>LSB:</dt><dd>least significantbit</t> </li> <li> <t>MSB: mostbit</dd> <dt>MSB:</dt><dd>most significantbit</t> </li> <li> <t>RGB: Red,bit</dd> <dt>RGB:</dt><dd>Red, Green andBlue</t> </li> </ul>Blue</dd> </dl> </section> </section> <section anchor="conventions"> <name>ConventionsusedUsed inthis document</name>This Document</name> <section anchor="general"> <name>General</name><t>The<t> The key words"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY","<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described inBCP 14BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shownhere.</t>here. </t> </section> <section anchor="operators"> <name>Operators</name> <!-- [rfced] For clarity, may we update the text as follows? If this is incorrect, please clarify what is following widely used industry practices. Or is the exception per widely used industry practices? Original: The operators and the order of precedence are the same as used in the C programming language [ISO9899], with the exception of the operators described in the Section 3.2.1 and Section 3.2.2 following widely used industry practices for video codecs. Perhaps: Following widely used industry practices for video codecs, the operators and the order of precedence are the same as used in the C programming language [ISO9899], with the exception of the operators described in the Sections 3.2.1 and 3.2.2. --> <t>The operators and the order of precedence are the same as used in the C programming language <xref target="ISO9899"/>, with the exception of the operators described in the <xref target="arith-operator"/> and <xref target="bit-operator"/> following widely used industry practices for video codecs.</t> <section anchor="arith-operator"> <name>Arithmeticoperators</name> <ul spacing="normal"> <li> <t>// : anOperators</name> <dl spacing="normal" newline="true"> <dt>//</dt> <dd>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 rounded to-1</t> </li> <li> <t>/-1</dd> <dt>/ ordiv(x,y) : adiv(x,y)</dt> <dd>a division in mathematical equations where no truncation or rounding isintended</t> </li> <li> <t>min(x,y) : theintended</dd> <dt>min(x,y)</dt> <dd>the minimum value of the values x andy</t> </li> <li> <t>max(x,y) : they</dd> <dt>max(x,y)</dt> <dd>the maximum value of the values x andy</t> </li> <li> <t>ceil(x) : they</dd> <dt>ceil(x)</dt> <dd>the smallest integer value that is larger than or equal tox</t> </li> <li> <t>clip(x,y,z) : clip(x,y,z)=max(x,min(z,y))</t> </li> <li> <t>sumx</dd> <dt>clip(x,y,z)</dt> <dd>clip(x,y,z)=max(x,min(z,y))</dd> <dt>sum (i=x, y,f(i)) : af(i))</dt> <dd>a summation of f(i) with i taking all integer values from x up to and includingy</t> </li> <li> <t>log2(x) : they</dd> <dt>log2(x)</dt> <dd>the base-2 logarithm ofx</t> </li> </ul>x</dd> </dl> </section> <section anchor="bit-operator"> <name>Bitwiseoperators</name> <ul spacing="normal"> <li> <t>&Operators</name> <dl spacing="normal" newline="true"> <dt>& (bit-wise"and") : When"and")</dt><dd>When operating on integer arguments, operates on a two's complement representation of the integer value. When operating on arguments with unequal bit depths, the bit depths are equalized by adding zeros in significant positions to the argument with lower bitdepth.</t> </li> <li> <t>|depth.</dd> <dt>| (bit-wise"or") : When"or")</dt><dd>When operating on integer arguments, operates on a two's complement representation of the integer value. When operating on arguments with unequal bit depths, the bit depths are equalized by adding zeros in significant positions to the argument with lower bitdepth.</t> </li> <li> <t>xdepth.</dd> <dt>x >>y : arithmeticy</dt><dd>arithmetic right shift of a two's complement integer representation of x by y binary digits. This function is defined only for non-negative integer values of y. Bits shifted into the most significant bits (MSBs) as a result of the right shift have a value equal to the MSB of x prior to the shiftoperation.</t> </li> <li> <t>xoperation.</dd> <dt>x <<y : arithmeticy</dt><dd>arithmetic left shift of a two's complement integer representation of x by y binary digits. This function is defined only for non-negative integer values of y. Bits shifted into the least significant bits (LSBs) as a result of the left shift have a value equal to0.</t> </li> </ul>0.</dd> </dl> </section> </section> <section anchor="range-notation"> <name>Rangenotation</name> <ul spacing="normal"> <li> <t>xNotation</name> <dl spacing="normal" newline="true"> <dt>x =y..z</t> </li> </ul> <ul empty="true"> <li> <t>xy..z</dt> <dd>x takes on integer values starting from y to z, inclusive, with x, y, and z being integer numbers and z being greater thany.</t> </li> </ul>y.</dd> </dl> <section anchor="order-of-operations-precedence"> <name>Order ofoperations precedence</name>Operations Precedence</name> <t>When order of precedence is not indicated explicitly by use of parentheses, operations are evaluated in the following order.</t> <ul spacing="normal"> <li> <t>Operations of a higher precedence are evaluated before any operation of a lower precedence. <xref target="_table-operation_order"/> specifies the precedence of operations from highest to lowest; operations closer to the top of the tableindicatesindicate a higher precedence.</t> </li> <li> <t>Operations of the same precedence are evaluated sequentially from left to right.</t> </li> </ul> <table anchor="_table-operation_order"> <name>Operation precedence from highest (top of the table) to lowest (bottom of the table)</name> <thead> <tr> <th align="left">operations (with operands x, y, and z)</th> </tr> </thead> <tbody> <tr> <td align="left">"x++", "x--"</td> </tr> <tr> <td align="left">"!x", "-x" (as a unary prefix operator)</td> </tr> <tr> <td align="left">x^y (power)</td> </tr> <tr> <td align="left">"x * y", "x / y", "x // y", "x % y"</td> </tr> <tr> <td align="left">"x + y", "x - y", "sum (i=x, y, f(i))"</td> </tr> <tr> <td align="left">"x << y", "x >> y"</td> </tr> <tr> <td align="left">"x < y", "x <= y", "x > y", "x >= y"</td> </tr> <tr> <td align="left">"x == y", "x != y"</td> </tr> <tr> <td align="left">"x & y"</td> </tr> <tr> <td align="left">"x | y"</td> </tr> <tr> <td align="left">"x && y"</td> </tr> <tr> <td align="left">"x || y"</td> </tr> <tr> <td align="left">"x ? y : z"</td> </tr> <tr> <td align="left">"x..y"</td> </tr> <tr> <td align="left">"x = y", "x += y", "x -= y"</td> </tr> </tbody> </table> </section> </section> <section anchor="variables-syntax-elements-and-tables"> <name>Variables,syntax elementsSyntax Elements, andtables</name>Tables</name> <t>Each syntax element is described by its name in all lowercase letters and its type is provided next to the syntax code in each row. Each syntax element and multi-byte integers are written in big endian format. The decoding process behaves according to the value of the syntax element and to the values of previously decoded syntax elements.</t> <t>In some cases, the syntax tables may use the values of other variables derived from syntax elements values. Such variables appear in the syntaxtables,tables or text, named by a mixture of lower case and uppercase letters and without any underscore characters. Variables with names starting with an uppercase letter are derived for the decoding of the current syntax structure and all dependent syntax structures. Variables with names starting with an uppercase letter may be used in the decoding process for later syntax structures without mentioning the originating syntax structure of the variable. Variables with names starting with a lowercase letter are only used within the section in which they are derived.</t> <t>Functions that specify properties of the current position in the bitstream are referred to as syntax functions. These functions are specified in <xref target="syntax-func"/> and assume the existence of a bitstream pointer with an indication of the position of the next bit to be read by the decoding process from the bitstream.</t> <!-- [rfced] Should "square parentheses" be "square brackets"? Original: Square parentheses are used for the indexing of arrays. --> <t>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 elements or variables. Square parentheses are used for the indexing of 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 row (vertical) index.</t> <t>A specification of values of the entries in rows and columns of an array may be denoted by {{...}{...}}, where each inner pair of brackets specifies the values of the elements within a row in 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 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.</t> <t>Binary notation is indicated by enclosing the string of bit valuesbyin single quote marks. For example, '0b01000001' represents an eight-bit string having only its second and its last bits (counted from the most to the least significant bit) equal to 1.</t> <t>Hexadecimal notation, indicated by prefixing the hexadecimal number by "0x", may be used instead of binary notation when the number of bits is an integer multiple of 4. For example, 0x41 represents an eight-bit string having only its second and its last bits (counted from the most to the least significant bit) equal to 1.</t> <t>A value equal to 0 represents a FALSE condition in a test statement. The value TRUE is represented by any value different from zero.</t> </section> <section anchor="processes"> <name>Processes</name> <t>Processes are used to describe the decoding of syntax elements. A process has a separate specification and invoking. When invoking a process, the assignment of variables is specified as follows:</t> <ul spacing="normal"> <li> <t>If the variables at the invoking and the process specification do not have the same name, the variables are explicitly assigned to lower case input or output variables of the process specification.</t> </li> <li> <t>Otherwise (the variables at the invoking and the process specification have the same name), the assignment is implied.</t> </li> </ul> <t>In the specification of a process, a specific coding block is referred to by the variable name having a value equal to the address of the specific coding block.</t> </section> </section> <section anchor="Formats"> <name>Formats andprocesses usedProcesses Used inthis document</name>This Document</name> <section anchor="bitstream-formats"> <name>Bitstreamformats</name>Formats</name> <t>This section specifies the bitstream format of the Advanced Professional Video (APV)Codec.</t>codec.</t> <t>A raw bitstream format consists of a sequence of AUs where the field indicating the size of access units precedes each of them. The raw bitstream format is specified in <xref target="appendix-rawbitstream"/>.</t> </section> <section anchor="source-decoded-and-output-frame-formats"> <name>Source,decodedDecoded, andoutput frame formats</name>Output Frame Formats</name> <t>This section specifies the relationship between the source and decoded frames.</t> <t>The video source that is represented by the bitstream is a sequence of frames.</t> <t>Source and decoded frames are each comprised of one or more sample arrays:</t> <ul spacing="normal"> <li> <t>Monochrome (for example, Luma only)</t> </li> <li> <t>Luma and two chroma (for example, YCbCr or YCgCo as specified in <xref target="H273"/>).</t> </li> <li> <t>Green, blue, and red (GBR, also known as RGB).</t> </li> <li> <t>Arrays representing other unspecified tri-stimulus color samplings (for example, YZX, also known as XYZ as specified in <xref target="CIE15"/>).</t> </li> <li> <t>Arrays representing other unspecified four color samplings</t> </li> </ul> <t>For the convenience of notation and terminology in this document, the variables and terms associated with these arrays can be referred to as luma and chroma regardless of the actual color representation method in use.</t><t>The<!-- [rfced] We are having trouble parsing "depending on the Chroma format sampling structure" - what is depending on that structure? Original: The variables SubWidthC, SubHeightC and NumComps are specified in Table 2, depending on the chroma format sampling structure, which is specified through chroma_format_idc. Perhaps: The variables SubWidthC, SubHeightC, and NumComps are specified in Table 2, according to the chroma format sampling structure, which is specified through chroma_format_idc. --> <t>The variables SubWidthC, SubHeightC, and NumComps are specified in <xref target="_table-chroma_format_idc"/>, depending on the chroma format sampling structure, which is specified through chroma_format_idc. Other values of chroma_format_idc, SubWidthC,SubHeightCSubHeightC, and NumComps may be specified inthefutureverionsversions of this document.</t> <table anchor="_table-chroma_format_idc"> <name>SubWidthC,SubHeightCSubHeightC, and NumComps values derived from chroma_format_idc</name> <thead> <tr> <th align="center">chroma_format_idc</th> <th align="center">Chroma format</th> <th align="center">SubWidthC</th> <th align="center">SubHeightC</th> <th align="center">NumComps</th> </tr> </thead> <tbody> <tr> <td align="center">0</td> <td align="center">4:0:0</td> <td align="center">1</td> <td align="center">1</td> <td align="center">1</td> </tr> <tr> <td align="center">1</td> <td align="center">reserved</td> <td align="center">reserved</td> <td align="center">reserved</td> <td align="center">reserved</td> </tr> <tr> <td align="center">2</td> <td align="center">4:2:2</td> <td align="center">2</td> <td align="center">1</td> <td align="center">3</td> </tr> <tr> <td align="center">3</td> <td align="center">4:4:4</td> <td align="center">1</td> <td align="center">1</td> <td align="center">3</td> </tr> <tr> <td align="center">4</td> <td align="center">4:4:4:4</td> <td align="center">1</td> <td align="center">1</td> <td align="center">4</td> </tr> <tr> <td align="center">5..7</td> <td align="center">reserved</td> <td align="center">reserved</td> <td align="center">reserved</td> <td align="center">reserved</td> </tr> </tbody> </table> <t>In 4:0:0 sampling, there is only one sample array that can be considered as the luma array.</t> <t>In 4:2:2 sampling, each of the two chroma arrays has the same height and half the width of the luma array.</t> <t>In 4:4:4 sampling and 4:4:4:4 sampling, all the sample arrays have the same height and width as the luma array.</t> <t>The number of bits necessary for the representation of each of the samples in the luma and chroma arrays in a video sequence is in the range of 10 to 16, inclusive.</t> <t>When the value of chroma_format_idc is equal to 2, the chroma samples are co-sited with the corresponding lumasamples andsamples; the nominal locations in a frame are as shown in <xref target="_figure-format420"/>.</t> <figure anchor="_figure-format420"> <name>Nominal vertical and horizontal locations of 4:2:2 luma and chroma samples in a frame</name> <artwork><![CDATA[ & * & * & * & * & * ... & * & * & * & * & * ... & * & * & * & * & * ... & * & * & * & * & * ... ... & - location where both luma and chroma sample exist * - location where only luma sampleexist ]]></artwork>exist]]></artwork> </figure><t>When<t>For each frame, when the value of chroma_format_idc is equal to 3 or 4,for each frame,all of the array samples areco-sited andco-sited; the nominal locations in a frame are as shown in <xref target="_figure-format444"/>.</t> <figure anchor="_figure-format444"> <name>Nominal vertical and horizontal locations of 4:4:4 and 4:4:4:4 luma and chroma samples in a frame</name> <artwork><![CDATA[ & & & & & & & & & & ... & & & & & & & & & & ... & & & & & & & & & & ... & & & & & & & & & & ... ... & - location where both luma and chroma sampleexist ]]></artwork>exist]]></artwork> </figure> <t>Samples are processed in units of MBs. The variables MbWidth and MbHeight, which specify the width and height of the luma arrays for each MB, are defined as follows:</t> <ul spacing="normal"> <li> <t>MbWidth = 16</t> </li> <li> <t>MbHeight = 16</t> </li> </ul> <t>The variables MbWidthC and MbHeightC,thatwhich specify the width and height of the chroma arrays for each MB, are derived as follows:</t> <ul spacing="normal"> <li> <t>MbWidthC = MbWidth // SubWidthC</t> </li> <li> <t>MbHeightC = MbHeight // SubHeightC</t> </li> </ul> </section> <section anchor="partitioning-of-a-frame"> <name>Partitioning of aframe</name>Frame</name> <section anchor="partitioning-of-a-frame-into-tiles"> <name>Partitioning of aframeFrame intotiles</name>Tiles</name> <t>This section specifies how a frame is partitioned into tiles.</t> <t>A frame is divided into tiles. A tile is a group of MBs that cover a rectangular region of a frame and is processed independently of other tiles. Every tile has the same width and height, except possibly tiles at the right or bottom frame boundary when the frame width or height is not a multiple of the tile width or height, respectively. The tiles in a frame are scanned in raster order. Within a tile, the MBs are scanned in raster order. Each MB is comprised of one (MbWidth) x (MbHeight) luma array and zero, two, or three corresponding chroma sample arrays.</t> <t>For example, a frame is divided into 6 tiles (3 tile columns and 2 tile rows) as shown in <xreftarget="_figure-tile_examaple"/>: Frame with 10 by 8 MBs that is partitioned into 6 tiles.target="_figure-tile_examaple"/>. In this example, the tile size is defined as 4 column MBs and 4 row MBs. In case of the third and sixth tiles (in raster order), the tile size is 2 column MBs and 4 row MBs since the frame width is not a multiple of the tile width.</t> <figure anchor="_figure-tile_examaple"> <name>Frame with 10 by 8 MBs that is partitioned into 6 tiles</name> <artwork><![CDATA[ +===================+===================+=========+ # | | | # MB | MB | MB | MB # MB | MB # +-------------------+-------------------+---------+ # | | | # MB | MB | MB | MB # MB | MB # +----- tile -----+-------------------+---------+ # | | | # MB | MB | MB | MB # MB | MB # +-------------------+-------------------+---------+ # | | | # MB | MB | MB | MB # MB | MB # +===================+===================+=========+ # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB # +-------------------+-------------------+---------+ # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB # +-------------------+-------------------+---------+ # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB # +-------------------+-------------------+---------+ # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB # +===================+===================+=========+ #,= tile boundary |,- MB boundary ]]></artwork> </figure> </section> <section anchor="spatial-or-component-wise-partitioning"> <name>Spatial orcomponent-wise partitioning</name>Component-Wise Partitioning</name> <t>The following divisions of processing elements form spatial or component-wise partitioning:</t> <ul spacing="normal"> <li> <t>the division of each frame into components;</t> </li> <li> <t>the division of each frame into tile columns;</t> </li> <li> <t>the division of each frame into tile rows;</t> </li> <li> <t>the division of each tile column into tiles;</t> </li> <li> <t>the division of each tile row into tiles;</t> </li> <li> <t>the division of each tile into color components;</t> </li> <li> <t>the division of each tile into MBs;</t> </li> <li> <t>the division of each MB into blocks.</t> </li> </ul> </section> </section> <section anchor="scanning-processes"> <name>Scanningprocesses</name>Processes</name> <section anchor="zig-zag"><name>Zig-zag scan</name><name>Zig-Zag Scan</name> <t>This process converts a two dimensional array into anone dimensionalone-dimensional array. The process starts at the top-left position in the block and then moves diagonally, changing direction at the edges of the block until it reaches the bottom-right position. <xref target="_figure-zz"/> shows an example of scanning order for 4x4 size block.</t> <figure anchor="_figure-zz"> <name>Example of zig-zag scanning order for 4x4 block</name> <artwork><![CDATA[ +===================+ # 00 | 01 | 05 | 06 # +-------------------+ # 02 | 04 | 07 | 12 # +-------------------+ # 03 | 08 | 11 | 13 # +-------------------+ # 09 | 10 | 14 | 15 # +===================+ ]]></artwork> </figure> <t>Inputs to this process are:</t> <ul spacing="normal"> <li> <t>a variable blkWidth specifying the width of a block, and</t> </li> <li> <t>a variable blkHeight specifying the height of a block.</t> </li> </ul> <t>Output of this process is the array zigZagScan[sPos].</t> <t>The array index sPos specifies the scan position ranging from 0 to (blkWidth * blkHeight)-1. Depending on the value of blkWidth and blkHeight, the array zigZagScan is derived as follows:</t> <figure anchor="_figure-zzscan"> <name>Pseudo-code for zig-zag scan</name> <artwork><![CDATA[ pos = 0 zigZagScan[pos] = 0 pos++ for(line = 1; line < (blkWidth + blkHeight - 1); line++){ if(line % 2){ x = min(line, blkWidth - 1) y = max(0, line - (blkWidth - 1)) while(x >=0 && y < blkHeight){ zigZagScan[pos] = y * blkWidth + x pos++ x-- y++ } } else{ y = min(line, blkHeight - 1) x = max(0, line - (blkHeight - 1)) while(y >= 0 && x < blkWidth){ zigZagScan[pos] = y * blkWidth + x pos++ x++ y-- } }} ]]></artwork>}]]></artwork> </figure> </section> <section anchor="inverse-scan"> <name>Inversescan</name>Scan</name> <t>Inputs to this process are:</t> <ul spacing="normal"> <li> <t>a variable blkWidth specifying the width of a block, and</t> </li> <li> <t>a variable blkHeight specifying the height of a block.</t> </li> </ul> <t>Output of this process is the array inverseScan[rPos].</t> <t>The array index rPos specifies the raster scan position ranging from 0 to (blkWidth * blkHeight)-1. Depending on the value of blkWidth and blkHeight, the array inverseScan is derived as follows:</t> <ul spacing="normal"> <li><t>The<!-- [rfced] Is "1D" needed here, as section 4.4.1 indicates that the zig-zag process converts a 2D array into a 1D array? Simplifying the sentence improves readability. Original: * The variable forwardScan is derived by invoking zig-zag scan order 1D array initialization process as specified in Section 4.4.1 with input parameters blkWidth and blkHeight. Perhaps: * The variable forwardScan is derived by invoking the zig-zag scan order process as specified in Section 4.4.1 with input parameters blkWidth and blkHeight. --> <t>The variable forwardScan is derived by invoking the zig-zag scan order one-dimensional array initialization process as specified in <xref target="zig-zag"/> with input parameters blkWidth and blkHeight.</t> </li> <li> <t>The output variable inverseScan is derived as follows:</t> </li> </ul> <figure anchor="_figure-inv_zzscan"> <name>Pseudo-code for inverse zig-zag scan</name> <artwork><![CDATA[ for(pos = 0; pos < blkWidth * blkHeight; pos++){ inverseScan[forwardScan[pos]] = pos} ]]></artwork>}]]></artwork> </figure> </section> </section> </section> <section anchor="syntax"> <name>Syntax andsemantics</name>Semantics</name> <section anchor="method-of-specifying-syntax"> <name>Method ofspecifying syntax</name>Specifying Syntax</name> <t>The syntax tables specify a superset of the syntax of all allowed bitstreams. Note that a decoderMUST<bcp14>MUST</bcp14> implement some means for identifying entry points into the bitstream and some means to identify and handle non-conforming bitstreams. The methods for identifying and handling errors and other such situations are not specified in this document.</t> <!-- [rfced] For readability, may we update this sentence as follows? Original: The APV bitstream is described in this document using syntax code based on the C programming language [ISO9899] and uses its if/else, while, and for keywords as well as functions defined within this document. Perhaps: The APV bitstream is described using syntax code based on the C programming language [ISO9899] - including use of the keywords if/else, while, and for - as well as functions defined within this document. --> <t>The APV bitstream is described in this document using syntax code based on the C programming language <xref target="ISO9899"/> and uses its if/else, while, and for keywords as well as functions defined within this document.</t> <t>The syntax table in syntax code is presented in a two-column format such as shown in <xref target="syntax-examplecode"/>. In this form, the type column provides a type referenced in that same line of syntax code by using the syntax elements processingfunctionfunctions defined in <xref target="syntax-process-func"/>.</t> <figure anchor="syntax-examplecode"> <name>A depiction of type-labeled syntax code for syntax description in this document</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- ExampleSyntaxCode(){ | operations | syntax_element | u(n) }| ]]></artwork>|]]></artwork> </figure> </section> <section anchor="syntax-func"> <name>SyntaxfunctionsFunctions anddescriptors</name>Descriptors</name> <t>The functions presented in this document are used in the syntactical description. These functions are expressed in terms of the value of a bitstream pointer that indicates the position of the next bit to be read by the decoding process from the bitstream.</t> <section anchor="bytealigned"> <name>byte_aligned()</name> <ul spacing="normal"> <li> <t>If the current position in the bitstream is on the last bit of a byte, i.e., the next bit in the bitstream is the first bit in a byte, the return value of byte_aligned() is equal to TRUE.</t> </li> <li> <t>Otherwise, the return value of byte_aligned() is equal to FALSE.</t> </li> </ul> </section> <section anchor="moredataintile"> <name>more_data_in_tile()</name> <ul spacing="normal"> <li> <t>If the current position in the i-th tile() syntax structure is less than TileSize[i] in bytes from the beginning of the tile_header() syntax structure of the i-th tile, the return value of more_data_in_tile() is equal to TRUE.</t> </li> <li> <t>Otherwise, the return value of more_data_in_tile() is equal to FALSE.</t> </li> </ul> </section> <section anchor="nextbitsn"> <name>next_bits(n)</name> <t>This function provides the next n bits in the bitstream for comparison purposes, without advancing the bitstream pointer.</t> </section> <section anchor="readbitsn"> <name>read_bits(n)</name> <t>This function indicatesto readthat the next n bits from the bitstream are to be read and it advances the bitstream pointer by n bit positions. When n is equal to 0, read_bits(n) is specified to return a value equal to 0 and to not advance the bitstream pointer.</t> </section> <section anchor="syntax-process-func"> <name>Syntaxelement processing functions</name> <ul spacing="normal"> <li> <t>b(8): byteElement Processing Functions</name> <dl spacing="normal" newline="false"> <dt>b(8):</dt><dd>byte having any pattern of bit string (8 bits). The parsing process for this descriptor is specified by the return value of the functionread_bits(8).</t> </li> <li> <t>f(n): fixed-patternread_bits(8).</dd> <dt>f(n):</dt><dd>fixed-pattern bit string using n bits written (from left to right) with the left bit first,i.e.i.e., big endian format. The parsing process for this descriptor is specified by the return value of the functionread_bits(n).</t> </li> <li> <t>u(n): unsignedread_bits(n).</dd> <dt>u(n):</dt><dd>unsigned integer using n bits. The parsing process for this descriptor is specified by the return value of the function read_bits(n) interpreted as a binary representation of an unsigned integer with the most significant bit writtenfirst.</t> </li> <li> <t>h(v): variable-lengthfirst.</dd> <dt>h(v):</dt><dd>variable-length entropy coded syntax element with the left bit first,i.e.i.e., big endian format. The parsing process for this descriptor is specified in <xreftarget="process_h"/>.</t> </li> </ul>target="process_h"/>.</dd> </dl> </section> </section> <section anchor="list-of-syntax-and-semantics"> <name>List ofsyntaxSyntax andsemantics</name>Semantics</name> <section anchor="access-unit"> <name>Accessunit</name>Unit</name> <figure anchor="syntaxcode-access_unit"> <name>access unit syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- access_unit(au_size){ | signature | f(32) currReadSize = 4 | do(){ | pbu_size | u(32) currReadSize += 4 | pbu() | currReadSize += pbu_size | } while (au_size > currReadSize) | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>signature</t> </li> </ul> <ul empty="true"> <li> <t>A<dl spacing="normal" newline="true"> <dt>signature</dt> <dd>A four-character code that identifies the bitstream as an APV AU. The valueMUST<bcp14>MUST</bcp14> be 'aPv1'(0x61507631).</t> </li> </ul> <ul spacing="normal"> <li> <t>pbu_size</t> </li> </ul> <ul empty="true"> <li> <t>the(0x61507631).</dd> <dt>pbu_size</dt> <dd>the size of a primitive bitstream unit in bytes. A value of 0 is prohibited and the value of 0xFFFFFFFF for pbu_size is reserved for futureuse.</t> </li> </ul>use.</dd> </dl> <t>Note: An AU consists of one primary frame, zero or more non-primary frames such as a frame for additional view, zero or more alpha frames, zero or more depth frames, zero or more previewframeframes such as a frame with smaller resolution, zero or moremetadatas,metadata, and zero or more fillers.</t> </section> <section anchor="pbu"> <name>Primitivebitstream unit</name>Bitstream Unit</name> <figure anchor="syntaxcode-pbu"> <name>primitive bitstream unit syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- pbu(){ | pbu_header() | if((1 <= pbu_type && pbu_type <=2) || | (25 <= pbu_type && pbu_type <= 27)) | frame() | else if(pbu_type == 65) | au_info() | else if(pbu_type == 66) | metadata() | else if (pbu_type == 67) | filler() | }| ]]></artwork>|]]></artwork> </figure> </section> <section anchor="pbu-header"> <name>Primitivebitstream unit header</name>Bitstream Unit Header</name> <figure anchor="syntaxcode-pbu_header"> <name>primitive bitstream unit header syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- pbu_header(){ | pbu_type | u(8) group_id | u(16) reserved_zero_8bits | u(8) }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>pbu_type</t> </li> </ul> <ul empty="true"> <li> <t>indicates<dl spacing="normal" newline="true"> <dt>pbu_type</dt> <dd><t>indicates the type of data in a PBU listed in <xref target="_table-pbu_type"/>. Other values of pbu_type are reserved for future use.</t></li> </ul><table anchor="_table-pbu_type"> <name>List of PBU types</name> <thead> <tr> <th align="center">pbu_type</th> <th align="center">meaning</th> <th align="center">notes</th> </tr> </thead> <tbody> <tr> <td align="center">0</td> <td align="center">reserved</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">1</td> <td align="center">primary frame</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">2</td> <td align="center">non-primary frame</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">3...24</td> <td align="center">reserved</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">25</td> <td align="center">preview frame</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">26</td> <td align="center">depth frame</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">27</td> <td align="center">alpha frame</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">28...64</td> <td align="center">reserved</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">65</td> <td align="center">access unit information</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">66</td> <td align="center">metadata</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">67</td> <td align="center">filler</td> <tdalign="center">Â </td>align="center"> </td> </tr> <tr> <td align="center">68...255</td> <td align="center">reserved</td> <tdalign="center">Â </td>align="center"> </td> </tr> </tbody> </table><ul empty="true"> <li><t>Note: A PBU with pbu_type equal to 65 (access unit information) may happen in an AU. If it exists, itMUST<bcp14>MUST</bcp14> be the first PBU in an AU, and it can be ignored by a decoder.</t></li> </ul> <ul spacing="normal"> <li> <t>group_id</t> </li> </ul> <ul empty="true"> <li> <t>indicates</dd> <dt>group_id</dt> <dd>indicates the identifier to associate a coded frame with metadata. More than twoframeframes can have the same group_id in a single AU. A primary frame and a non-primary frameMUST<bcp14>MUST</bcp14> have different group_idvaluevalues, and two non-primary framesMUST<bcp14>MUST</bcp14> have different group_id values. When the value of group_id is equal to 0, the value of pbu_typeMUST<bcp14>MUST</bcp14> be greater than 64. The value of 0xFFFF for group_id is reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>reserved_zero_8bits</t> </li> </ul> <ul empty="true"> <li> <t>MUSTuse.</dd> <dt>reserved_zero_8bits</dt> <!-- [rfced] Can "of this version of the document" be dropped in multiple places, since section references are assumed to be in this document (unless specified otherwise) and because the HTML and PDF link to the relevant sections of the given document? For example: Original Section 5.3.3: * reserved_zero_8bits MUST be equal to 0 in bitstreams conforming to the profiles specified in Section 9 of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in Section 9 of this version of document MUST ignore PBU with values of reserved_zero_8bits greater than 0. Original Section 5.3.5: * reserved_zero_8bits MUST be equal to 0 in bitstreams conforming to the profiles specified in Section 9 of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in Section 9 of this version of document MUST ignore PBU with values of reserved_zero_8bits greater than 0. Original Section 5.3.9 (example without mention of a specific section): * pbu_type 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 bitstreams conforming to this version of document. --> <dd><bcp14>MUST</bcp14> be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the documentMUST<bcp14>MUST</bcp14> ignore PBU with values of reserved_zero_8bits greater than0.</t> </li> </ul>0.</dd> </dl> </section> <section anchor="frame"> <name>Frame</name> <figure anchor="syntaxcode-frame"> <name>frame() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- frame(){ | frame_header() | for(i = 0; i < NumTiles; i++){ | tile_size[i] | u(32) tile(i) | } | filler() | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>tile_size[i]</t> </li> </ul> <ul empty="true"> <li> <t>indicates<dl spacing="normal" newline="true"> <dt>tile_size[i]</dt> <dd><t>indicates the size in bytes of i-th tile data (i.e., tile(i)) in raster order in a frame. The value of 0 for tile_size[i] is reserved for future use.</t></li> </ul> <ul empty="true"> <li><t>The variable TileSize[i] is set equal totile_size[i].</t> </li> </ul>tile_size[i].</t></dd> </dl> </section> <section anchor="frame-header"> <name>Frameheader</name>Header</name> <figure anchor="syntaxcode-frame_header"> <name>frame_header() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- frame_header(){ | frame_info() | reserved_zero_8bits | u(8) color_description_present_flag | u(1) if(color_description_present_flag){ | color_primaries | u(8) transfer_characteristics | u(8) matrix_coefficients | u(8) full_range_flag | u(1) } | use_q_matrix | u(1) if(use_q_matrix){ | quantization_matrix() | } | tile_info() | reserved_zero_8bits | u(8) byte_alignment() | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>reserved_zero_8bits</t> </li> </ul> <ul empty="true"> <li> <t>MUST<dl spacing="normal" newline="true"> <dt>reserved_zero_8bits</dt> <dd><bcp14>MUST</bcp14> be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the documentMUST<bcp14>MUST</bcp14> ignore PBU with values of reserved_zero_8bits greater than0.</t> </li> </ul> <ul spacing="normal"> <li> <t>color_description_present_flag0.</dd> <dt>color_description_present_flag equal to1</t> </li> </ul> <ul empty="true"> <li> <t>specifies1</dt> <dd>specifies that color_primaries,transfer_characteristicstransfer_characteristics, and matrix_coefficients are present. color_description_present_flag equal to 0 specifies that color_primaries,transfer_characteristicstransfer_characteristics, and matrix_coefficients are notpresent.</t> </li> </ul> <ul spacing="normal"> <li> <t>color_primaries</t> </li> </ul> <ul empty="true"> <li> <t>MUSTpresent.</dd> <dt>color_primaries</dt> <dd><bcp14>MUST</bcp14> have the semantics of ColourPrimaries as specified in <xref target="H273"/>. When the color_primaries syntax element is not present, the value of color_primaries is inferred to be equal to2.</t> </li> </ul> <ul spacing="normal"> <li> <t>transfer_characteristics</t> </li> </ul> <ul empty="true"> <li> <t>MUST2.</dd> <dt>transfer_characteristics</dt> <dd><bcp14>MUST</bcp14> have the semantics of TransferCharacteristics as specified in <xref target="H273"/>. When the transfer_characteristics syntax element is not present, the value of transfer_characteristics is inferred to be equal to2.</t> </li> </ul> <ul spacing="normal"> <li> <t>matrix_coefficients</t> </li> </ul> <ul empty="true"> <li> <t>MUST2.</dd> <dt>matrix_coefficients</dt> <dd><bcp14>MUST</bcp14> have the semantics of MatrixCoefficients as specified in <xref target="H273"/>. When the matrix_coefficients syntax element is not present, the value of matrix_coefficients is inferred to be equal to2.</t> </li> </ul> <ul spacing="normal"> <li> <t>full_range_flag</t> </li> </ul> <ul empty="true"> <li> <t>MUST2.</dd> <dt>full_range_flag</dt> <dd><bcp14>MUST</bcp14> have the semantics of VideoFullRangeFlag as specified in <xref target="H273"/>. When the full_range_flag syntax element is not present, the value of full_range_flag is inferred to be equal to0.</t> </li> </ul> <ul spacing="normal"> <li> <t>use_q_matrix</t> </li> </ul> <ul empty="true"> <li> <t>A0.</dd> <dt>use_q_matrix</dt> <dd>with a value of 1 specifies that the quantization matrices are present. A value of 0 specifies that the quantization matrices are notpresent.</t> </li> </ul> <ul spacing="normal"> <li> <t>reserved_zero_8bits</t> </li> </ul> <ul empty="true"> <li> <t>MUSTpresent.</dd> <dt>reserved_zero_8bits</dt> <dd><bcp14>MUST</bcp14> be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the documentMUST<bcp14>MUST</bcp14> ignore PBU with values of reserved_zero_8bits greater than0.</t> </li> </ul>0.</dd> </dl> </section> <section anchor="frame-info"> <name>Frameinformation</name>Information</name> <figure anchor="syntaxcode-frame_info"> <name>frame_info() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- frame_info(){ | profile_idc | u(8) level_idc | u(8) band_idc | u(3) reserved_zero_5bits | u(5) frame_width | u(24) frame_height | u(24) chroma_format_idc | u(4) bit_depth_minus8 | u(4) capture_time_distance | u(8) reserved_zero_8bits | u(8) }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>profile_idc</t> </li> </ul> <ul empty="true"> <li> <t>indicates<dl spacing="normal" newline="true"> <dt>profile_idc</dt> <dd>indicates a profile to which the coded frame conformstoas specified in <xref target="appendix-profile-level-band"/>. BitstreamsSHALL NOT<bcp14>SHALL NOT</bcp14> contain values of profiles_idc other than those specified in <xref target="appendix-profile-level-band"/>. Other values of profile_idc are reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>level_idc</t> </li> </ul> <ul empty="true"> <li> <t>indicatesuse.</dd> <dt>level_idc</dt> <dd>indicates a level to which the coded frame conformstoas specified in <xref target="appendix-profile-level-band"/>. BitstreamsSHALL NOT<bcp14>SHALL NOT</bcp14> contain values of level_idc other than those specified in <xref target="appendix-profile-level-band"/>. Other values of level_idc are reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>band_idc</t> </li> </ul> <ul empty="true"> <li> <t>specifiesuse.</dd> <dt>band_idc</dt> <dd>specifies a maximum coded data rate of level_idc as specified in <xref target="appendix-profile-level-band"/>. BitstreamsSHALL NOT<bcp14>SHALL NOT</bcp14> contain values of band_idc other than those specified in <xref target="appendix-profile-level-band"/>. The value of band_idcMUST<bcp14>MUST</bcp14> be in the range of 0 to 3. Other values of band_idc are reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>reserved_zero_5bits</t> </li> </ul> <ul empty="true"> <li> <t>MUSTuse.</dd> <dt>reserved_zero_5bits</dt> <dd><bcp14>MUST</bcp14> be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the documentMUST<bcp14>MUST</bcp14> ignore PBU with values of reserved_zero_8bits greater than0.</t> </li> </ul> <ul spacing="normal"> <li> <t>frame_width</t> </li> </ul> <ul empty="true"> <li> <t>specifies0.</dd> <dt>frame_width</dt> <dd>specifies the width of the frame in units of luma samples. frame_widthMUST<bcp14>MUST</bcp14> be a multiple of 2 when chroma_format_idc has a value of 2. The valueof0 is reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>frame_height</t> </li> </ul> <ul empty="true"> <li> <t>specifiesuse.</dd> <dt>frame_height</dt> <dd>specifies the height of the frame in units of luma samples. The valueof0 is reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>Theuse.</dd> <dt>The variables FrameWidthInMbsY, FrameHeightInMbsY, FrameWidthInSamplesY, FrameHeightInSamplesY, FrameWidthInSamplesC, FrameHeightInSamplesC, FrameSizeInMbsY, and FrameSizeInSamplesY are derived asfollows:</t> </li> </ul> <ul empty="true"> <li>follows:</dt> <dd> <ul spacing="normal"><li> <t>FrameWidthInSamplesY<li>FrameWidthInSamplesY =frame_width</t> </li> <li> <t>FrameHeightInSamplesYframe_width</li> <li>FrameHeightInSamplesY =frame_height</t> </li> <li> <t>FrameWidthInMbsYframe_height</li> <li>FrameWidthInMbsY = ceil(FrameWidthInSamplesY /MbWidth)</t> </li> <li> <t>FrameHeightInMbsYMbWidth)</li> <li>FrameHeightInMbsY = ceil(FrameHeightInSamplesY /MbHeight)</t> </li> <li> <t>FrameWidthInSamplesCMbHeight)</li> <li>FrameWidthInSamplesC = FrameWidthInSamplesY //SubWidthC</t> </li> <li> <t>FrameHeightInSamplesCSubWidthC</li> <li>FrameHeightInSamplesC = FrameHeightInSamplesY //SubHeightC</t> </li> <li> <t>FrameSizeInMbsYSubHeightC</li> <li>FrameSizeInMbsY = FrameWidthInMbsY *FrameHeightInMbsY</t> </li> <li> <t>FrameSizeInSamplesYFrameHeightInMbsY</li> <li>FrameSizeInSamplesY = FrameWidthInSamplesY *FrameHeightInSamplesY</t> </li>FrameHeightInSamplesY</li> </ul></li> </ul> <ul spacing="normal"> <li> <t>chroma_format_idc</t> </li> </ul> <ul empty="true"> <li> <t>specifies</dd> <dt>chroma_format_idc</dt> <dd>specifies the chroma sampling relative to the luma sampling as specified in <xreftarget="_table-chroma_format_idc"/>target="_table-chroma_format_idc"/>. The value of chroma_format_idcMUST<bcp14>MUST</bcp14> be 0, 2, 3, or 4. Other values are reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>bit_depth_minus8</t> </li> </ul> <ul empty="true"> <li> <t>specifiesuse.</dd> <dt>bit_depth_minus8</dt> <dd><t>specifies the bit depth of the samples. The variables BitDepth and QpBdOffset are derived as follows:</t></li> </ul> <ul empty="true"> <li> <ul empty="true"> <li><ul spacing="normal"><li> <t>BitDepth<li>BitDepth = bit_depth_minus8 +8</t> </li> </ul> </li> </ul> </li> </ul> <ul empty="true"> <li> <ul empty="true"> <li> <ul spacing="normal"> <li> <t>QpBdOffset8</li> <li>QpBdOffset = bit_depth_minus8 *6</t> </li>6</li> </ul></li> </ul> </li> </ul> <ul empty="true"> <li><t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be in the range of 2 to 8, inclusive. Other values are reserved for future use.</t></li> </ul> <ul spacing="normal"> <li> <t>capture_time_distance</t> </li> </ul> <ul empty="true"> <li> <t>indicates</dd> <dt>capture_time_distance</dt> <dd>indicates the time difference between the capture time of the frames in the previous access unit and frames in the current access unit in milliseconds if there has been any access unit preceding the access unit this frame belongsto.</t> </li> </ul> <ul spacing="normal"> <li> <t>reserved_zero_8bits</t> </li> </ul> <ul empty="true"> <li> <t>MUSTto.</dd> <dt>reserved_zero_8bits</dt> <dd><bcp14>MUST</bcp14> be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the documentMUST<bcp14>MUST</bcp14> ignore PBU with values of reserved_zero_8bits greater than0.</t> </li> </ul>0.</dd> </dl> </section> <section anchor="quantization-matrix"> <name>Quantizationmatrix</name>Matrix</name> <figure anchor="syntaxcode-quantization_matrix"> <name>quantization_matrix() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- quantization_matrix(){ | for(i = 0; i < NumComps; i++){ | for(y = 0; y < 8; y++){ | for(x = 0; x < 8; x++){ | q_matrix[i][x][y] | u(8) } | } | } | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>q_matrix[i][x][y]</t> </li> </ul> <ul empty="true"> <li> <t>specifies<dl spacing="normal" newline="true"> <dt>q_matrix[i][x][y]</dt> <!-- [rfced] We are trying to draw a more clear connection between the text before and after the semicolon. Please consider whether the suggested text conveys the intended meaning. Otherwise, please clarify. Note that this text appears multiple times; we will update all similar instances based on the outcome of this discussion. Original: 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 for Cb and 2 for Cr. Perhaps: The array index i specifies an indicator for the color component when chroma_format_idc is equal to 2 or 3, Y is 0, Cb is 1, and CR is 2. --> <dd><t>specifies a scaling value in the quantization matrices. When 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 component; when chroma_format_idc is equal to 2 or 3, 0 for Y, 1 forCbCb, and 2 for Cr. The value of 0 for q_matrix[i][x][y] is reserved for future use.</t></li> </ul> <ul empty="true"> <li><t>The quantization matrix, QMatrix[i][x][y], is derived as follows:</t></li> </ul><ulempty="true"> <li> <t>QMatrix[i][x][y]spacing="normal"> <li>QMatrix[i][x][y] =q_matrix[i][x][y]</t> </li>q_matrix[i][x][y]</li> </ul> </dd> </dl> </section> <section anchor="tile-info"> <name>Tileinfo</name>Info</name> <figure anchor="syntaxcode-tile_info"> <name>tile_info() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- tile_info(){ | tile_width_in_mbs | u(20) tile_height_in_mbs | u(20) startMb = 0 | for(i = 0; startMb < FrameWidthInMbsY; i++){ | ColStarts[i] = startMb * MbWidth | startMb += tile_width_in_mbs | } | ColStarts[i] = FrameWidthInMbsY*MbWidth | TileCols = i | startMb = 0 | for(i = 0; startMb < FrameHeightInMbsY; i++){ | RowStarts[i] = startMb * MbHeight | startMb += tile_height_in_mbs | } | RowStarts[i] = FrameHeightInMbsY*MbHeight | TileRows = i | NumTiles = TileCols * TileRows | tile_size_present_in_fh_flag | u(1) if(tile_size_present_in_fh_flag){ | for(i = 0; i < NumTiles; i++){ | tile_size_in_fh[i] | u(32) } | } | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>tile_width_in_mbs</t> </li> </ul> <ul empty="true"> <li> <t>specifies<dl spacing="normal" newline="true"> <dt>tile_width_in_mbs</dt> <dd>specifies the width of a tile in units ofMBs.</t> </li> </ul> <ul spacing="normal"> <li> <t>tile_height_in_mbs</t> </li> </ul> <ul empty="true"> <li> <t>specifiesMBs.</dd> <dt>tile_height_in_mbs</dt> <dd>specifies the height of a tile in units ofMBs.</t> </li> </ul> <ul spacing="normal"> <li> <t>tile_size_present_in_fh_flag</t> </li> </ul> <ul empty="true"> <li> <t>equalMBs.</dd> <dt>tile_size_present_in_fh_flag</dt> <dd>equal to 1 specifies that tile_size_in_fh[i] is present inFramethe frame header. tile_size_present_in_fh_flag equal to 0 specifies that tile_size_in_fh[i] is not present inFrame header.</t> </li> </ul> <ul spacing="normal"> <li> <t>tile_size_in_fh[i]</t> </li> </ul> <ul empty="true"> <li> <t>indicatesthe frame header.</dd> <dt>tile_size_in_fh[i]</dt> <dd>indicates the size in bytes of i-th tile data in raster order in a frame. The value of tile_size_in_fh[i]MUST<bcp14>MUST</bcp14> have the same value with tile_size[i]. When it is not present, the value of tile_size_in_fh[i] is inferred to be equal to tile_size[i]. The value of 0 for tile_size_in_fh[i] is reserved for futureuse.</t> </li> </ul>use.</dd> </dl> </section> <section anchor="au-info"> <name>Accessunit information</name>Unit Information</name> <figure anchor="syntaxcode-au_info"> <name>au_info() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- au_info(){ | num_frames | u(16) for(i = 0; i < num_frames; i++){ | pbu_type | u(8) group_id | u(16) reserved_zero_8bits | u(8) frame_info() | } | reserved_zero_8bits | u(8) byte_alignment() | filler() | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>num_frames</t> </li> </ul> <ul empty="true"> <li> <t>indicates<dl spacing="normal" newline="true"> <dt>num_frames</dt> <dd>indicates the number of frames contained in the currentAU.</t> </li> </ul> <ul spacing="normal"> <li> <t>pbu_type</t> </li> </ul> <ul empty="true"> <li> <t>hasAU.</dd> <dt>pbu_type</dt> <dd><t>has the same semantics as pbu_type in the pbu_header()syntax. Note:syntax.</t> <t>Note: The value of pbu_typeMUST<bcp14>MUST</bcp14> be 1, 2, 25, 26, or 27 in bitstreams conforming to this version ofdocument.</t> </li> </ul> <ul spacing="normal"> <li> <t>group_id</t> </li> </ul> <ul empty="true"> <li> <t>hasthe document.</t></dd> <dt>group_id</dt> <dd>has the same semantics as group_id in the pbu_header()syntax.</t> </li> </ul> <ul spacing="normal"> <li> <t>reserved_zero_8bits</t> </li> </ul> <ul empty="true"> <li> <t>MUSTsyntax.</dd> <dt>reserved_zero_8bits</dt> <dd><bcp14>MUST</bcp14> be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the documentMUST<bcp14>MUST</bcp14> ignore PBU with values of reserved_zero_8bits greater than0.</t> </li> </ul>0.</dd> </dl> </section> <section anchor="metadata"> <name>Metadata</name> <figure anchor="syntaxcode-metadata"> <name>metadata() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- metadata(){ | metadata_size | u(32) currReadSize = 0 | do{ | payloadType = 0 | while(next_bits(8) == 0xFF){ | ff_byte | f(8) payloadType += ff_byte | currReadSize++ | } | metadata_payload_type | u(8) payloadType += metadata_payload_type | currReadSize++ | | payloadSize = 0 | while(next_bits(8) == 0xFF){ | ff_byte | f(8) payloadSize += ff_byte | currReadSize++ | } | metadata_payload_size | u(8) payloadSize += metadata_payload_size | currReadSize++ | | metadata_payload(payloadType, payloadSize) | currReadSize += payloadSize | } while(metadata_size > currReadSize) | filler() | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>metadata_size</t> </li> </ul> <ul empty="true"> <li> <t>specifies<dl spacing="normal" newline="true"> <dt>metadata_size</dt> <dd>specifies the size of metadata before filler() in the currentPBU.</t> </li> </ul> <ul spacing="normal"> <li> <t>ff_byte</t> </li> </ul> <ul empty="true"> <li> <t>isPBU.</dd> <dt>ff_byte</dt> <dd>is a byte equal to0xFF.</t> </li> </ul> <ul spacing="normal"> <li> <t>metadata_payload_type</t> </li> </ul> <ul empty="true"> <li> <t>specifies0xFF.</dd> <dt>metadata_payload_type</dt> <dd>specifies the last byte of the payload type of ametadata</t> </li> </ul> <ul spacing="normal"> <li> <t>metadata_payload_size</t> </li> </ul> <ul empty="true"> <li> <t>specifiesmetadata.</dd> <dt>metadata_payload_size</dt> <dd>specifies the last byte of the payload size of ametadata</t> </li> </ul>metadata.</dd> </dl> <t>Syntax and semantics of metadata_payload() are specified in <xref target="appendix-metadata"/>.</t> </section> <section anchor="filler"> <name>Filler</name> <figure anchor="syntaxcode-filler"> <name>filler() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- filler(){ | while(next_bits(8) == 0xFF) | ff_byte | f(8) }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>ff_byte</t> </li> </ul> <ul empty="true"> <li> <t>is<dl spacing="normal" newline="true"> <dt>ff_byte</dt> <dd>is a byte equal to0xFF.</t> </li> </ul>0xFF.</dd> </dl> </section> <section anchor="tile"> <name>Tile</name> <figure anchor="syntaxcode-tile"> <name>tile() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- tile(tileIdx){ | tile_header(tileIdx) | for(i = 0; i < NumComps; i++){ | tile_data(tileIdx, i) | } | while(more_data_in_tile()){ | tile_dummy_byte | b(8) } | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>tile_dummy_byte</t> </li> </ul> <ul empty="true"> <li> <t>has<dl spacing="normal" newline="true"> <dt>tile_dummy_byte</dt> <dd>has any pattern of 8-bitstring.</t> </li> </ul>string.</dd> </dl> </section> <section anchor="tile-header"> <name>Tile header</name> <figure anchor="syntaxcode-tileheader"> <name>tile_header() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- tile_header(tileIdx){ | tile_header_size | u(16) tile_index | u(16) for(i = 0; i < NumComps; i++){ | tile_data_size[i] | u(32) } | for(i = 0; i < NumComps; i++){ | tile_qp[i] | u(8) } | reserved_zero_8bits | u(8) byte_alignment() | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>tile_header_size</t> </li> </ul> <ul empty="true"> <li> <t>indicates<dl spacing="normal" newline="true"> <dt>tile_header_size</dt> <dd>indicates the size of the tile header inbytes.</t> </li> </ul> <ul spacing="normal"> <li> <t>tile_index</t> </li> </ul> <ul empty="true"> <li> <t>specifiesbytes.</dd> <dt>tile_index</dt> <dd>specifies the tile index in raster order in a frame. tile_indexMUST<bcp14>MUST</bcp14> have the same valuewith tileIdx.</t> </li> </ul> <ul spacing="normal"> <li> <t>tile_data_size[i]</t> </li> </ul> <ul empty="true"> <li> <t>indicatesas tileIdx.</dd> <dt>tile_data_size[i]</dt> <dd>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 component; when chroma_format_idc is equal to 2 or 3, 0 for Y, 1 forCbCb, and 2 for Cr. The value of 0 for tile_data_size[i] is reserved for futureuse.</t> </li> </ul> <ul spacing="normal"> <li> <t>tile_qp[i]</t> </li> </ul> <ul empty="true"> <li> <t>specifyuse.</dd> <dt>tile_qp[i]</dt> <dd><t>specifies the quantization parameter value for i-th 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 forCbCb, and 2 for Cr. The Qp[i] to be used for the MBs in the tile are derived asfollows</t> </li> </ul> <ul empty="true"> <li> <ul empty="true"> <li>follows:</t> <ul spacing="normal"><li> <t>Qp[i]<li>Qp[i] = tile_qp[i] -QpBdOffset</t> </li> </ul> </li> </ul> </li> </ul> <ul empty="true"> <li> <ul empty="true"> <li> <ul spacing="normal"> <li> <t>Qp[i] MUSTQpBdOffset</li> <li>Qp[i] <bcp14>MUST</bcp14> be in the range of -QpBdOffset to 51,inclusive.</t> </li> </ul> </li> </ul> </li> </ul> <ul spacing="normal"> <li> <t>reserved_zero_8bits</t> </li> </ul> <ul empty="true"> <li> <t>MUSTinclusive.</li> </ul></dd> <dt>reserved_zero_8bits</dt> <dd><bcp14>MUST</bcp14> be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of the documentMUST<bcp14>MUST</bcp14> ignore PBU with values of reserved_zero_8bits greater than0.</t> </li> </ul>0.</dd> </dl> </section> <section anchor="tile-data"> <name>Tiledata</name>Data</name> <figure anchor="syntaxcode-tiledata"> <name>tile_data() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- tile_data(tileIdx, cIdx){ | x0 = ColStarts[tileIdx % TileCols] | y0 = RowStarts[tileIdx // TileCols] | numMbColsInTile = (ColStarts[tileIdx % TileCols + 1] - | ColStarts[tileIdx % TileCols]) // MbWidth | numMbRowsInTile = (RowStarts[tileIdx // TileCols + 1] - | RowStarts[tileIdx // TileCols]) // MbHeight | numMbsInTile = numMbColsInTile * numMbRowsInTile | PrevDC = 0 | PrevDcDiff = 20 | Prev1stAcLevel = 0 | for(i = 0; i < numMbsInTile; i++){ | xMb = x0 + ((i % numMbColsInTile) * MbWidth) | yMb = y0 + ((i // numMbColsInTile) * MbHeight) | macroblock_layer(xMb, yMb, cIdx) | } | byte_alignment() | }| ]]></artwork>|]]></artwork> </figure> <!-- [rfced] Please confirm that no additional explanatory text is needed after Figure 21. --> </section> <section anchor="mb-layer"> <name>Macroblocklayer</name>Layer</name> <figure anchor="syntaxcode-macroblock_layer"> <name>macroblock_layer() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- macroblock_layer(xMb, yMb, cIdx){ | subW = (cIdx == 0)? 1 : SubWidthC | subH = (cIdx == 0)? 1 : SubHeightC | blkWidth = (cIdx == 0)? MbWidth : MbWidthC | blkHeight = (cIdx == 0)? MbHeight : MbHeightC | TrSize = 8 | for(y = 0; y < blkHeight; y += TrSize){ | for(x = 0; x < blkWidth; x += TrSize){ | abs_dc_coeff_diff | h(v) if(abs_dc_coeff_diff) | sign_dc_coeff_diff | u(1) TransCoeff[cIdx][xMb // subW + x][yMb // subH + y] = | PrevDC + abs_dc_coeff_diff * | (1 - 2*sign_dc_coeff_diff) | PrevDC = | TransCoeff[cIdx][xMb // subW + x][yMb // subH + y] | PrevDcDiff = abs_dc_coeff_diff | ac_coeff_coding(xMb // subW + x, yMb // subH + y, | log2(TrSize), log2(TrSize), cIdx) | } | } | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>abs_dc_coeff_diff</t> </li> </ul> <ul empty="true"> <li> <t>specifies<dl spacing="normal" newline="true"> <dt>abs_dc_coeff_diff</dt> <!-- [rfced] How may we expand "DC"? Differential coding? Will it be understood by readers without expansion? Original: * abs_dc_coeff_diff specifies the absolute value of the difference between the current DC transform coefficient level andPrevDC.</t> </li> </ul> <ul spacing="normal"> <li> <t>sign_dc_coeff_diff</t> </li> </ul> <ul empty="true"> <li> <t>specifiesPrevDC. --> <dd>specifies the absolute value of the difference between the current DC transform coefficient level and PrevDC.</dd> <dt>sign_dc_coeff_diff</dt> <dd>specifies the sign of the difference between the current DC transform coefficient level and PrevDC. sign_dc_coeff_diff equal to 0 specifies that the difference has a positive value. sign_dc_coeff_diff equal to 1 specifies that the difference has a negativevalue.</t> </li> </ul>value.</dd> </dl> <t>The transform coefficients are represented by the arrays TransCoeff[cIdx][x0][y0]. The array indices x0, y0 specify the location (x0, y0) relative to the top-left sample for each component 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, 1 forCbCb, and 2 for Cr. The value of TransCoeff[cIdx][x0][y0]MUST<bcp14>MUST</bcp14> be in the range of -32768 to 32767, inclusive.</t> </section> <section anchor="ac-coding"> <name>ACcoefficient coding</name>Coefficient Coding</name> <figure anchor="syntaxcode-ac_coeff_coding"> <name>ac_coeff_coding() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- ac_coeff_coding(x0, y0, log2BlkWidth, log2BlkHeight, cIdx){ | scanPos = 1 | firstAC = 1 | PrevLevel = Prev1stAcLevel | PrevRun = 0 | do{ | coeff_zero_run | h(v) for(i = 0; i < coeff_zero_run; i++){ | blkPos = ScanOrder[scanPos] | xC = blkPos & ((1 << log2BlkWidth) - 1) | yC = blkPos >> log2BlkWidth | TransCoeff[cIdx][x0+xC][y0 + yC] = 0 | scanPos++ | } | PrevRun = coeff_zero_run | if(scanPos < (1 << (log2BlkWidth + log2BlkHeight))){ | abs_ac_coeff_minus1 | h(v) sign_ac_coeff | u(1) level = (abs_ac_coeff_minus1 + 1) * | (1 - 2 * sign_ac_coeff) | blkPos = ScanOrder[scanPos] | xC = blkPos & ((1 << log2BlkWidth) - 1) | yC = blkPos >> log2BlkWidth | TransCoeff[cIdx][x0 + xC][y0 + yC] = level | scanPos++ | PrevLevel = abs_ac_coeff_minus1 + 1 | if(firstAC == 1){ | firstAC = 0 | Prev1stAcLevel = PrevLevel | } | } | } while(scanPos < (1 << (log2BlkWidth + log2BlkHeight))) | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>coeff_zero_run</t> </li> </ul> <ul empty="true"> <li> <t>specifies<dl spacing="normal" newline="true"> <dt>coeff_zero_run</dt> <dd>specifies the number of zero-valued transform coefficient levels that are located before the position of the next non-zero transform coefficient level in a scan of transform coefficientlevels.</t> </li> </ul> <ul spacing="normal"> <li> <t>abs_ac_coeff_minus1</t> </li> </ul> <ul empty="true"> <li> <t>pluslevels.</dd> <dt>abs_ac_coeff_minus1</dt> <dd>plus 1 specifies the absolute value of an AC transform coefficient level at the given scanningposition.</t> </li> </ul> <ul spacing="normal"> <li> <t>sign_ac_coeff</t> </li> </ul> <ul empty="true"> <li> <t>specifiesposition.</dd> <dt>sign_ac_coeff</dt> <dd>specifies the sign of an AC transform coefficient level for the given scanning position. sign_ac_coeff equal to 0 specifies that the corresponding AC transform coefficient level has a positive value. sign_ac_coeff equal to 1 specifies that the corresponding AC transform coefficient level has a negativevalue.</t> </li> </ul>value.</dd> </dl> <t>The array ScanOrder[sPos] specifies the mapping of the zig-zag scan position sPos, ranging from 0 to (1 << log2BlkWidth) * (1 << log2BlkHeight) - 1, inclusive, to a raster scan position rPos. ScanOrder is derived by invoking <xref target="zig-zag"/> with input parameters blkWidth equal to (1 << log2BlkWidth) and blkHeight equal to (1 << log2BlkHeight).</t> </section> <section anchor="byte-alignment"> <name>Bytealignment</name>Alignment</name> <figure anchor="syntaxcode-byte_alignment"> <name>byte_alignment() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- byte_alignment(){ | while(!byte_aligned()) | alignment_bit_equal_to_zero | f(1) }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>alignment_bit_equal_to_zero</t> </li> </ul> <ul empty="true"> <li> <t>MUST<dl spacing="normal" newline="true"> <dt>alignment_bit_equal_to_zero</dt> <dd><bcp14>MUST</bcp14> be equal to0.</t> </li> </ul>0.</dd> </dl> </section> </section> </section> <section anchor="decoding-process"> <name>Decodingprocess</name>Process</name> <t>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 this process is a decoded frame.</t> <t>The decoding process operates as follows for the current frame:</t> <ul spacing="normal"> <li> <t>The syntax structure for a coded frame is parsed to obtain the parsed syntax structures.</t> </li> <li> <!-- [rfced] "It is the requirement of bitstream conformance" is a bit awkward to read. Please consider whether the suggested update is correct. Otherwise, please clarify. Original: It is the requirement of bitstream conformance that the coded tiles of the frame MUST contain tile data for every MB of the frame, such that the division of the frame into tiles and the division of the tiles into MBs each forms a partitioning of the frame. Perhaps: For conforming bitstreams, the coded tiles of the frame MUST contain tile data for every MB of the frame, such that the division of the frame into tiles and the division of the tiles into MBs each forms a partitioning of the frame. --> <t>The processes in Sections <xreftarget="mb-decoding"/>,target="mb-decoding" format="counter"/>, <xreftarget="block-recon"/>target="block-recon" format="counter"/>, and <xreftarget="scaling-transform"/>target="scaling-transform" format="counter"/> specify the decoding processes using syntax elements in all syntax structures. It is the requirement of bitstream conformance that the coded tiles of the frameMUST<bcp14>MUST</bcp14> contain tile data for every MB of the frame, such that the division of the frame into tiles and the division of the tiles into MBs each forms a partitioning of the frame.</t> </li> <li> <t>After all the tiles in the current frame have been decoded, the decoded frame is cropped using the cropping rectangle if FrameWidthInSamplesY is not equal to FrameWidthInMbY * MbWidth or FrameHeightInSamplesY is not equal to FrameHeightInMbsY * MbHeight.</t> </li> <li> <t>The cropping rectangle, which specifies the samples of a frame that are output, is derived asfollows.</t> </li> </ul> <ul empty="true"> <li>follows:</t> <ul spacing="normal"> <li> <t>The cropping rectangle contains the luma samples with horizontal frame coordinates from 0 to FrameWidthInSampleY - 1 and vertical frame coordinates from 0 to FrameHeightInSamplesY - 1, inclusive.</t> </li></ul> </li> </ul> <ul empty="true"> <li> <ul spacing="normal"><li> <t>The cropping rectangle contains the two chroma arrays having frame coordinates (x//SubWidthC, y//SubHeightC), where (x,y) are the frame coordinates of the specified luma samples.</t> </li> </ul> </li> </ul> <section anchor="mb-decoding"> <name>MBdecoding process</name>Decoding Process</name> <t>This process is invoked for each MB.</t> <!-- [rfced] Please clarify "(when chroma_format_idc is equal to 2 or 3, Y, Cb, and Cr)." Perhaps "(when chroma_format_idc is equal to 2 or 3, and Y, Cb, and Cr are specified)"? Original: Outputs of this process are the reconstructed samples of all the NumComps color components (when chroma_format_idc is equal to 2 or 3, Y, Cb, and Cr) for the current MB. Similarly, please let us know how/if mention of Cb and Cr may be clarified here as well? Original: * When chroma_format_idc is not equal to 0, let recSamples[1] be a (MbWidthC)x(MbHeightC) array of the reconstructed samples of the second color component (when chroma_format_idc is equal to 2 or 3, Cb). ... * When chroma_format_idc is not equal to 0, let recSamples[2] be a (MbWidthC)x(MbHeightC) array of the reconstructed samples of the third color component(when chroma_format_idc is equal to 2 or 3, Cr). --> <t>Input to this process is a luma location (xMb, yMb) specifying the top-left sample of the current luma MB relative to thetop lefttop-left luma sample of the current frame. Outputs of this process are the reconstructed samples of all the NumComps color components (when chroma_format_idc is equal to 2 or 3, Y, Cb, and Cr) for the current MB.</t> <t>The following steps apply:</t> <ul spacing="normal"> <li> <t>Let recSamples[0] be a (MbWidth)x(MbHeight) array of the reconstructed samples of the first color component (when chroma_format_idc is equal to 2 or 3, Y).</t> </li> <li> <t>The block reconstruction process as specified in <xref target="block-recon"/> is invoked with the luma location (xMb, yMb), the variable nBlkW set equal to MbWidth, the variable nBlkH set equal to MbHeight, the variable cIdx set equal to 0, and the (MbWidth)x(MbHeight) array recSamples[0] asinputs, theinputs. The output is a modified version of the (MbWidth)x(MbHeight) array recSamples[0], which is the reconstructed samples of the first color component for the current MB.</t> </li> <li> <t>When chroma_format_idc is not equal to 0, let recSamples[1] be a (MbWidthC)x(MbHeightC) array of the reconstructed samples of the second color component (when chroma_format_idc is equal to 2 or 3, Cb).</t> </li> <li> <t>When chroma_format_idc is not equal to 0, the block reconstruction process as specified in <xref target="block-recon"/> is invoked with the luma location (xMb, yMb), the variable nBlkW set equal to MbWidthC, the variable nBlkH set equal to MbHeightC, the variable cIdx set equal to 1, and the (MbWidthC)x(MbHeightC) array recSamples[1] asinputs, theinputs. The output is a modified version of the (MbWidthC)x(MbHeightC) array recSamples[1], which is the reconstructed samples of the second color component for the current MB.</t> </li> <li> <t>When chroma_format_idc is not equal to 0, let recSamples[2] be a (MbWidthC)x(MbHeightC) array of the reconstructed samples of the third color component(when chroma_format_idc is equal to 2 or 3, Cr).</t> </li> <li> <t>When chroma_format_idc is not equal to 0, the block reconstruction process as specified in <xref target="block-recon"/> is invoked with the luma location (xMb, yMb), the variable nBlkW set equal to MbWidthC, the variable nBlkH set equal to MbHeightC, the variable cIdx set equal to 2, and the (MbWidthC)x(MbHeightC) array recSamples[2] asinputs, theinputs. The output is a modified version of the (MbWidthC)x(MbHeightC) array recSamples[2], which is the reconstructed samples of the third color component for the current MB.</t> </li> <li> <t>When chroma_format_idc is equal to 4, let recSamples[3] be a (MbWidthC)x(MbHeightC) array of the reconstructed samples of the fourth color component.</t> </li> <li> <t>When chroma_format_idc is equal to 4, the block reconstruction process as specified inSection 6.2<xref target="block-recon"/> is invoked with the luma location (xMb, yMb), the variable nBlkW set equal to MbWidthC, the variable nBlkH set equal to MbHeightC, the variable cIdx set equal to 3, and the (MbWidthC)x(MbHeightC) array recSamples[3] asinputs, theinputs. The output is a modified version of the (MbWidthC)x(MbHeightC) array recSamples[3], which is the reconstructed samples of the fourth color component for the current MB.</t> </li> </ul> </section> <section anchor="block-recon"> <name>Blockreconstruction process</name>Reconstruction Process</name> <t>Inputs to this process are:</t> <ul spacing="normal"> <li> <t>a luma location (xMb, yMb) specifying the top-left sample of the current MB relative to thetop lefttop-left luma sample of the current frame,</t> </li> <li> <t>two variables nBlkW and nBlkH specifying the width and the height of the current block,</t> </li> <li> <t>a variable cIdx specifying the color component of the current block, and</t> </li> <li> <t>an(nBlkW)x(nBlkH),(nBlkW)x(nBlkH) array of recSamples of a reconstructed block.</t> </li> </ul> <t>Output of this process is a modified version of the (nBlkW)x(nBlkH) array recSamples of reconstructed samples.</t> <t>The following applies:</t> <ul spacing="normal"> <li> <t>The variables numBlkX and numBlkY are derived as follows:</t></li> </ul> <ul empty="true"> <li> <ul empty="true"> <li><ul spacing="normal"> <li> <t>numBlkX = nBlkW // TrSize</t> </li></ul> </li> </ul> </li> </ul> <ul empty="true"> <li> <ul empty="true"> <li> <ul spacing="normal"><li> <t>numBlkY = nBlkH // TrSize</t> </li> </ul> </li></ul> </li> </ul> <ul spacing="normal"><!-- [rfced] Section 6.2: Is there text missing after these bullets? Nothing appears after "the following applies." Also, the formatting here looks odd. Please review and let us know how the text may be updated. * For yIdx = 0..numBlkY - 1, the following applies: o For xIdx = 0..numBlkX - 1, the following applies: --> <li> <t>For yIdx = 0..numBlkY - 1, the following applies:</t></li> </ul> <ul empty="true"> <li> <ul empty="true"> <li><ul spacing="normal"> <li> <t>For xIdx = 0..numBlkX - 1, the following applies:</t> </li> </ul> </li> </ul></li> </ul><t>The variables xBlk and yBlk are derived as follows:</t> <ulempty="true"> <li> <ul empty="true"> <li> <ulspacing="normal"> <li> <t>xBlk = xMb // (cIdx==0? 1: SubWidthC) + xIdx*TrSize</t> </li></ul> </li> </ul> </li> </ul> <ul empty="true"> <li> <ul empty="true"> <li> <ul spacing="normal"><li> <t>yBlk = yMb // (cIdx==0? 1: SubHeightC) + yIdx*TrSize</t> </li></ul> </li> </ul> </li> </ul> <ul spacing="normal"><li> <t>The scaling and transformation process as specified in <xref target="scaling-transform"/> is invoked with the location (xBlk, yBlk), the variable cIdx set equal to cIdx, the transform width nBlkW set equal toTrSizeTrSize, and the transform height nBlkH set equal to TrSize asinputs, and theinputs. The output is a (TrSize)x(TrSize) array r of a reconstructed block.</t> </li> <li> <t>The (TrSize)x(TrSize) array recSamples is modified as follows:</t></li> </ul> <ul empty="true"> <li><ulempty="true">spacing="normal"> <li> <t>recSamples[(xIdx * TrSize) + i, (yIdx * TrSize) + j] = r[i,j], with i=0..TrSize-1, j=0..TrSize-1</t> </li> </ul> </li> </ul> </section> <section anchor="scaling-transform"> <name>Scaling andtransformation process</name>Transformation Process</name> <t>Inputs to this process are:</t> <ul spacing="normal"> <li> <t>a location (xBlkY, yBlkY) of the current color component specifying the top-left sample of the current block relative to the top-left sample of the current frame,</t> </li> <li> <t>a variable cIdx specifying the color component of the current block,</t> </li> <li> <t>a variable nBlkW specifying the width of the current block, and</t> </li> <li> <t>a variable nBlkH specifying the height of the current block.</t> </li> </ul> <t>Output of this process is the (nBlkW)x(nBlkH) array of reconstructed samples r with elements r[x][y].</t> <t>The quantization parameter qP is derived as follows:</t> <ulempty="true"> <li> <ul empty="true">spacing="normal"> <li> <t>qP = Qp[cIdx] + QpBdOffset</t> </li> </ul></li> </ul><t>The (nBlKW)x(nBlkH) array of reconstructed samples r is derived as follows:</t> <ul spacing="normal"> <li> <t>The scaling process for transform coefficients as specified in <xref target="scaling-process"/> is invoked with the block location (xBlkY, yBlkY), the block width nBlkW and the block height nBlkH, the color component variable cIdx, and the quantization parameter qP asinputs, and theinputs. The output is an (nBlkW)x(nBlkH) array of scaled transform coefficients d.</t> </li> <li> <t>The transformation process for scaled transform coefficients as specified in <xref target="process-coeff"/> is invoked with the block location (xBlkY, yBlkY), the block width nBlkW and the block height nBlkH, the color component variable cIdx, and the (nBlkW)x(nBlkH) array of scaled transform coefficients d asinputs, and theinputs. The output is an (nBlkW)x(nBlkH) array of reconstructed samples r.</t> </li> <li> <t>The variable bdShift is derived as follows:</t></li> </ul> <ul empty="true"> <li><ulempty="true">spacing="normal"> <li> <t>bdShift = 20 - BitDepth</t> </li> </ul> </li></ul> <ul spacing="normal"><li> <t>The reconstructed sample values r[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 are modified as follows:</t></li> </ul> <ul empty="true"> <li><ulempty="true">spacing="normal"> <li> <t>r[x][y] = clip(0, (1 << BitDepth)-1, ((r[x][y]+(1 << (bdShift-1)))>>bdShift) + (1 << (BitDepth-1)))</t> </li> </ul> </li> </ul> <section anchor="scaling-process"> <name>ScalingprocessProcess fortransform coefficients</name>Transform Coefficients</name> <t>Inputs to this process are:</t> <ul spacing="normal"> <li> <t>a location (xBlkY, yBlkY) of the current color component specifying the top-left sample of the current block relative to the top-left sample of the current frame,</t> </li> <li> <t>a variable nBlkW specifying the width of the current block,</t> </li> <li> <t>a variable nBlkH specifying the height of the current block,</t> </li> <li> <t>a variable cIdx specifying the color component of the current block, and</t> </li> <li> <t>a variable qP specifying the quantization parameter.</t> </li> </ul> <t>Output of this process is the (nBlkW)x(nBlkH) array d of scaled transform coefficients with elements d[x][y].</t> <t>The variable bdShift is derived as follows:</t> <ulempty="true"> <li> <ul empty="true">spacing="normal"> <li> <t>bdShift = BitDepth + ((log2(nBlkW) + log2(nBlkH)) // 2) - 5</t> </li> </ul></li> </ul><t>The list levelScale[] is specified as follows:</t> <ulempty="true"> <li> <ul empty="true">spacing="normal"> <li> <t>levelScale[k] = {40, 45, 51, 57, 64, 71} with k = 0..5.</t> </li> </ul></li> </ul><t>For the derivation of the scaled transform coefficients d[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1, the following applies:</t> <ul spacing="normal"> <li> <t>The scaled transform coefficient d[x][y] is derived as follows:</t></li> </ul> <ul empty="true"> <li><ulempty="true">spacing="normal"> <li> <t>d[x][y] = clip(-32768, 32767, ((TransCoeff[cIdx][xBlkY][yBlkY] * QMatrix[cIdx][x][y] * levelScale[qP % 6] << (qP//6)) + (1 << (bdShift-1)) >> bdShift))</t> </li> </ul> </li> </ul> </section> <section anchor="process-coeff"> <name>Process forscaled transform coefficients</name>Scaled Transform Coefficients</name> <section anchor="general-1"> <name>General</name> <t>Inputs to this process are:</t> <ul spacing="normal"> <li> <t>a location (xBlkY, yBlkY) of the current color component specifying the top-left sample of the current block relative to the top-left sample of the current frame,</t> </li> <li> <t>a variable nBlkW specifying the width of the current block,</t> </li> <li> <t>a variable nBlkH specifying the height of the current block, and</t> </li> <li> <t>an (nBlkW)x(nBlkH) array d of scaled transform coefficients with elements d[x][y].</t> </li> </ul> <t>Output of this process is the (nBlkW)x(nBlkH) array r of reconstructed samples with elements r[x][y].</t> <t>The (nBlkW)x(nBlkH) array r of reconstructed samples is derived as follows:</t> <ul spacing="normal"> <li> <t>Each (vertical) column of scaled transform coefficients d[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 is transformed to e[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 by invoking theone- dimensionalone-dimensional transformation process as specified in <xref target="transform-process"/> for each column x = 0..nBlkW - 1 with the size of the transform block nBlkH, and the list d[x][y] with y = 0..nBlkH - 1 asinputs, and theinputs. The output is the list e[x][y] with y = 0..nBlkH - 1.</t> </li> <li> <t>The following applies:</t></li> </ul><ulempty="true"> <li> <ul empty="true">spacing="normal"> <li> <t>g[x][y] = (e[x][y] + 64) >> 7</t> </li> </ul> </li></ul> <ul spacing="normal"><li> <t>Each (horizontal) row of the resulting array g[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 is transformed to r[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 by invoking the one-dimensional transformation process as specified in <xref target="transform-process"/> for each row y = 0..nBlkH - 1 with the size of the transform block nBlkW, and the list g[x][y] with x = 0..nBlkW - 1 asinputs, and theinputs. The output is the list r[x][y] with x = 0..nBlkW - 1.</t> </li> </ul> </section> <section anchor="transform-process"> <name>Transformationprocess</name>Process</name> <t>Inputs to this process are:</t> <ul spacing="normal"> <li> <t>a variable nTbS specifying the sample size of scaled transform coefficients, and</t> </li> <li> <t>a list of scaled transform coefficients x with elements x[j], with j = 0..(nTbS - 1).</t> </li> <!-- [rfced] Should the last 3 bulleted items be regular text (i.e., not part of the bulleted list)? 6.3.2.2. Transformation process Inputs to this process are: * a variable nTbS specifying the sample size of scaled transform coefficients, and * a list of scaled transform coefficients x with elements x[j], with j = 0..(nTbS - 1). * Output of this process is the list of transformed samples y with elements y[i], with i = 0..(nTbS - 1). * The transformation matrix derivation process as specified in Section 6.3.2.3. invoked with the transform size nTbS as input, and the transformation matrix transMatrix as output. * The list of transformed samples y[i] with i = 0..(nTbS - 1) is derived as follows: y[i] = sum(j = 0, nTbS - 1, transMatrix[i][j] * x[j]) --> <li> <t>Output of this process is the list of transformed samples y with elements y[i], with i = 0..(nTbS - 1).</t> </li> <li> <t>The transformation matrix derivation process as specified in <xreftarget="matrix-process"/>.target="matrix-process"/> is invoked with the transform size nTbS as input, and the transformation matrix transMatrix as output.</t> </li> <li> <t>The list of transformed samples y[i] with i = 0..(nTbS - 1) is derived as follows:</t></li> </ul> <ul empty="true"> <li><ulempty="true">spacing="normal"> <li> <t>y[i] = sum(j = 0, nTbS - 1, transMatrix[i][j] * x[j])</t> </li> </ul> </li> </ul> </section> <section anchor="matrix-process"> <name>Transformationmatrix derivation process</name>Matrix Derivation Process</name> <t>Input to this process is a variable nTbS specifying the horizontal sample size of scaled transform coefficients.</t> <t>Output of this process is the transformation matrix transMatrix.</t> <t>The transformation matrix transMatrix is derived based on nTbs as follows:</t> <ul spacing="normal"> <li> <t>If nTbS is equal to 8, the following applies:</t></li> </ul><figure anchor="transmatrix"> <name>Transform matrix for nTbS == 8</name> <artwork><![CDATA[ transMatrix[m][n] = { { 64, 64, 64, 64, 64, 64, 64, 64 } { 89, 75, 50, 18, -18, -50, -75, -89 } { 84, 35, -35, -84, -84, -35, 35, 84 } { 75, -18, -89, -50, 50, 89, 18, -75 } { 64, -64, -64, 64, 64, -64, -64, 64 } { 50, -89, 18, 75, -75, -18, 89, -50 } { 35, -84, 84, -35, -35, 84, -84, 35 } { 18, -50, 75, -89, 89, -75, 50, -18 }} ]]></artwork>}]]></artwork> </figure> </li> </ul> </section> </section> </section> </section> <section anchor="parsing-process"> <name>Parsingprocess</name>Process</name> <section anchor="process_h"> <name>Process forsyntax element typeSyntax Element Type h(v)</name> <t>This process is invoked for the parsing of syntax elements with descriptor h(v) in <xref target="mb-layer"/> and <xref target="ac-coding"/>.</t> <section anchor="process-for-absdccoeffdiff"> <name>Process for abs_dc_coeff_diff</name> <t>Inputs to this process are bits for the abs_dc_coeff_diff syntax element. Output of this process is a value of the abs_dc_coeff_diff syntax element. The variable kParam is derived as follows:</t><ul empty="true"> <li> <ul empty="true"> <li> <t>kParam<t indent="3">kParam = clip(0, 5, PrevDcDiff >> 1)</t></li> </ul> </li> </ul><t>The value of syntax element abs_dc_coeff_diff is obtained by invoking the parsing process forvariable lengthvariable-length codes as specified in <xref target="process-vlc"/> with kParam.</t> </section> <section anchor="process-for-coeffzerorun"> <name>Process for coeff_zero_run</name> <t>Inputs to this process are bits for the coeff_zero_run syntax element.</t> <t>Output of this process is a value of the coeff_zero_run syntax element.</t> <t>The variable kParam is derived as follows:</t><ul empty="true"> <li> <ul empty="true"> <li> <t>kParam<t indent="3">kParam = clip(0, 2, PrevRun >> 2)</t></li> </ul> </li> </ul><t>The value of syntax element coeff_zero_run is obtained by invoking the parsing process forvariable lengthvariable-length codes as specified in <xref target="process-vlc"/> with kParam.</t> </section> <section anchor="process-for-absaccoeffminus1"> <name>Process for abs_ac_coeff_minus1</name> <t>Inputs to this process are bits for the abs_ac_coeff_minus1 syntax element.</t> <t>Output of this process is a value of the abs_ac_coeff_minus1 syntax element.</t> <t>The variable kParam is derived as follows:</t><ul empty="true"> <li> <ul empty="true"> <li> <t>kParam<t indent="3">kParam = clip(0, 4, PrevLevel >> 2)</t></li> </ul> </li> </ul><t>The value of syntax element abs_ac_coeff_minus1 is obtained by invoking the parsing process forvariable lengthvariable-length codes as specified in <xref target="process-vlc"/> with kParam.</t> </section> <section anchor="process-vlc"> <name>Process forvariable length codes</name>Variable-Length Codes</name> <t>Input to this process is kParam.</t> <t>Output of this process is a value, symbolValue, of a syntax element.</t> <t>The symbolValue is derived as follows:</t> <figure anchor="parse_symbolValue"> <name>Parsing process of symbolValue</name> <artwork><![CDATA[ symbolValue = 0 parseExpGolomb = 1 k = kParam stopLoop = 0 if(read_bits(1) == 1){ parseExpGolomb = 0 } else{ if(read_bits (1) == 0){ symbolValue += (1 << k) parseExpGolomb = 0 } else{ symbolValue += (2 << k) parseExpGolomb = 1 } } if(parseExpGolomb){ do{ if(read_bits(1) == 1){ stopLoop = 1 } else{ symbolValue += (1 << k) k++ } } while(!stopLoop) } if(k > 0) symbolValue +=read_bits(k) ]]></artwork>read_bits(k)]]></artwork> </figure> <t>where the value returned from read_bits(n) is interpreted as a binary representation ofaan n-bit unsigned integer with the most significant bit written first.</t> </section> </section> <section anchor="codeword-generation-process-for-hv-informative"> <name>Codewordgeneration processGeneration Process for h(v)(informative)</name>(Informative)</name> <t>This process specifies the code generation process for syntax elements with descriptor h(v).</t> <section anchor="process-for-absdccoeffdiff-1"> <name>Process for abs_dc_coeff_diff</name> <t>Input to this process is a symbol value of the abs_dc_coeff_diff syntax element.</t> <t>Output of this process is a codeword of the abs_dc_coeff_diff syntax element.</t> <t>The variable kParam is derived as follows:</t><ul empty="true"> <li> <ul empty="true"> <li> <t>kParam<t indent="3">kParam = clip(0, 5, PrevDcDiff >> 1)</t></li> </ul> </li> </ul><t>The codeword of syntax element abs_dc_coeff_diff is obtained by invoking the generation process forvariable lengthvariable-length codes as specified in <xref target="process-generate-vlc"/> with the symbol value symbolValue and kParam.</t> </section> <section anchor="process-for-coeffzerorun-1"> <name>Process for coeff_zero_run</name> <t>Input to this process is a symbol value of the coeff_zero_run syntax element.</t> <t>Output of this process is a codeword of the coeff_zero_run syntax element.</t> <t>The variable kParam is derived as follows:</t><ul empty="true"> <li> <ul empty="true"> <li> <t>kParam<t indent="3">kParam = clip(0, 2, PrevRun >> 2)</t></li> </ul> </li> </ul><t>The codeword of syntax element coeff_zero_run is obtained by invoking the generation process forvariable lengthvariable-length codes as specified in <xref target="process-generate-vlc"/> with the symbol value symbolValue and kParam.</t> </section> <section anchor="process-for-absaccoeffminus1-1"> <name>Process for abs_ac_coeff_minus1</name> <t>Input to this process is a symbol value of the abs_ac_coeff_minus1 syntax element.</t> <t>Output of this process is a codeword of the abs_ac_coeff_minus1 syntax element.</t> <t>The variable kParam is derived as follows:</t><ul empty="true"> <li> <ul empty="true"> <li> <t>kParam<t indent="3">kParam = clip(0, 4, PrevLevel >> 2)</t></li> </ul> </li> </ul><t>The codeword of syntax element abs_ac_coeff_minus1 is obtained by invoking the generation forvariable lengthvariable-length codes as specified in <xref target="process-generate-vlc"/> with the symbol value symbolValue and kParam.</t> </section> <section anchor="process-generate-vlc"> <name>Process forvariable length codes</name>Variable-Length Codes</name> <t>Inputs to this process are symbolVal and kParam</t> <t>Output of this process is a codeword of a syntax element.</t> <t>The codeword is derived as follows:</t> <figure anchor="gen_symbolValue"> <name>Generating bits from symbolValue</name> <artwork><![CDATA[ PrefixVLCTable[3][2] = {{1, 0}, {0, 0}, {0, 1}} symbolValue = symbolVal valPrefixVLC = clip(0, 2, symbolVal >> kParam) bitCount = 0 k = kParam while(symbolValue >= (1 << k)){ symbolValue -= (1 << k) if(bitCount < 2) put_bits(PrefixVLCTable[valPrefixVLC][bitCount], 1) else put_bits(0, 1) if(bitCount >= 2) k++ bitCount++ } if(bitCount < 2) put_bits(PrefixVLCTable[valPrefixVLC][bitCount], 1) else put_bits(1, 1) if(k > 0) put_bits(symbolValue,k) ]]></artwork>k)]]></artwork> </figure> <t>where a codeword generated from put_bits(v, n) is interpreted as a binary representation of an n-bit unsigned integer value v with the most significant bit written first.</t> </section> </section> </section> <section anchor="appendix-metadata"> <name>Metadatainformation</name>Information</name> <section anchor="metadata-payload"> <name>Metadatapayload</name>Payload</name> <figure anchor="syntax-metadatapayload"> <name>metadata_payload() syntax code</name> <!-- [rfced] Please confirm that no additional explanatory text is needed after Figure 28. --> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- metadata_payload(payloadType, payloadSize){ | if(payloadType == 4){ | metadata_itu_t_t35(payloadSize) | } | else if(payloadType == 5){ | metadata_mdcv(payloadSize) | } | else if(payloadType == 6){ | metadata_cll(payloadSize) | } | else if(payloadType == 10){ | metadata_filler(payloadSize) | } | else if(payloadType == 170){ | metadata_user_defined(payloadSize) | } | else{ | metadata_undefined(payloadSize) | } | byte_alignment() | }| ]]></artwork>|]]></artwork> </figure> </section> <section anchor="list-of-metadata-syntax-and-semantics"> <name>List ofmetadata syntaxMetadata Syntax andsemantics</name>Semantics</name> <section anchor="filler-metadata"> <name>Fillermetadata</name>Metadata</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- metadata_filler(payloadSize){ | for(i = 0; i < payloadSize; i++){ | ff_byte | f(8) } | }| ]]></artwork> <ul spacing="normal"> <li> <t>ff_byte</t> </li> </ul> <ul empty="true"> <li> <t>is|]]></artwork> <dl spacing="normal" newline="true"> <dt>ff_byte</dt> <dd>is a byte equal to0xFF.</t> </li> </ul>0xFF.</dd> </dl> </section> <section anchor="recommendation-itu-t-t35-metadata"> <name>Recommendation ITU-T T.35metadata</name>Metadata</name> <t>This metadata contains information registered as specified in <xref target="ITUT-T35"/>.</t> <figure anchor="syntax-metat35"> <name>metadata_itu_t_t35() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- metadata_itu_t_t35(payloadSize){ | itu_t_t35_country_code | b(8) readSize = payloadSize - 1 | | if(itu_t_t35_country_code == 0xFF){ | itu_t_t35_country_code_extension | b(8) readSize-- | } | | for(i = 0; i < readSize; i++){ | itu_t_t35_payload[i] | b(8) } | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>itu_t_t35_country_code</t> </li> </ul> <ul empty="true"> <li> <t>MUST<dl spacing="normal" newline="true"> <dt>itu_t_t35_country_code</dt> <dd><bcp14>MUST</bcp14> be a byte having the semantics of country code as specified in Annex A of <xreftarget="ITUT-T35"/>.</t> </li> </ul> <ul spacing="normal"> <li> <t>itu_t_t35_country_code_extension</t> </li> </ul> <ul empty="true"> <li> <t>MUSTtarget="ITUT-T35"/>.</dd> <dt>itu_t_t35_country_code_extension</dt> <dd><bcp14>MUST</bcp14> be a byte having the semantics of country code as specified in Annex B of <xreftarget="ITUT-T35"/>.</t> </li> </ul> <ul spacing="normal"> <li> <t>itu_t_t35_payload[i]</t> </li> </ul> <ul empty="true"> <li> <t>MUSTtarget="ITUT-T35"/>.</dd> <dt>itu_t_t35_payload[i]</dt> <dd><bcp14>MUST</bcp14> be a byte having the semantics of data registered as specified in <xreftarget="ITUT-T35"/>.</t> </li> </ul>target="ITUT-T35"/>.</dd> </dl> <t>The terminal provider code and terminal provider oriented code as specified in <xref target="ITUT-T35"/>MUST<bcp14>MUST</bcp14> be contained in the first one or more bytes of the itu_t_t35_payload. Any remaining bytes in itu_t_t35_payload dataMUST<bcp14>MUST</bcp14> be data having syntax and semantics as specified by the entity identified by the <xref target="ITUT-T35"/> country code and terminal provider code. Note that any metadata to be carried with this type of payload is expected to have been registered through either national administrator, the Alliance for Telecommuncations Industry Solutions (ATIS) or the ITUT-T Telecommnunication Standardization Bureau (TSB) as specified in <xref target="ITUT-T35"/>.</t> </section> <section anchor="mastering-display-color-volume-metadata"> <name>Masteringdisplay color volume metadata</name>Display Color Volume Metadata</name> <figure anchor="syntax-metamdcv"> <name>metadata_mdcv() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- metadata_mdcv(payloadSize){ | for(i = 0; i < 3; i++){ | primary_chromaticity_x[i] | u(16) primary_chromaticity_y[i] | u(16) } | white_point_chromaticity_x | u(16) white_point_chromaticity_y | u(16) max_mastering_luminance | u(32) min_mastering_luminance | u(32) }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>primary_chromaticity_x[i]</t> </li> </ul> <ul empty="true"> <li> <t>specifies<dl spacing="normal" newline="true"> <dt>primary_chromaticity_x[i]</dt> <!-- [rfced] Will readers be familiar with CIE 1931? Please consider whether a reference should be added. Note that "CIE 1931" is mentioned 4 times. If you would like to add a reference, please provide the reference entry. Original: * primary_chromaticity_x[i] specifies a 0.16 fixed-point format of X chromaticity coordinate of mastering display as defined by CIE 1931, where i = 0, 1, 2 specifies Red, Green, Bluerespectively.</t> </li> </ul> <ul spacing="normal"> <li> <t>primary_chromaticity_y[i]</t> </li> </ul> <ul empty="true"> <li> <t>specifiesrespectively. --> <dd>specifies a 0.16 fixed-point format of X chromaticity coordinate of mastering display as defined by CIE 1931, where i = 0, 1, 2 specifies Red, Green, Blue, respectively.</dd> <dt>primary_chromaticity_y[i]</dt> <dd>specifies a 0.16 fixed-point format of Y chromaticity coordinate of mastering display as defined by CIE 1931, where i = 0, 1, 2 specifies Red, Green,Blue respectively.</t> </li> </ul> <ul spacing="normal"> <li> <t>white_point_chromaticity_x</t> </li> </ul> <ul empty="true"> <li> <t>specifiesBlue, respectively.</dd> <dt>white_point_chromaticity_x</dt> <dd>specifies a 0.16 fixed-point format of white point X chromaticity coordinate of mastering display as defined by CIE1931.</t> </li> </ul> <ul spacing="normal"> <li> <t>white_point_chromaticity_y</t> </li> </ul> <ul empty="true"> <li> <t>specifies1931.</dd> <dt>white_point_chromaticity_y</dt> <dd>specifies a 0.16 fixed-point format of white point Y chromaticity coordinate as mastering display defined by CIE1931.</t> </li> </ul> <ul spacing="normal"> <li> <t>max_mastering_luminance</t> </li> </ul> <ul empty="true"> <li> <t>is1931.</dd> <dt>max_mastering_luminance</dt> <dd>is a 24.8 fixed-point format of maximum display mastering luminance, represented in candelas per squaremeter.</t> </li> </ul> <ul spacing="normal"> <li> <t>min_mastering_luminance</t> </li> </ul> <ul empty="true"> <li> <t>is ameter.</dd> <dt>min_mastering_luminance</dt> <dd>is an 18.14 fixed-point format of minimum display mastering luminance, represented in candelas per squaremeter.</t> </li> </ul>meter.</dd> </dl> </section> <section anchor="content-light-level-information-metadata"> <name>Contentlight level information metadata</name>Light-Level Information Metadata</name> <figure anchor="syntax-metatcontentlight"> <name>metadata_cll() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- metadata_cll(payloadSize){ | max_cll | u(16) max_fall | u(16) }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>max_cll</t> </li> </ul> <ul empty="true"> <li> <t>specifies<dl spacing="normal" newline="true"> <dt>max_cll</dt> <dd>specifies the maximum content light level information as specified in <xref target="CEA-861.3"/>, AppendixA.</t> </li> </ul> <ul spacing="normal"> <li> <t>max_fall</t> </li> </ul> <ul empty="true"> <li> <t>specifiesA.</dd> <dt>max_fall</dt> <dd>specifies the maximum frame-average light level information as specified in <xref target="CEA-861.3"/>, AppendixA.</t> </li> </ul>A.</dd> </dl> </section> <section anchor="user-defined-metadata"><name>User defined metadata</name><name>User-Defined Metadata</name> <t>This metadata has user data identified by a universal unique identifier asspecifiesspecified in <xref target="RFC9562"/>, the contents of which are not specified in this document.</t> <figure anchor="syntax-metauserdef"> <name>metadata_user_defined() syntax code</name> <artwork><![CDATA[ syntax code | type ------------------------------------------------------------|----- metadata_user_defined(payloadSize){ | uuid | u(128) for(i = 0; i < (payloadSize - 16); i++) | user_defined_data_payload[i] | b(8) }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>uuid</t> </li> </ul> <ul empty="true"> <li> <t>MUST<dl spacing="normal" newline="true"> <dt>uuid</dt> <!-- [rfced] Please note that we expanded UUID as "Universally Unique Identifier." Please let us know if any corrections are needed. Original: * uuid MUST be a 128-bit value specified as a generated UUID according to the procedures specified in [RFC9562]. --> <dd><bcp14>MUST</bcp14> be a 128-bit value specified as a generated Universally Unique Identifier (UUID) according to the procedures specified in <xreftarget="RFC9562"/>.</t> </li> </ul> <ul spacing="normal"> <li> <t>user_defined_data_payload[i]</t> </li> </ul> <ul empty="true"> <li> <t>MUSTtarget="RFC9562"/>.</dd> <dt>user_defined_data_payload[i]</dt> <dd><bcp14>MUST</bcp14> be a byte havinguser defineduser-defined syntax and semantics as specified by the UUIDgenerator.</t> </li> </ul>generator.</dd> </dl> </section> <section anchor="undefined-metadata"> <name>Undefinedmetadata</name>Metadata</name> <figure anchor="syntax-metaund"> <name>metadata_undefined() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- metadata_undefined(payloadSize){ | for(i = 0; i < payloadSize; i++){ | undefined_metadata_payload_byte[i] | b(8) } | }| ]]></artwork>|]]></artwork> </figure><ul spacing="normal"> <li> <t>undefined_metadata_payload_byte[i]</t> </li> </ul> <ul empty="true"> <li> <t>is<dl spacing="normal" newline="true"> <dt>undefined_metadata_payload_byte[i]</dt> <dd>is a byte reserved for futurecase.</t> </li> </ul>use.</dd> </dl> </section> </section> </section> <section anchor="appendix-profile-level-band"> <name>Profiles,levels,Levels, andbands</name>Bands</name> <section anchor="overview-of-profiles-levels-and-bands"> <name>Overview ofprofiles, levels,Profiles, Levels, andbands</name>Bands</name> <t>Profiles,levelslevels, and bands specify restrictions on a coded frame and hence limits on the capabilities needed to decode the coded frame. Profiles,levelslevels, and bands are also used to indicate interoperability points between individual decoder implementations.</t> <t>Each profile specifies a subset of algorithmic features and limits thatMUST<bcp14>MUST</bcp14> be supported by all decoders conforming to that profile.</t><ul empty="true"> <li> <t>NOTE:<t indent="3">NOTE: This document does not include individually selectable "options" at the decoder, as this would increase interoperability difficulties.</t></li> </ul> <ul empty="true"> <li> <t>NOTE:<t indent="3">NOTE: Encoders are not required to make use of any particular subset of features supported in a profile.</t></li> </ul><!-- [rfced] We are having trouble parsing this sentence. Perhaps "to specifically create different sets of constraints" is intended? Original: For example, a certain level L and a certain band B can be combined with either profile X or profile Y to specifically different set of constraints. --> <t>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 profile, a level with a band generally corresponds to a particular decoder processing load and memory capability. The constraints set by levels and bands are orthogonal to the constraints defined by 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 B can be combined with either profile X or profile Y to specifically different set of constraints.</t><ul empty="true"> <li> <t>NOTE:<t indent="3">NOTE: Individual implementations may support a different level for each supported profile.</t></li> </ul></section> <section anchor="requirements-on-video-decoder-capability"> <name>Requirements onvideo decoder capability</name>Video Decoder Capability</name> <t>Capabilities of video decoders conforming to this document are specified in terms of the ability to decode video streams conforming to the constraints of profiles,levelslevels, and bands specified in this section. When expressing the capabilities of a decoder for a specified profile, the level and the band supported for that profileMUST<bcp14>MUST</bcp14> also be expressed.</t> <t>Specific values are specifiedin this sectionfor the syntax elements profile_idc,level_idclevel_idc, and band_idc. All other values of profile_idc,level_idclevel_idc, and band_idc are reserved for future use.</t><ul empty="true"> <li> <t>NOTE:<t indent="3">NOTE: DecodersSHALL NOT<bcp14>SHALL NOT</bcp14> infer that a reserved value of profile_idc between the values specified in this document indicates intermediate capabilities between the specified profiles, as there are no restrictions on the method to be chosen for the use of such future reserved values. However, decodersMUST<bcp14>MUST</bcp14> infer that a reserved value of level_idc and a reserved value of band_idc between the values specified in this document indicates intermediate capabilities between the specified levels.</t></li> </ul></section> <section anchor="profiles"> <name>Profiles</name> <section anchor="general-2"> <name>General</name> <t>All constraints for a coded frame that are specified are constraints for the coded frame that are activated when the bitstream of the access unit is decoded.</t> </section> <section anchor="profile"> <name>422-10profile</name>Profile</name> <t>Conformance of a coded frame to the 422-10 profile is indicated by profile_idc equal to 33.</t> <t>Coded frames conforming to the 422-10 profileMUST<bcp14>MUST</bcp14> obey the following constraints:</t> <ul spacing="normal"> <li> <t>chroma_format_idcMUST<bcp14>MUST</bcp14> be equal to 2.</t> </li> <li> <t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be equal to 2.</t> </li> <li> <t>pbu_typeMUST<bcp14>MUST</bcp14> be equal to1</t>1.</t> </li> </ul> <!-- [rfced] This sentence appears many times in this document. May we update it as follows? Original: Any levels and bands constraints specified in Section 9.4 MUST be fulfilled. Perhaps: Any levels and bands MUST adhere to the constraints specified in Section 9.4. --> <t>Any levels and bands constraints specified in <xref target="levels_and_bands"/>MUST<bcp14>MUST</bcp14> be fulfilled. Decoders conforming to the 422-10 profile at a specific level (identified by a specific value of L) and a specific band (identified by a specific value of B)MUST<bcp14>MUST</bcp14> be capable of decoding all coded frames for which all of the following conditions apply:</t> <ul spacing="normal"> <li> <t>The coded frame is indicated to conform to the 422-10 profile.</t> </li> <li> <t>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.</t> </li> <li> <!-- [rfced] Is "level B" correct, as opposed to "band B"? Note that "level B" appears multiple times. * 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. --> <t>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.</t> </li> </ul> </section> <section anchor="profile-1"> <name>422-12profile</name>Profile</name> <t>Conformance of a coded frame to the 422-12 profile is indicated by profile_idc equal to 44.</t> <t>Coded frames conforming to the 422-12 profileMUST<bcp14>MUST</bcp14> obey the following constraints:</t> <ul spacing="normal"> <li> <t>chroma_format_idcMUST<bcp14>MUST</bcp14> be equal to 2.</t> </li> <li> <t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be in the range of 2 to 4.</t> </li> <li> <t>pbu_typeMUST<bcp14>MUST</bcp14> be equal to1</t>1.</t> </li> </ul> <t>Any levels and bands constraints specified in <xref target="levels_and_bands"/>MUST<bcp14>MUST</bcp14> be fulfilled. Decoders conforming to the 422-12 profile at a specific level (identified by a specific value of L) and a specific band (identified by a specific value of B)MUST<bcp14>MUST</bcp14> be capable of decoding all coded frames for which all of the following conditions apply:</t> <ul spacing="normal"> <li> <t>The coded frame is indicated to conform to the 422-12 profile or the 422-10 profile.</t> </li> <li> <t>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.</t> </li> <li> <t>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.</t> </li> </ul> </section> <section anchor="profile-2"> <name>444-10profile</name>Profile</name> <t>Conformance of a coded frame to the 444-10 profile is indicated by profile_idc equal to 55.</t> <t>Coded frames conforming to the 444-10 profileMUST<bcp14>MUST</bcp14> obey the following constraints:</t> <ul spacing="normal"> <li> <t>chroma_format_idcMUST<bcp14>MUST</bcp14> be in the range of 2 to 3.</t> </li> <li> <t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be equal to 2.</t> </li> <li> <t>pbu_typeMUST<bcp14>MUST</bcp14> be equal to1</t>1.</t> </li> </ul> <t>Any levels and bands constraints specified in <xref target="levels_and_bands"/>MUST<bcp14>MUST</bcp14> be fulfilled. Decoders conforming to the 444-10 profile at a specific level (identified by a specific value of L) and a specific band (identified by a specific value of B)MUST<bcp14>MUST</bcp14> be capable of decoding all coded frames for which all of the following conditions apply:</t> <ul spacing="normal"> <li> <t>The coded frame is indicated to conform to the 444-10 profile or the 422-10 profile.</t> </li> <li> <t>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.</t> </li> <li> <t>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.</t> </li> </ul> </section> <section anchor="profile-3"> <name>444-12profile</name>Profile</name> <t>Conformance of a coded frame to the 444-12 profile is indicated by profile_idc equal to 66.</t> <t>Coded frames conforming to the 444-12 profileMUST<bcp14>MUST</bcp14> obey the following constraints:</t> <ul spacing="normal"> <li> <t>chroma_format_idcMUST<bcp14>MUST</bcp14> be in the range of 2 to 3.</t> </li> <li> <t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be in the range of 2 to 4.</t> </li> <li> <t>pbu_typeMUST<bcp14>MUST</bcp14> be equal to1</t>1.</t> </li> </ul> <t>Any levels and bands constraints specified in <xref target="levels_and_bands"/>MUST<bcp14>MUST</bcp14> be fulfilled. Decoders conforming to the 444-12 profile at a specific level (identified by a specific value of L) and a specific band (identified by a specific value of B)MUST<bcp14>MUST</bcp14> be capable of decoding all coded frames for which all of the following conditions apply:</t> <ul spacing="normal"> <li> <t>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.</t> </li> <li> <t>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.</t> </li> <li> <t>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.</t> </li> </ul> </section> <section anchor="profile-4"> <name>4444-10profile</name>Profile</name> <t>Conformance of a coded frame to the 4444-10 profile is indicated by profile_idc equal to 77.</t> <t>Coded frames conforming to the 4444-10 profileMUST<bcp14>MUST</bcp14> obey the following constraints:</t> <ul spacing="normal"> <li> <t>chroma_format_idcMUST<bcp14>MUST</bcp14> be in the range of 2 to 4.</t> </li> <li> <t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be equal to 2.</t> </li> <li> <t>pbu_typeMUST<bcp14>MUST</bcp14> be equal to1</t>1.</t> </li> </ul> <t>Any levels and bands constraints specified in <xref target="levels_and_bands"/>MUST<bcp14>MUST</bcp14> be fulfilled. Decoders conforming to the 4444-10 profile at a specific level (identified by a specific value of L) and a specific band (identified by a specific value of B)MUST<bcp14>MUST</bcp14> be capable of decoding all coded frames for which all of the following conditions apply:</t> <ul spacing="normal"> <li> <t>The coded frame is indicated to conform to the 4444-10 profile, the 444-10profileprofile, or the 422-10 profile.</t> </li> <li> <t>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.</t> </li> <li> <t>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.</t> </li> </ul> </section> <section anchor="profile-5"> <name>4444-12profile</name>Profile</name> <t>Conformance of a coded frame to the 4444-12 profile is indicated by profile_idc equal to 88.</t> <t>Coded frames conforming to the 4444-12 profileMUST<bcp14>MUST</bcp14> obey the following constraints:</t> <ul spacing="normal"> <li> <t>chroma_format_idcMUST<bcp14>MUST</bcp14> be in the range of 2 to 4.</t> </li> <li> <t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be in the range of 2 to 4.</t> </li> <li> <t>pbu_typeMUST<bcp14>MUST</bcp14> be equal to1</t>1.</t> </li> </ul> <t>Any levels and bands constraints specified in <xref target="levels_and_bands"/>MUST<bcp14>MUST</bcp14> be fulfilled. Decoders conforming to the 4444-12 profile at a specific level (identified by a specific value of L) and a specific band (identified by a specific value of B)MUST<bcp14>MUST</bcp14> be capable of decoding all coded frames for which all of the following conditions apply:</t> <ul spacing="normal"> <li> <t>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 422-12profileprofile, or the 422-10 profile.</t> </li> <li> <t>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.</t> </li> <li> <t>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.</t> </li> </ul> </section> <section anchor="profile-6"> <name>400-10profile</name>Profile</name> <t>Conformance of a coded frame to the 400-10 profile is indicated by profile_idc equal to 99.</t> <t>Coded frames conforming to the 400-10 profileMUST<bcp14>MUST</bcp14> obey the following constraints:</t> <ul spacing="normal"> <li> <t>chroma_format_idcMUST<bcp14>MUST</bcp14> be equal to 0.</t> </li> <li> <t>bit_depth_minus8MUST<bcp14>MUST</bcp14> be equal to 2.</t> </li> <li> <t>pbu_typeMUST<bcp14>MUST</bcp14> be equal to1</t>1.</t> </li> </ul> <t>Any levels and bands constraints specified in <xref target="levels_and_bands"/>MUST<bcp14>MUST</bcp14> be fulfilled. Decoders conforming to the 400-10 profile at a specific level (identified by a specific value of L) and a specific band (identified by a specific value of B)MUST<bcp14>MUST</bcp14> be capable of decoding all coded frames for which all of the following conditions apply:</t> <ul spacing="normal"> <li> <t>The coded frame is indicated to conform to the 400-10 profile.</t> </li> <li> <t>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.</t> </li> <li> <t>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.</t> </li> </ul> </section> </section> <section anchor="levels_and_bands"> <name>Levels andbands</name>Bands</name> <section anchor="general-3"> <name>General</name> <t>For purposes of comparison of level capabilities, a particular 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 is less than that of the other level.</t> <ul spacing="normal"> <li> <t>The luma sample rate (luma samples per second)MUST<bcp14>MUST</bcp14> be less than or equal to the "Max luma sample rate".</t> </li> <li> <t>The coded data rate (bits per second)MUST<bcp14>MUST</bcp14> be less than or equal to the "Max luma sample rate".</t> </li> <li> <t>The value of tile_width_in_mbsMUST<bcp14>MUST</bcp14> be greater than or equal to 16.</t> </li> <li> <t>The value of tile_height_in_mbsMUST<bcp14>MUST</bcp14> be greater than or equal to 8.</t> </li> <li> <t>The value of TileColsMUST<bcp14>MUST</bcp14> be less than or equal to 20.</t> </li> <li> <t>The value of TileRowsMUST<bcp14>MUST</bcp14> be less than or equal to 20.</t> </li> </ul> </section> <section anchor="limits-of-levels-and-bands"> <name>Limits oflevelsLevels andbands</name>Bands</name> <t><xref target="_table-levels"/> specifies the limits for each level of each band. A level to which a coded frame conforms is indicated by the syntax elements level_idc and band_idc as follows:</t> <ul spacing="normal"> <li> <t>level_idcMUST<bcp14>MUST</bcp14> be set equal to a value of 30 times the level number specified in <xref target="_table-levels"/>.</t> </li> </ul> <table anchor="_table-levels"> <name>General level limits</name> <!-- [rfced] We have updated the format of the header row of table 4 so it fits within the line-length limitiation. Please review carefully and let us know if and adjustments are needed or if you have other suggestions for how it can be rendered. --> <thead> <tr> <thalign="left">level</th>align="left" rowspan="3">level</th> <thalign="right">Maxalign="center" rowspan="3">Max luma sample rate (sample/sec)</th> <thalign="right">Maxalign="center" colspan="4">Max coded data rate(Mbits/sec) band_idc==0</th>(Mbits/sec)</th> </tr> <tr> <thalign="right">Max coded data rate (Mbits/sec) band_idc==1</th>align="center" colspan="4">band_idc==</th> </tr> <tr> <thalign="right">Max coded data rate (Mbits/sec) band_idc==2</th>align="right">0</th> <thalign="right">Max coded data rate (Mbits/sec) band_idc==3</th>align="right">1</th> <th align="right">2</th> <th align="right">3</th> </tr> </thead> <tbody> <tr> <td align="left">1</td> <td align="right">3,041,280</td> <td align="right">8</td> <td align="right">11</td> <td align="right">15</td> <td align="right">23</td> </tr> <tr> <td align="left">1.1</td> <td align="right">6,082,560</td> <td align="right">16</td> <td align="right">21</td> <td align="right">30</td> <td align="right">45</td> </tr> <tr> <td align="left">2</td> <td align="right">15,667,200</td> <td align="right">39</td> <td align="right">54</td> <td align="right">76</td> <td align="right">114</td> </tr> <tr> <td align="left">2.1</td> <td align="right">31,334,400</td> <td align="right">78</td> <td align="right">108</td> <td align="right">152</td> <td align="right">227</td> </tr> <tr> <td align="left">3</td> <td align="right">66,846,720</td> <td align="right">114</td> <td align="right">159</td> <td align="right">222</td> <td align="right">333</td> </tr> <tr> <td align="left">3.1</td> <td align="right">133,693,440</td> <td align="right">227</td> <td align="right">317</td> <td align="right">444</td> <td align="right">666</td> </tr> <tr> <td align="left">4</td> <td align="right">265,420,800</td> <td align="right">455</td> <td align="right">637</td> <td align="right">892</td> <td align="right">1,338</td> </tr> <tr> <td align="left">4.1</td> <td align="right">530,841,600</td> <td align="right">910</td> <td align="right">1,274</td> <td align="right">1,784</td> <td align="right">2,675</td> </tr> <tr> <td align="left">5</td> <td align="right">1,061,683,200</td> <td align="right">1,820</td> <td align="right">2,548</td> <td align="right">3,567</td> <td align="right">5,350</td> </tr> <tr> <td align="left">5.1</td> <td align="right">2,123,366,400</td> <td align="right">3,639</td> <td align="right">5,095</td> <td align="right">7,133</td> <td align="right">10,699</td> </tr> <tr> <td align="left">6</td> <td align="right">4,777,574,400</td> <td align="right">7,278</td> <td align="right">10,189</td> <td align="right">14,265</td> <td align="right">21,397</td> </tr> <tr> <td align="left">6.1</td> <td align="right">8,493,465,600</td> <td align="right">14,556</td> <td align="right">20,378</td> <td align="right">28,529</td> <td align="right">42,793</td> </tr> <tr> <td align="left">7</td> <td align="right">16,986,931,200</td> <td align="right">29,111</td> <td align="right">40,756</td> <td align="right">57,058</td> <td align="right">85,586</td> </tr> <tr> <td align="left">7.1</td> <td align="right">33,973,862,400</td> <td align="right">58,222</td> <td align="right">81,511</td> <td align="right">114,115</td> <td align="right">171,172</td> </tr> </tbody> </table> <t><xref target="_table-level_ex"/> shows widely used typical configurations of resolution and frameraterates of video and corresponding levels for them.</t> <table anchor="_table-level_ex"> <name>Example of typical video configurations and corresponding levels (informative)</name> <thead> <tr> <th align="center">use case</th> <th align="center">resolution</th> <th align="right">frame per second</th> <th align="right">luma sample per second</th> <th align="left">level</th> </tr> </thead> <tbody> <tr> <td align="center">720p</td> <td align="center">1280 x 720</td> <td align="right">30</td> <td align="right">27,648,000</td> <td align="left">2.1</td> </tr> <tr> <td align="center">FHD</td> <td align="center">1920 x 1080</td> <td align="right">30</td> <td align="right">62,208,000</td> <td align="left">3</td> </tr> <tr> <td align="center">UHD 4K</td> <td align="center">3840 x 2160</td> <td align="right">60</td> <td align="right">497,664,000</td> <td align="left">4.1</td> </tr> <tr> <td align="center">UHD 4K</td> <td align="center">3840 x 2160</td> <td align="right">120</td> <td align="right">995,328,000</td> <td align="left">5</td> </tr> <tr> <td align="center">UHD 8K</td> <td align="center">7680 x 4320</td> <td align="right">60</td> <td align="right">1,990,656,000</td> <td align="left">5.1</td> </tr> <tr> <td align="center">UHD 8K</td> <td align="center">7680 x 4320</td> <td align="right">120</td> <td align="right">3,981,312,000</td> <td align="left">6</td> </tr> </tbody> </table> </section> </section> </section> <section anchor="security-considerations"> <name>Securityconsiderations</name>Considerations</name> <t>Like any other audio or video codec, APV should not be used with insecure ciphers or cipher modes that are vulnerable to known plaintext attacks. Some of the header bits as well as the padding are easily predictable.</t> <!-- [rfced] "no read" can be difficult to parse. Perhaps this can be reworded? Original: The implementation MUST ensure that no read outside allocated and initialized memory occurs. Perhaps A: The implementation MUST ensure that any data outside of the allocated and initialized memory cannot be read. Perhaps B: The implementation MUST ensure that there is no data outside of the allocated and initialized memory. --> <t>A decoderMUST<bcp14>MUST</bcp14> be robust against any non-compliant or malicious payloads. Malicious payloadsMUST NOT<bcp14>MUST NOT</bcp14> cause the decoder to overrun its allocated memory or to take an excessive amount of resources to decode. An overrun in allocated memory could lead to arbitrary code execution by an attacker. The same applies to the encoder, even though problems in encoders are typicallyrarer.rare. Malicious video streamsMUST NOT<bcp14>MUST NOT</bcp14> cause the encoder to misbehave because this would allow an attacker to attack transcoding gateways. A frequent security problem in image and video codecs is failure to check for integer overflows. An example is allocating "frame_width * frame_height" in pixel count computations without considering that the multiplication result may have overflowed the range of the arithmetic type. The implementationMUST<bcp14>MUST</bcp14> ensure that no read outside allocated and initialized memory occurs.</t> <t>A decoderMUST NOT<bcp14>MUST NOT</bcp14> try to process the metadata whose type is not recognized by the implementation. Failureof processing ofto process any metadata exactly according to the syntax structure specifiedMAY<bcp14>MAY</bcp14> put a decoder in an unknown status.</t> <t>None of the content carried in APV is intended to be executable.</t> </section> <section anchor="iana-considerations"> <name>IANAconsiderations</name>Considerations</name> <t>This document has no actions for IANA.</t> </section><section anchor="appendix"> <name>Appendix</name> <section anchor="appendix-rawbitstream"> <name>Raw bitstream format</name> <figure anchor="syntax-rawbitstream"> <name>raw_bitstream_access_unit() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- raw_bitstream_access_unit(){ | au_size | u(32) access_unit(au_size) | } | ]]></artwork> </figure> <ul spacing="normal"> <li> <t>au_size</t> </li> </ul> <ul empty="true"> <li> <t>indicates the size of access unit in bytes. 0 is prohibited and 0xFFFFFFFF is reserved.</t> </li> </ul> </section> <section anchor="apv-implementations"> <name>APV implementations</name> <section anchor="openapv-open-source-project"> <name>OpenAPV open source project</name> <t>The Academy Software Foundation (ASWF) <xref target="ASWF"/> jointly found by Academy of Motion Picture Arts and Science (AMPAS) <xref target="AMPAS"/> and the Linux Foundation has created an open source software development project conformant to this document <xref target="OpenAPV"/>. The project also provides various test vectors for verification of the implementations at https://github.com/AcademySoftwareFoundation/openapv/tree/main/test/bitstream.</t> </section> <section anchor="android-open-source-project"> <name>Android open source project</name> <t>The Android open source project (AOSP) has implemented Advanced Professional Video (APV) conformant to this document <xref target="AOSP16APV"/>.</t> </section> <section anchor="ffmpeg-open-source-project"> <name>FFmpeg open source project</name> <t>The FFmpeg project is developing an APV decoder <xref target="FFmpegAPVdec"/> and an APV encoder <xref target="FFmpegAPVenc"/> conformant to this document.</t> </section> </section> </section></middle> <back> <references anchor="sec-combined-references"> <name>References</name> <references anchor="sec-normative-references"> <name>Normative References</name> <reference anchor="H273" target="https://www.itu.int/rec/T-REC-H.273"> <front><title>Recommendation ITU-T H.273 (V4) | ISO/IEC 23091-2:2025, Coding-independent<title>Coding-independent code points- Part 2 Video</title>for video signal type identification</title> <author><organization/><organization>ITU-T</organization> </author> <date year="2024" month="July"/> </front> <seriesInfo name="ITU-T Recommendation" value="H.273"/> <seriesInfo name="ISO/IEC" value="23091-2:2025"/> </reference> <!-- [rfced] [ISO9899] Please review. This reference currently points to a withdrawn version of ISO/IEC 9899: https://www.iso.org/standard/74528.html. The most current version of this reference is ISO/IEC 9899:2024. Should this reference be updated to point to the most current version? Current: [ISO9899] ISO/IEC, "Information technology - Programming languages - C", ISO/IEC 9899:2018, 2018, <https://www.iso.org/standard/74528.html>. --> <reference anchor="ISO9899" target="https://www.iso.org/standard/74528.html"> <front><title>ISO/IEC 9899:2018, Information<title>Information technology - Programming languages - C</title> <author><organization/><organization>ISO/IEC</organization> </author> <date year="2018"/> </front> <seriesInfo name="ISO/IEC" value="9899:2018"/> </reference> <!-- Updated XML for [ISO9899] <reference anchor="ISO9899" target="https://www.iso.org/standard/82075.html"> <front> <title>Information technology - Programming languages - C</title> <author> <organization>ISO/IEC</organization> </author> <dateyear="2018" month="June"/>year="2024"/> </front> <seriesInfo name="ISO/IEC" value="9899:2024"/> </reference> --> <reference anchor="ITUT-T35" target="https://www.itu.int/rec/T-REC-T.35"> <front><title>Recommendation ITU-T T.35, Procedure<title>Procedure for the allocation of ITU-T defined codes for non-standard facilities</title> <author><organization/><organization>ITU-T</organization> </author> <date year="2000" month="February"/> </front> <seriesInfo name="ITU-T Recommendation" value="T.35"/> </reference> <!-- [rfced] [CEA-861.3] Please review. CEA-861.3 appears to have been placed in "Historical" status (see: https://webstore.ansi.org/standards/cea/cea8612015-1528168). The most current version of this standard appears to be CTA-861.3-A (see: https://www.cta.tech/standards/cta-8613-a/). Note that the Consumer Electronics Association (CEA) changed its name to the "Consumer Technology Association" (CTA) in 2015. Should this reference be updated to point to CTA-861.3-A? Current: [CEA-861.3] CEA, "CEA-861.3, HDR Static Metadata Extension", January 2015. --> <reference anchor="CEA-861.3"> <front> <title>CEA-861.3, HDR Static Metadata Extension</title> <author><organization/><organization>CEA</organization> </author> <date year="2015" month="January"/> </front> </reference> <reference anchor="CIE15" target="https://cie.co.at/publications/colorimetry-4th-edition"> <front><title>Technical Rport, Colorimetri</title><title>Colorimetry, 4th Edition</title> <author><organization/><organization>CIE</organization> </author> <date year="2018"/> </front></reference> <reference anchor="RFC2119"> <front> <title>Key words for use in RFCs to Indicate Requirement Levels</title> <author fullname="S. Bradner" initials="S." surname="Bradner"/> <date month="March" year="1997"/> <abstract> <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t> </abstract> </front> <seriesInfo name="BCP" value="14"/> <seriesInfo name="RFC" value="2119"/> <seriesInfo name="DOI" value="10.17487/RFC2119"/> </reference> <reference anchor="RFC8174"> <front> <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title> <author fullname="B. Leiba" initials="B." surname="Leiba"/> <date month="May" year="2017"/> <abstract> <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t> </abstract> </front> <seriesInfo name="BCP" value="14"/> <seriesInfo name="RFC" value="8174"/> <seriesInfo name="DOI" value="10.17487/RFC8174"/> </reference> <reference anchor="RFC9562"> <front> <title>Universally Unique IDentifiers (UUIDs)</title> <author fullname="K. Davis" initials="K." surname="Davis"/> <author fullname="B. Peabody" initials="B." surname="Peabody"/> <author fullname="P. Leach" initials="P." surname="Leach"/> <date month="May" year="2024"/> <abstract> <t>This specification defines UUIDs (Universally Unique IDentifiers) -- also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform Resource Name namespace for UUIDs. A UUID is 128 bits long and is intended to guarantee uniqueness across space and time. UUIDs were originally used in the Apollo Network Computing System (NCS), later in the Open Software Foundation's (OSF's) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.</t> <t>This specification is derived from the OSF DCE specification with the kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have been incorporated into this document. This document obsoletes RFC 4122.</t> </abstract> </front> <seriesInfo name="RFC" value="9562"/><seriesInfo name="DOI"value="10.17487/RFC9562"/>value="10.25039/TR.015.2018"/> </reference> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9562.xml"/> </references> <references anchor="sec-informative-references"> <name>Informative References</name> <reference anchor="ASWF" target="https://www.aswf.io/"> <front> <title>The Academy Software Foundation</title> <author> <organization/> </author><date>n.d.</date></front> </reference> <reference anchor="AMPAS" target="https://www.oscars.org/"> <front> <title>Academy of Motion Picture Arts and Science</title> <author> <organization/> </author><date>n.d.</date></front> </reference> <reference anchor="OpenAPV" target="https://github.com/AcademySoftwareFoundation/openapv"> <front> <title>OpenAPV</title> <author> <organization/> </author><date>n.d.</date><date day="16" month="12" year="2025"/> </front> <refcontent>commit 1a7845a</refcontent> </reference> <reference anchor="AOSP16APV" target="https://developer.android.com/about/versions/16/features#apv"> <front> <title>Android open source project version 16</title> <author> <organization/> </author><date>n.d.</date></front> </reference> <reference anchor="FFmpegAPVdec" target="https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/483cadf8d77d3260eec8781f5f18c50f27e468f8"> <front> <title>FFmpeg implementation of APV decoder</title> <author> <organization/> </author><date>n.d.</date><date day="19" month="April" year="2025"/> </front> </reference> <reference anchor="FFmpegAPVenc" target="https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/fab691edaf53bbf10429ef3448f1f274e5078395"> <front> <title>FFmpeg implementation of APV encoder</title> <author> <organization/> </author><date>n.d.</date><date day="23" month="April" year="2025"/> </front> </reference> </references> </references></back><section anchor="appendix-rawbitstream"> <name>Raw Bitstream Format</name> <figure anchor="syntax-rawbitstream"> <name>raw_bitstream_access_unit() syntax code</name> <artwork><![CDATA[ syntax code | type --------------------------------------------------------------|----- raw_bitstream_access_unit(){ | au_size | u(32) access_unit(au_size) | } |]]></artwork> </figure> <dl spacing="normal" newline="true"> <dt>au_size</dt> <dd>indicates the size of access unit in bytes. 0 is prohibited and 0xFFFFFFFF is reserved.</dd> </dl> </section> <section anchor="apv-implementations"> <name>APV Implementations</name> <section anchor="openapv-open-source-project"> <name>OpenAPV Open Source Project</name> <t>The Academy Software Foundation (ASWF) <xref target="ASWF"/>, jointly founded by the Academy of Motion Picture Arts and Science (AMPAS) <xref target="AMPAS"/> and the Linux Foundation, has created an open source software development project conformant to this document <xref target="OpenAPV"/>. The project also provides various test vectors for verification of the implementations at <eref brackets="angle" target="https://github.com/AcademySoftwareFoundation/openapv/tree/main/test/bitstream"/>.</t> </section> <section anchor="android-open-source-project"> <name>Android Open Source Project</name> <t>The Android open source project (AOSP) has implemented Advanced Professional Video (APV) conformant to this document <xref target="AOSP16APV"/>.</t> </section> <section anchor="ffmpeg-open-source-project"> <name>FFmpeg Open Source Project</name> <t>The FFmpeg project is developing an APV decoder <xref target="FFmpegAPVdec"/> and an APV encoder <xref target="FFmpegAPVenc"/> conformant to this document.</t> </section> </section> <!-- [rfced] Please review whether any of the notes in this document should be in the <aside> element. It is defined as "a container for content that is semantically less important or tangential to the content that surrounds it" (https://authors.ietf.org/en/rfcxml-vocabulary#aside). --> <!--##markdown-source: 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 dMZOVwWBAKm1ZqvQFEjg5SCKdJZ1G1TsHlL5trS6/SBUMHvhdkfRG5yNwmG2 TOJUETrA2dAXxClQZU2pk9BS3nkUlOFDlCWzZ2HePOfdFrBpqucyfZ9MfxxO ay1Pxi4ohOo4O9Vqsti2DLqS2Dfa9Xr9hx/kL5zo5HdVmwpw3MPZ+jKvwsvz kv7vN6ttOht94Ux096sfAwu0Ww5SuRq85Ww4WC3Z7qw4cGbF24mmvrYRjxnT 8SzGTcYZSgzpoHgHg5T2uLFxmMr4KmT64D0l9TDaNd+eVfIDCuJNF6Swu+dR 0om9A0/sdz1x0JaBSh9YvPegY8+kW4A64tsxfitU4GYKpHolZWbzygDFgbkk q4reA1cF8ZkUT51IqdWKYb8o01CF/gN2trocS34lYI9ssgJv/kns/0aq6Z9v dnb265ausnSZMKOv1NabtWdQeQga9JY7cxKch+KnIAoSWN08pIivb4rsyxRZ tfvly/XFbdRTyZLTCZioMNY3BlZtVz/FEICaiqqoI2fMJtEa9tCG1gSSQUHi uKtgQwh2HCYZX1HQEIMQ6IM+LnQArOvk0AWtxYB1go8IkEfIGK9ORixNHJYJ aY4q+5A0ukOpopW1zKrUMIJlMLQhWeHtutSKsqbgbMPkQGrrwPCACc6piyS+ NvsKKV6ujkCJyy6/eOA3NUTLBv7uxx27XGh67UH/e27Ql1JpzUFfSqemnB/O q3w8ystT7PQa04jRsOe9s7yClfpdkWSpnrBMPurTSr0yzym++Xvt+/qdSVAj nPDEEDH+crWrGrVZUCnFRa6pxftQu9lKmypZKcsbVC1Tqpr9uKzhvWZxYWyI QtSl5hWzeEVXqIMDvWWTBuswQ2m8lxICM5qV93uZAbaQtw/OJjUaGk+oap6N DF40+jtaVjiU9XK2rSbjQ7Wqy1FvacjaUva1ghA34eSVM/zKUcmfaK8cPfvw gY8ByVAMepLm5+4XQ+6gvVd7WG12Y2y6PS6T395HMIAYOH9D0fM3gtYMK/8R n1XxwyN4cQBrDrEHwy/a0HqD/sGfDfzQODyyimP9XXxL/+BP/gd/0gcoYopT fQKH7RBMboeapQ8He6Y4YtfQ/xiMnXemOKGoIXFjukUhWzTFNcZCY9yQGKsP uxYymgpCUkHB1NSCdrj4Z31qgEbHvZRZC4piFJywaNQfPxaHlFpJvPGTNBfy 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[rfced] Please review the "Inclusive Language" portion of the online Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language> and let us know if any changes are needed. Updates of this nature typically result in more precise language, which is helpful for readers. Note that our script did not flag any words in particular, but this should still be reviewed as a best practice. --> </back> </rfc>