<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lim-apv-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.1 -->
  <front>
    <title abbrev="APV">Advanced Professional Video</title>
    <seriesInfo name="Internet-Draft" value="draft-lim-apv-02"/>
    <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>
          <code>75024</code>
          <country>USA</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>
          <code>75024</code>
          <country>USA</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>San Diego, CA</city>
          <code>92128</code>
          <country>USA</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>
    <date year="2024" month="September" day="30"/>
    <area>General</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>mezzanine codec</keyword>
    <keyword>visually lossless compression</keyword>
    <abstract>
      <?line 99?>

<t>This document describes bitstream format of Advanced Professional Video and decoding process of it.</t>
    </abstract>
  </front>
  <middle>
    <?line 103?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines the bitstream formats and decoding process for Advanced Professional Video (APV) Codec. The APV codec is a professional video codec that was developed in response to the need for professional 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.</t>
      <t>The APV codec supports the following features:</t>
      <ul spacing="normal">
        <li>
          <t>Perceptually lossless video quality that is close to raw video quality</t>
        </li>
        <li>
          <t>Low complexity and high throughput intra frame only coding without pixel domain prediction</t>
        </li>
        <li>
          <t>Support for high bit-rates up to a few Gbps for 2K, 4K 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>Support for various chroma sampling formats from 4:2:2 to 4:4:4, and bit depths from 10 to 16</t>
        </li>
        <li>
          <t>Support for multiple decoding and re-encoding without severe visual quality degradation</t>
        </li>
      </ul>
    </section>
    <section anchor="terms">
      <name>Terms</name>
      <section anchor="terms-and-definitions">
        <name>Terms and definitions</name>
        <ul spacing="normal">
          <li>
            <t>access unit (AU): a collection of PBUs including various types of frames, metadata, filler, and access unit information, associated with a specific time</t>
          </li>
          <li>
            <t>band: a defined set of constraints on the value of the maximum coded data rate of each level</t>
          </li>
          <li>
            <t>block: MxN (M-column by N-row) array of samples, or an MxN array of transform coefficients</t>
          </li>
          <li>
            <t>byte-aligned: a position in a bitstream that is an integer multiple of 8 bits from the position of the first bit in the bitstream</t>
          </li>
          <li>
            <t>chroma: 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 color format</t>
          </li>
          <li>
            <t>coded frame: a coded representation of a frame containing all macroblocks of the frame</t>
          </li>
          <li>
            <t>coded representation: a data element as represented in its coded form</t>
          </li>
          <li>
            <t>component: 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 color format.</t>
          </li>
          <li>
            <t>decoded frame: a frame derived by decoding a coded frame</t>
          </li>
          <li>
            <t>decoder: an embodiment of a decoding process</t>
          </li>
          <li>
            <t>decoding process: a process specified that reads a bitstream and derives decoded frames from it</t>
          </li>
          <li>
            <t>encoder: an embodiment of an encoding process</t>
          </li>
          <li>
            <t>encoding process: a process that produces a bitstream conforming to this document</t>
          </li>
          <li>
            <t>flag: a variable or single-bit syntax element that can take one of the two possible values: 0 and 1</t>
          </li>
          <li>
            <t>frame: an array of luma samples and two corresponding arrays of chroma samples in 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 color format</t>
          </li>
          <li>
            <t>level: a defined set of constraints on the values that may be taken by the syntax elements and variables of this document, or the value of a transform coefficient prior to scaling</t>
          </li>
          <li>
            <t>luma: a sample array or single sample representing the monochrome signal related to the primary colors, represented by the symbol or subscript Y or L</t>
          </li>
          <li>
            <t>macroblock (MB): 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 sqaure block of samples of a frame in 4:0:0 color format, or a square block of four samples of a frame in 4:4:4:4 color format</t>
          </li>
          <li>
            <t>partitioning: a division of a set into subsets such that each element of the set is in exactly one of the subsets</t>
          </li>
          <li>
            <t>prediction: an embodiment of the prediction process</t>
          </li>
          <li>
            <t>prediction process: use of a predictor to provide an estimate of the data element currently being decoded</t>
          </li>
          <li>
            <t>predictor: a combination of specified values or previously decoded data elements used in the decoding process of subsequent data elements</t>
          </li>
          <li>
            <t>primitive bitstream unit (PBU): a data structure to construct an access unit with frame and metadata</t>
          </li>
          <li>
            <t>profile: a specified subset of the syntax of this document</t>
          </li>
          <li>
            <t>quantization parameter (QP): a variable used by the decoding process for scaling of transform coefficient levels</t>
          </li>
          <li>
            <t>raster scan: 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 to right</t>
          </li>
          <li>
            <t>raw bitstream: an encapsulation of a sequence of access units where a field indicating the size of an access unit precedes each access units</t>
          </li>
          <li>
            <t>source: a term used to describe the video material or some of its attributes before encoding process</t>
          </li>
          <li>
            <t>syntax element: an element of data represented in the bitstream</t>
          </li>
          <li>
            <t>syntax structure: zero or more syntax elements present together in the bitstream in a specified order</t>
          </li>
          <li>
            <t>tile: a rectangular region of MBs within a particular tile column and a particular tile row in a frame</t>
          </li>
          <li>
            <t>tile column: a rectangular region of MBs having a height equal to the height of the frame and width specified by syntax elements in the frame header</t>
          </li>
          <li>
            <t>tile row: a rectangular region of MBs having a height specified by syntax elements in the frame header and a width equal to the width of the frame</t>
          </li>
          <li>
            <t>tile scan: 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 the frame</t>
          </li>
          <li>
            <t>transform coefficient: a scalar quantity, considered to be in a frequency domain, that is associated with a particular one-dimensional or two-dimensional index</t>
          </li>
        </ul>
      </section>
      <section anchor="abbreviated-terms">
        <name>Abbreviated terms</name>
        <ul spacing="normal">
          <li>
            <t>I: intra</t>
          </li>
          <li>
            <t>LSB: least significant bit</t>
          </li>
          <li>
            <t>MSB: most significant bit</t>
          </li>
          <li>
            <t>RGB: Red, Green and Blue</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions">
      <name>Conventions used in this document</name>
      <section anchor="general">
        <name>General</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>
      </section>
      <section anchor="operators">
        <name>Operators</name>
        <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"/></t>
        <section anchor="arith-operator">
          <name>Arithmetic operators</name>
          <ul spacing="normal">
            <li>
              <t>// : 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>/ or div(x,y) : a division in mathematical equations where no truncation or rounding is intended</t>
            </li>
            <li>
              <t>% : a modulus. x % y is a remainder of x divided by y</t>
            </li>
            <li>
              <t>min(x,y) : the minimum value of the values x and y</t>
            </li>
            <li>
              <t>max(x,y) : the maximum value of the values x and y</t>
            </li>
            <li>
              <t>ceil(x) : the smallest integer value that is larger than or equal to x</t>
            </li>
            <li>
              <t>clip(x,y,z) : clip(x,y,z)=max(x,min(z,y))</t>
            </li>
            <li>
              <t>sum (i=x, y, f(i)) : a summation of f(i) with i taking all integer values from x up to and including y</t>
            </li>
            <li>
              <t>log2(x) : the base-2 lograithm of x</t>
            </li>
          </ul>
        </section>
        <section anchor="bit-operator">
          <name>Bitwise operators</name>
          <ul spacing="normal">
            <li>
              <t>&amp; (bit-wise "and") : 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 bit depth.</t>
            </li>
            <li>
              <t>| (bit-wise "or") : 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 bit depth.</t>
            </li>
            <li>
              <t>x &gt;&gt; y : 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 shift operation.</t>
            </li>
            <li>
              <t>x &lt;&lt; y : 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 to 0.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="range-notation">
        <name>Range notation</name>
        <ul spacing="normal">
          <li>
            <t>x = y..z</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>x takes on integer values starting from y to z, inclusive, with x, y, and z being integer numbers and z being greater than y.</t>
          </li>
        </ul>
        <section anchor="order-of-operations-precedence">
          <name>Order of 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 table indicates 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 &lt;&lt; y", "x &gt;&gt; y"</td>
              </tr>
              <tr>
                <td align="left">"x &lt; y", "x &lt;= y", "x &gt; y", "x &gt;= y"</td>
              </tr>
              <tr>
                <td align="left">"x == y", "x != y"</td>
              </tr>
              <tr>
                <td align="left">"x &amp; y"</td>
              </tr>
              <tr>
                <td align="left">"x | y"</td>
              </tr>
              <tr>
                <td align="left">"x &amp;&amp; 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 elements and 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. 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 syntax 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>
        <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 values by single quote marks. For example, '01000001' 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 may be 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 and processes used in this document</name>
      <section anchor="bitstream-formats">
        <name>Bitstream formats</name>
        <t>This section specifies the bitstream of the Advanced Professional Video (APV) Codec.</t>
        <t>The raw bitstream format is a format consist with 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, decoded and output frame formats</name>
        <t>This section specifies the relationship between the source and the decoded frames that are the results of the decoding process.</t>
        <t>The video source that is represented by the bitstream is a sequence of frames.</t>
        <t>The 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).</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).</t>
          </li>
          <li>
            <t>Arrays representing other unspecified four color sampings</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 variables SubWidthC, SubHeightC and NumComp 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, SubHeightC and NumComp may be specified in the future.</t>
        <table anchor="_table-chroma_format_idc">
          <name>SubWidthC, SubHeightC and NumComp 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">NumComp</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 luma samples and 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 sample exist
]]></artwork>
        </figure>
        <t>When the value of chroma_format_idc is equal to 3 or 4, for each frame, all the array samples are co-sited and 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 sample exist
]]></artwork>
        </figure>
        <t>The 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, which 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 a frame</name>
        <section anchor="partitioning-of-a-frame-into-tiles">
          <name>Partitioning of a frame into 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 may be divided into 6 tiles (3 tile columns and 2 tile rows) as shown in Figure 3: Frame with 10 by 8 MBs that is partitioned into 6 tiles. 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 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 or 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>Scanning processes</name>
        <section anchor="zig-zag">
          <name>Zig-zag 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 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>
          </figure>
        </section>
        <section anchor="inverse-scan">
          <name>Inverse 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 variable forwardScan is derived by invoking zig-zag scan order 1D 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>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="syntax">
      <name>Syntax and semantics</name>
      <section anchor="method-of-specifying-syntax">
        <name>Method of specifying syntax</name>
        <t>The syntax tables specify a superset of the syntax of all allowed bitstreams. Note that an actual decoder must 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>
        <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 syntax elements processing function 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>
        </figure>
      </section>
      <section anchor="syntax-func">
        <name>Syntax functions and 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 a byte boundary, 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 tileIdx-th tile() syntax structure is less than TileSize[ tileIdx ] in bytes from the beginning of the tile_header() syntax structure of the tileIdx-th tile, the return value of more_data_in_tile() is equal to TURE.</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 bits in the bitstream for comparison purposes, without advancing the bitstream pointer. Provides a look at the next n bits in the bitstream with n being its argument.</t>
        </section>
        <section anchor="readbitsn">
          <name>read_bits(n)</name>
          <t>This function indicates to read the next n bits from the bitstream and 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>Syntax element processing functions</name>
          <ul spacing="normal">
            <li>
              <t>b(8): byte having any pattern of bit string (8 bits). The parsing process for this descriptor is specified by the return value of the function read_bits(8).</t>
            </li>
            <li>
              <t>f(n): fixed-pattern bit string using n bits written (from left to right) with the left bit first. The parsing process for this descriptor is specified by the return value of the function read_bits(n).</t>
            </li>
            <li>
              <t>u(n): 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 most significant bit written first.</t>
            </li>
            <li>
              <t>h(v): variable-length entropy coded syntax element with the left bit first. The parsing process for this descriptor is specified in <xref target="process_h"/>.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="list-of-syntax-and-semantics">
        <name>List of syntax and semantics</name>
        <section anchor="access-unit">
          <name>Access unit</name>
          <figure anchor="syntaxcode-access_unit">
            <name>access unit syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
access_unit(au_size){                                         |
    currReadSize = 0                                          |
    do(){                                                     |
        pbu_size                                              | u(32)
        currReadSize += 4                                     |
        pbu()                                                 |
        currReadSize += pbu_size                              |
    } while (au_size > currReadSize)                          |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>pbu_size</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the size of a primitive bitstream unit in bytes. The value of 0 for pbu_size is prohibited and the value of 0xFFFFFFFF for pbu_size is reserved for future use.</t>
            </li>
          </ul>
          <t>Note: An AU consists of one "primary frame", zero or more "non-primary frame"s, zero or more "alpha frame"s, zero or more "depth frame"s, zero or more "preview frame"s, zero or more "metadata"s, and zero of more "filler"s.</t>
        </section>
        <section anchor="pbu">
          <name>Primitive 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>
          </figure>
        </section>
        <section anchor="pbu-header">
          <name>Primitive 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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>pbu_type</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <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>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">1</td>
                <td align="center">primary frame</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">2</td>
                <td align="center">non-primary frame</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">3...24</td>
                <td align="center">reserved</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">25</td>
                <td align="center">preview frame</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">26</td>
                <td align="center">depth frame</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">27</td>
                <td align="center">alpha frame</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">28...64</td>
                <td align="center">reserved</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">65</td>
                <td align="center">access unit information</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">66</td>
                <td align="center">metadata</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">67</td>
                <td align="center">filler</td>
                <td align="center"> </td>
              </tr>
              <tr>
                <td align="center">68...255</td>
                <td align="center">reserved</td>
                <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, it should 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 the identifier to associate coded frame with metadata. More than two frame can have same group_id in a single AU. A primary frame and a non-primary frame MUST have different group_id value and two non-primary frames MUST have different group_id value. When the value of group_id is equal to 0, the value of pbu_type MUST be greater than 64. The value of 0xFFFF for group_id is reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_8bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile-level-band"/> MUST ignore PBU with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
        </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(tileIdx = 0; tileIdx < NumTiles; tileIdx++){          |
        tile_size_minus1[tileIdx]                             | u(32)
        tile(tileIdx)                                         |
    }                                                         |
    filler()                                                  |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_size_minus1[tileIdx]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 indicates the size in bytes of tileIdx-th tile data (i.e., tile(tileIdx)) in raster order in a frame.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>The variable TileSize[ tileIdx ] is set equal to tile_size_minus1[ tildIdx ] + 1</t>
            </li>
          </ul>
        </section>
        <section anchor="frame-header">
          <name>Frame 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)
  }                                                           |
  use_q_matrix                                                | u(1)
  if(use_q_matrix){                                           |
    quantization_matrix()                                     |
  }                                                           |
  tile_info()                                                 |
  reserved_zero_8bits                                         | u(8)
  byte_alignment()                                            |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_8bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile-level-band"/> MUST ignore PBU with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>color_description_present_flag equal to 1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies that color_primaries, transfer_characteristics and matrix_coefficients are present. color_description_present_flag equal to 0 specifies that color_primaries, transfer_characteristics and matrix_coefficients are not present.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>color_primaries</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST have the semantics of ColourPrimaries as specified in <xref target="ISO23091-2"/>. When the color_primaries syntax element is not present, the value of color_primaries is inferred to be equal to 2.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>transfer_characteristics</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST have the semantics of TransferCharacteristics as specified in <xref target="ISO23091-2"/>. When the transfer_characteristics syntax element is not present, the value of transfer_characteristics is inferred to be equal to 2.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>matrix_coefficients</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST have the semantics of MatrixCoefficients as specified in <xref target="ISO23091-2"/>. When the matrix_coefficients syntax element is not present, the value of matrix_coefficients is inferred to be equal to 2.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>use_q_matrix</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>equal to 1 specifies that the quantization matrices are present. use_q_matrix equal to 0 specifies that the quantization matrices are not present.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_8bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile-level-band"/> MUST ignore PBU with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
        </section>
        <section anchor="frame-info">
          <name>Frame 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_minus1                                          | u(32)
  frame_height_minus1                                         | u(32)
  chroma_format_idc                                           | u(4)
  bit_depth_minus8                                            | u(4)
  capture_time_distance                                       | u(8)
  reserved_zero_8bits                                         | u(8)
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>profile_idc</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates a profile to which the coded frame conforms to as specified in <xref target="appendix-profile-level-band"/>. Bitstreams shall not contain values of profiles_idc other than those specified in <xref target="appendix-profile-level-band"/>. Other values of profile_idc are reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>level_idc</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates a level to which the coded frame conforms to as specified in <xref target="appendix-profile-level-band"/>. Bitstreams shall not contain values of level_idc other than those specified in <xref target="appendix-profile-level-band"/>. Other values of level_idc are reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>band_idc</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies a maximum coded data rate of level_idc as specified in <xref target="appendix-profile-level-band"/>. Bitstreams shall not contain values of band_idc other than those specified in <xref target="appendix-profile-level-band"/>. The value of band_idc MUST be in the range of 0 to 3. Other values of band_idc are reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_5bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>shall be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_5bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile-level-band"/>. MUST ignore PBU with values of reserved_zero_5bits greater than 0.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>frame_width_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the width of frame in units of luma samples. frame_width_minus1 plus 1 MUST be as multiple of 2 when chroma_format_idc has a value of 2.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>frame_height_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the height of frame in units of luma samples.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>The variables FrameWidthInMbsY, FrameHeightInMbsY, FrameWidthInSamplesY, FrameHeightInSamplesY, FrameWidthInSamplesC, FrameHeightInSamplesC, FrameSizeInMbsY, and FrameSizeInSamplesY are derived as follows:</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>FrameWidthInSamplesY = frame_width_minus1 + 1</t>
                </li>
                <li>
                  <t>FrameHeightInSamplesY = frame_height_minus1 + 1</t>
                </li>
                <li>
                  <t>FrameWidthInMbsY = ceil(FrameWidthInSamplesY / MbWidth)</t>
                </li>
                <li>
                  <t>FrameHeightInMbsY = ceil(FrameHeightInSamplesY / MbHeight)</t>
                </li>
                <li>
                  <t>FrameWidthInSamplesC = FrameWidthInSamplesY // SubWidthC</t>
                </li>
                <li>
                  <t>FrameHeightInSamplesC = FrameHeightInSamplesY // SubHeightC</t>
                </li>
                <li>
                  <t>FrameSizeInMbsY = FrameWidthInMbsY * FrameHeightInMbsY</t>
                </li>
                <li>
                  <t>FrameSizeInSamplesY = FrameWidthInSamplesY * FrameHeightInSamplesY</t>
                </li>
              </ul>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>chroma_format_idc</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the chroma sampling relative to the luma sampling as specified in <xref target="_table-chroma_format_idc"/> The value of chroma_format_idc MUST be 0, 2, 3, or 4. Other values of chroma_format_idc are reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>bit_depth_minus8</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <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   = bit_depth_minus8 + 8</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <ul spacing="normal">
                    <li>
                      <t>QpBdOffset = bit_depth_minus8 * 6</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>bit_depth_minus8</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be in the range of 2 to 8, inclusive. Other values of bit_depth_minus8 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 time difference between the capture time of the previous frame and the current frame if there has been any frame preceding this frame.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_8bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile-level-band"/> MUST ignore PBU with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
        </section>
        <section anchor="quantization-matrix">
          <name>Quantization matrix</name>
          <figure anchor="syntaxcode-quantization_matrix">
            <name>quantization_matrix() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
quantization_matrix(){                                        |
  for(cIdx = 0; cIdx < NumComp; cIdx++){                      |
    for(y = 0; y < 8; y++){                                   |
      for(x = 0; x < 8; x++){                                 |
        q_matrix_minus1[cIdx][x][y]                           | u(8)
      }                                                       |
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>q_matrix_minus1[cIdx][x0][y0]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies a scaling value in the quantization matrices. When q_matrix_minus1[cIdx][x0][y0] is not present, it is inferred to be equal to 15. 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 for Cb and 2 for Cr.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>The quantization matrix, QMatrix[cIdx][x0][y0], is derived as follows:</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>QMatrix[cIdx][x0][y0] = q_matrix_minus1[cIdx][x0][y0] + 1</t>
            </li>
          </ul>
        </section>
        <section anchor="tile-info">
          <name>Tile info</name>
          <figure anchor="syntaxcode-tile_info">
            <name>tile_info() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
tile_info(){                                                  |
  tile_width_in_mbs_minus1                                    | u(28)
  tile_height_in_mbs_minus1                                   | u(28)
  startMb=0                                                   |
  for(i = 0; startMb < FrameWidthInMbsY; i++){                |
    ColStarts[i] = startMb * MbWidth                          |
    startMb += tile_width_in_mbs_minus1 + 1                   |
  }                                                           |
  ColStarts[i] = FrameWidthInMbsY*MbWidth                     |
  TileCols = i                                                |
  startMb = 0                                                 |
  for(i = 0; startMb < FrameHeightMbsY; i++){                 |
    RowStarts[i] = startMb * MbHeight                         |
    startMb += tile_height_in_mbs_minus1 + 1                  |
  }                                                           |
  RowStarts[i] = FrameHeightMbsY*MbHeight                     |
  TileRows = i                                                |
  NumTiles = TileCols * TileRows                              |
  tile_size_present_in_fh_flag                                | u(1)
  if(tile_size_present_in_fh_flag){                           |
    for(tileIdx = 0; tileIdx < NumTiles; tileIdx++){          |
      tile_size_in_fh_minus1[tileIdx]                         | u(32)
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_width_in_mbs_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the width of a tile in units of MBs.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_height_in_mbs_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the height of a tile in units of MBs.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_size_present_in_fh_flag</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>equal to 1 specifies that tile_size_in_fh_minus1[tileIdx] is present in Frame header. tile_size_present_in_fh_flag equal to 0 specifies that tile_size_in_fh_minus1[tileIdx] is not present in Frame header.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_size_in_fh_minus1[tileIdx]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 indicates the size in bytes of tileIdx-th tile data in raster order in a frame. The value of tile_size_in_fh_minus1[tileIdx] MUST have the same value with tile_size_minus[tileIdx]. When it is not present, the value of tile_size_in_fh_minus1[tileIdx] is inferred to be equal to tile_size_minus1[tileIdx].</t>
            </li>
          </ul>
        </section>
        <section anchor="au-info">
          <name>Access 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(idx = 0; idx < num_frames; idx++){                      |
    pbu_type                                                  | u(8)
    group_id                                                  | u(16)
    reserved_zero_8bits                                       | u(8)
    frame_info()                                              |
  }                                                           |
  reserved_zero_8bits                                         | u(8)
  byte_alignment()                                            |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>num_frames</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the number of frames contained in the current AU.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>pbu_type</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>group_id</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile-level-band"/> MUST ignore PBU with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
        </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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>metadata_size</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the size of metadata before filler() in the current PBU.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>ff_byte</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>is a byte equal to 0xFF.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>metadata_payload_type</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the last byte of the payload type of a metadata</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>metadata_payload_size</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the last byte of the payload size of a metadata</t>
            </li>
          </ul>
          <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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>ff_byte</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>is a byte equal to 0xFF.</t>
            </li>
          </ul>
        </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()                                               |
  for(i = 0; i < NumComp; i++){                               |
    tile_data(tileIdx, i)                                     |
  }                                                           |
  while(more_data_in_tile()){                                 |
    tile_dummy_byte                                           | b(8)
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_dummy_byte</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>has any pattern of 8-bit string.</t>
            </li>
          </ul>
        </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(){                                                |
  tile_header_size                                            | u(16)
  tile_index                                                  | u(16)
  for(i = 0; i < NumComp; i++){                               |
    tile_data_size_minus1[i]                                  | u(32)
  }                                                           |
  for(i = 0; i < NumComp; i++){                               |
    tile_qp[i]                                                | u(8)
  }                                                           |
  reserved_zero_8bits                                         | u(8)
  byte_alignment()                                            |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_header_size</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the size of the tile header in bytes.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_index</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the tile index in raster order in a frame. tile_index MUST have the same value with tileIdx.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_data_size_minus1[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 indicates the size of 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 for Cb and 2 for Cr</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_qp[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specify 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 for Cb and 2 for Cr. Qp[i] to be used for the MBs in the tile are derived as follows</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <ul spacing="normal">
                    <li>
                      <t>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] MUST 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>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile-level-band"/> MUST ignore PBU with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
        </section>
        <section anchor="tile-data">
          <name>Tile 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>
          </figure>
        </section>
        <section anchor="mb-layer">
          <name>Macroblock 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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>abs_dc_coeff_diff</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the absolute value of the difference between the current DC transform coefficient level and PrevDC.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>sign_dc_coeff_diff</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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 negative value.</t>
            </li>
          </ul>
          <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 for Cb and 2 for Cr. The value of TransCoeff[cIdx][x0][y0] MUST be in the range of -32768 to 32767, inclusive.</t>
        </section>
        <section anchor="ac-coding">
          <name>AC 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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>coeff_zero_run</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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 coefficient levels.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>abs_ac_coeff_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the absolute value of an AC transform coefficient level at the given scanning position.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>sign_ac_coeff</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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 negative value.</t>
            </li>
          </ul>
          <t>The array ScanOrder[sPos] specifies the mapping of the zig-zag scan position sPos, ranging from 0 to (1 &lt;&lt; log2BlkWidth) * (1 &lt;&lt; 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 &lt;&lt; log2BlkWidth) and blkHeight equal to (1 &lt;&lt; log2BlkHeight).</t>
        </section>
        <section anchor="byte-alignment">
          <name>Byte 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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>alignment_bit_equal_to_zero</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="decoding-process">
      <name>Decoding 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>
          <t>The processes in <xref target="mb-decoding"/>, <xref target="block-recon"/> and <xref target="scaling-transform"/> specify the decoding processes using syntax elements in all syntax structures. 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.</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 FrameHeightInMbY * MbHeight.</t>
        </li>
        <li>
          <t>The cropping rectangle, which specifies the samples of a frame that are output, is derived as follows.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <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 FrameHeightInSampleY - 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>MB decoding process</name>
        <t>This process is invoked for each MB.</t>
        <t>Input to this process is a luma location (xMb, yMb) specifying the top-left sample of the current luma MB relative to the top left luma sample of the current frame.
Outputs of this process are the reconstructed samples of all the NumComp color components (when chorma_format_idc is equal to 2 or 3, Y, Cb, and Cr) for the current MB.</t>
        <t>The following steps applies:</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] as inputs, the output is a modified version of the (MbWidth)x(MbHeight) array resSamples[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] as inputs, 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] as inputs, 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 in Section 6.2 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] as inputs, 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>Block 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 the top 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) array recSamples of 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">
          <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>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <ul spacing="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 to TrSize and the transform height nBlkH set equal to TrSize as inputs, and the output is a (TrSize)x(TrSize) array r of reconstructed block.</t>
          </li>
          <li>
            <t>The (TrSize)x(TrSize) array recSamples is modified as follows:</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <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 and 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>
        <ul empty="true">
          <li>
            <ul empty="true">
              <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 as inputs, and 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 as inputs, and 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>
            <ul empty="true">
              <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>
            <ul empty="true">
              <li>
                <t>r[x][y] = clip(0, (1 &lt;&lt; BitDepth)-1, ((r[x][y]+(1 &lt;&lt; (bdShift-1)))&gt;&gt;bdShift) + (1 &lt;&lt; (BitDepth-1)))</t>
              </li>
            </ul>
          </li>
        </ul>
        <section anchor="scaling-process">
          <name>Scaling process for 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>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <t>bdShift = BitDepth + ((log2(nBlkW) + log2(nBlkH)) // 2) - 5</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The list levelScale[] is specified as follows:</t>
          <ul empty="true">
            <li>
              <ul empty="true">
                <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>
              <ul empty="true">
                <li>
                  <t>d[x][y] = clip(-32768, 32767, ((TransCoeff[cIdx][xBlkY][yBlkY] * QMatrix[cIdx][x][y] * levelScale[qP % 6] &lt;&lt; (qP//6)) + (1 &lt;&lt; (bdShift-1)) &gt;&gt; bdShift))</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="process-coeff">
          <name>Process for 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 the one- 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 as inputs, and the output is the list e[x][y] with y = 0..nBlkH - 1.</t>
              </li>
              <li>
                <t>The following applies:</t>
              </li>
            </ul>
            <ul empty="true">
              <li>
                <ul empty="true">
                  <li>
                    <t>g[x][y] = (e[x][y] + 64) &gt;&gt; 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 as inputs, and the output is the list r[x][y] with x = 0..nBlkW - 1.</t>
              </li>
            </ul>
          </section>
          <section anchor="transform-process">
            <name>Transformation 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>
              <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 <xref target="matrix-process"/>. 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>
                <ul empty="true">
                  <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>Transformation 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>
            </figure>
          </section>
        </section>
      </section>
    </section>
    <section anchor="parsing-process">
      <name>Parsing process</name>
      <section anchor="process_h">
        <name>Process for syntax 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 = clip(0, 5, PrevDcDiff &gt;&gt; 1)</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The value of syntax element abs_dc_coeff_diff is obtained by invoking the parsing process for variable 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 = clip(0, 2, PrevRun &gt;&gt; 2)</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The value of syntax element coeff_zero_run is obtained by invoking the parsing process for variable 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 = clip(0, 4, PrevLevel &gt;&gt; 2)</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The value of syntax element abs_ac_coeff_minus1 is obtained by invoking the parsing process for variable length codes as specified in <xref target="process-vlc"/> with kParam.</t>
        </section>
        <section anchor="process-vlc">
          <name>Process for 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>
          </figure>
          <t>where the value returned from read_bits(n) is interpreted as a binary representation of a n-bit unsigned integer with most significant bit written first.</t>
        </section>
      </section>
      <section anchor="codeword-generation-process-for-hv-informative">
        <name>Codeword generation process for h(v) (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 = clip(0, 5, PrevDcDiff &gt;&gt; 1)</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The codeword of syntax element abs_dc_coeff_diff is obtained by invoking the generation process for variable 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 = clip(0, 2, PrevRun &gt;&gt; 2)</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The codeword of syntax element coeff_zero_run is obtained by invoking the generation process for variable 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 = clip(0, 4, PrevLevel &gt;&gt; 2)</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The codeword of syntax element abs_ac_coeff_minus1 is obtained by invoking the generation for variable 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 for 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>
          </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 most significant bit written first.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security considerations</name>
      <t>APV decoder should take appropriate security considerations into account. A decoder MUST be robust against any non-compliant or malicious payloads.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
    <section anchor="appendix">
      <name>Appendix</name>
      <section anchor="appendix-profile-level-band">
        <name>Profiles, levels, and bands</name>
        <section anchor="overview-of-profiles-levels-and-bands">
          <name>Overview of profiles, levels, and bands</name>
          <t>Profiles, levels and bands specify restrictions on a coded frame and hence limits on the capabilities needed to decode the coded frame. Profiles, levels and bands may also be used to indicate interoperability points between individual decoder implementations.</t>
          <ul empty="true">
            <li>
              <t>NOTE: This document does not include individually selectable "options" at the decoder, as this would increase interoperability difficulties.
Each profile specifies a subset of algorithmic features and limits that MUST be supported by all decoders conforming to that profile.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>NOTE: Encoders are not required to make use of any particular subset of features supported in a profile.</t>
            </li>
          </ul>
          <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. The same set of level and band definitions is used with all profiles, but individual implementations may support a different level for each supported profile. For any given profile, a level with a band generally corresponds to a particular decoder processing load and memory capability.</t>
        </section>
        <section anchor="requirements-on-video-decoder-capability">
          <name>Requirements on 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, levels 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 profile should also be expressed.</t>
          <t>Specific values are specified in this section for the syntax elements profile_idc, level_idc and band_idc. All other values of profile_idc, level_idc and band_idc are reserved for future use.</t>
          <ul empty="true">
            <li>
              <t>NOTE: Decoders must not 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, decoders must 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 anchor="profile">
              <name>422-10 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 profile MUST obey the following constraints:</t>
              <ul spacing="normal">
                <li>
                  <t>chroma_format_idc MUST be equal to 2.</t>
                </li>
                <li>
                  <t>bit_depth_minus8 MUST be equal to 2.</t>
                </li>
                <li>
                  <t>pbu_type MUST be equal to 1</t>
                </li>
              </ul>
              <t>The level and the band constraints specified for the 422-10 profile in <xref target="levels_and_bands"/> MUST 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 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>
                  <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-12 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 profile MUST obey the following constraints:</t>
              <ul spacing="normal">
                <li>
                  <t>chroma_format_idc MUST be equal to 2.</t>
                </li>
                <li>
                  <t>bit_depth_minus8 MUST be in the range of 2 to 4.</t>
                </li>
                <li>
                  <t>pbu_type MUST be equal to 1</t>
                </li>
              </ul>
              <t>The level and the band constraints specified for the 422-12 profile in <xref target="levels_and_bands"/> MUST 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 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-10 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 profile MUST obey the following constraints:</t>
              <ul spacing="normal">
                <li>
                  <t>chroma_format_idc MUST be in the range of 2 to 3.</t>
                </li>
                <li>
                  <t>bit_depth_minus8 MUST be equal to 2.</t>
                </li>
                <li>
                  <t>pbu_type MUST be equal to 1</t>
                </li>
              </ul>
              <t>The level and the band constraints specified for the 444-10 profile in <xref target="levels_and_bands"/> MUST 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 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-12 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 profile MUST obey the following constraints:</t>
              <ul spacing="normal">
                <li>
                  <t>chroma_format_idc MUST be in the range of 2 to 3.</t>
                </li>
                <li>
                  <t>bit_depth_minus8 MUST be in the range of 2 to 4.</t>
                </li>
                <li>
                  <t>pbu_type MUST be equal to 1</t>
                </li>
              </ul>
              <t>The level and the band constraints specified for the 444-12 profile in <xref target="levels_and_bands"/> MUST 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 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-10 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 profile MUST obey the following constraints:</t>
              <ul spacing="normal">
                <li>
                  <t>chroma_format_idc MUST be in the range of 2 to 4.</t>
                </li>
                <li>
                  <t>bit_depth_minus8 MUST be equal to 2.</t>
                </li>
                <li>
                  <t>pbu_type MUST be equal to 1</t>
                </li>
              </ul>
              <t>The level and the band constraints specified for the 4444-10 profile in <xref target="levels_and_bands"/> MUST 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 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-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-5">
              <name>4444-12 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 profile MUST obey the following constraints:</t>
              <ul spacing="normal">
                <li>
                  <t>chroma_format_idc MUST be in the range of 2 to 4.</t>
                </li>
                <li>
                  <t>bit_depth_minus8 MUST be in the range of 2 to 4.</t>
                </li>
                <li>
                  <t>pbu_type MUST be equal to 1</t>
                </li>
              </ul>
              <t>The level and the band constraints specified for the 4444-12 profile in <xref target="levels_and_bands"/> MUST 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 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-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-6">
              <name>400-10 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 profile MUST obey the following constraints:</t>
              <ul spacing="normal">
                <li>
                  <t>chroma_format_idc MUST be equal to 0.</t>
                </li>
                <li>
                  <t>bit_depth_minus8 MUST be equal to 2.</t>
                </li>
                <li>
                  <t>pbu_type MUST be equal to 1</t>
                </li>
              </ul>
              <t>The level and the band constraints specified for the 400-10 profile in <xref target="levels_and_bands"/> MUST 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 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>
        <section anchor="levels_and_bands">
          <name>Levels and bands</name>
          <section anchor="general-level-limits">
            <name>General level limits</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 be less than or equal to "Max luma sample rate".</t>
              </li>
              <li>
                <t>The coded data rate (bits per second) MUST be less than or equal to "Max luma sample rate".</t>
              </li>
              <li>
                <t>The value of tile_width_in_mbs_minus1 MUST be greater than or equal to 15.</t>
              </li>
              <li>
                <t>The value of tile_height_in_mbs_minus1 MUST be greater than or equal to 7.</t>
              </li>
              <li>
                <t>The value of TileCols MUST be less than or equal to 20.</t>
              </li>
              <li>
                <t>The value of TileRows MUST be less than or equal to 20.</t>
              </li>
            </ul>
            <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_idc MUST 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>
              <thead>
                <tr>
                  <th align="left">l e v e l</th>
                  <th align="right">Max luma sample rate (sample/sec)</th>
                  <th align="right">Max coded data rate (kbits/sec)  band_idc==0</th>
                  <th align="right">Max coded data rate (kbits/sec)  band_idc==1</th>
                  <th align="right">Max coded data rate (kbits/sec)  band_idc==2</th>
                  <th align="right">Max coded data rate (kbits/sec)  band_idc==3</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">1</td>
                  <td align="right">3,041,280</td>
                  <td align="right">7,000</td>
                  <td align="right">11,000</td>
                  <td align="right">14,000</td>
                  <td align="right">21,000</td>
                </tr>
                <tr>
                  <td align="left">1.1</td>
                  <td align="right">6,082,560</td>
                  <td align="right">14,000</td>
                  <td align="right">21,000</td>
                  <td align="right">28,000</td>
                  <td align="right">42,000</td>
                </tr>
                <tr>
                  <td align="left">2</td>
                  <td align="right">15,667,200</td>
                  <td align="right">36,000</td>
                  <td align="right">53,000</td>
                  <td align="right">71,000</td>
                  <td align="right">106,000</td>
                </tr>
                <tr>
                  <td align="left">2.1</td>
                  <td align="right">31,334,400</td>
                  <td align="right">71,000</td>
                  <td align="right">106,000</td>
                  <td align="right">141,000</td>
                  <td align="right">212,000</td>
                </tr>
                <tr>
                  <td align="left">3</td>
                  <td align="right">66,846,720</td>
                  <td align="right">101,000</td>
                  <td align="right">151,000</td>
                  <td align="right">201,000</td>
                  <td align="right">301,000</td>
                </tr>
                <tr>
                  <td align="left">3.1</td>
                  <td align="right">133,693,440</td>
                  <td align="right">201,000</td>
                  <td align="right">301,000</td>
                  <td align="right">401,000</td>
                  <td align="right">602,000</td>
                </tr>
                <tr>
                  <td align="left">4</td>
                  <td align="right">265,420,800</td>
                  <td align="right">401,000</td>
                  <td align="right">602,000</td>
                  <td align="right">780,000</td>
                  <td align="right">1,170,000</td>
                </tr>
                <tr>
                  <td align="left">4.1</td>
                  <td align="right">530,841,600</td>
                  <td align="right">780,000</td>
                  <td align="right">1,170,000</td>
                  <td align="right">1,560,000</td>
                  <td align="right">2,340,000</td>
                </tr>
                <tr>
                  <td align="left">5</td>
                  <td align="right">1,061,683,200</td>
                  <td align="right">1,560,000</td>
                  <td align="right">2,340,000</td>
                  <td align="right">3,324,000</td>
                  <td align="right">4,986,000</td>
                </tr>
                <tr>
                  <td align="left">5.1</td>
                  <td align="right">2,123,366,400</td>
                  <td align="right">3,324,000</td>
                  <td align="right">4,986,000</td>
                  <td align="right">6,648,000</td>
                  <td align="right">9,972,000</td>
                </tr>
                <tr>
                  <td align="left">6</td>
                  <td align="right">4,777,574,400</td>
                  <td align="right">6,648,000</td>
                  <td align="right">9,972,000</td>
                  <td align="right">13,296,000</td>
                  <td align="right">19,944,000</td>
                </tr>
                <tr>
                  <td align="left">6.1</td>
                  <td align="right">8,493,465,600</td>
                  <td align="right">13,296,000</td>
                  <td align="right">19,944,000</td>
                  <td align="right">26,592,000</td>
                  <td align="right">39,888,000</td>
                </tr>
                <tr>
                  <td align="left">7</td>
                  <td align="right">16,986,931,200</td>
                  <td align="right">26,592,000</td>
                  <td align="right">39,888,000</td>
                  <td align="right">53,184,000</td>
                  <td align="right">79,776,000</td>
                </tr>
                <tr>
                  <td align="left">7.1</td>
                  <td align="right">33,973,862,400</td>
                  <td align="right">53,184,000</td>
                  <td align="right">79,776,000</td>
                  <td align="right">106,368,000</td>
                  <td align="right">159,552,000</td>
                </tr>
              </tbody>
            </table>
          </section>
        </section>
      </section>
      <section anchor="appendix-rawbitstream">
        <name>Raw bitstream format</name>
        <t>### Raw bitstream syntax and semantics for access unit</t>
        <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="appendix-metadata">
        <name>Metadata information</name>
        <section anchor="metadata-payload-syntax">
          <name>Metadata payload syntax</name>
          <figure anchor="syntax-metadatapayload">
            <name>metadata_payload() syntax code</name>
            <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>
          </figure>
        </section>
        <section anchor="filler-metadata">
          <name>Filler 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 a byte equal to 0xFF.</t>
            </li>
          </ul>
        </section>
        <section anchor="recommendation-itu-t-t35-metadata">
          <name>Recommendation ITU-T T.35 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--                                                |
  }                                                           |
                                                              |
  while (readSize > 0){                                       |
    itu_t_t35_payload                                         | b(8)
    readSize--                                                |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>itu_t_t35_country_code</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a byte having the semantics of country code as specified in Annex A of <xref target="ITUT-T35"/>.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>itu_t_t35_country_code_extension</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a byte having the semantics of country code as specified in Annex B of <xref target="ITUT-T35"/>.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>itu_t_t35_payload</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be bytes having the semantics of data registered as specified in <xref target="ITUT-T35"/>.</t>
            </li>
          </ul>
          <t>The terminal provider code and terminal provider oriented code as specified in <xref target="ITUT-T35"/> shall be contained in the first one or more bytes of the itu_t_t35_payload. Any remaining bytes in itu_t_t35_payload data shall be data having syntax and semantics as specified by the entity identified by the <xref target="ITUT-T35"/> country code and terminal provider code.</t>
        </section>
        <section anchor="mastering-display-color-volume-metadata">
          <name>Mastering 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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>primary_chromaticity_x[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>primary_chromaticity_y[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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>specifies a 0.16 fixed-point format of white point X chromaticity coordinate of mastering display as defined by CIE 1931.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>white_point_chromaticity_y</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies a 0.16 fixed-point format of white point Y chromaticity coordinate as mastering display defined by CIE 1931.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>max_mastering_luminance</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>is a 24.8 fixed-point format of maximum display mastering luminance, represented in candelas per square meter.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>min_mastering_luminance</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>is a 18.14 fixed-point format of minimum display mastering luminance, represented in candelas per square meter.</t>
            </li>
          </ul>
        </section>
        <section anchor="content-light-level-information-metadata">
          <name>Content 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>
          </figure>
          <ul spacing="normal">
            <li>
              <t>max_cll</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the maximum content light level information as specified in <xref target="CEA-861.3"/>, Appendix A.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>max_fall</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the maximum frame-average light level information as specified in <xref target="CEA-861.3"/>, Appendix A.</t>
            </li>
          </ul>
        </section>
        <section anchor="user-defined-metadata-syntax-and-semantics">
          <name>User defined metadata syntax and semantics</name>
          <t>This metadata has user data identified by a universal unique identifier as specifies in <xref target="ISO11578"/>, 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                               | b(8)
}                                                           |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>uuid</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a 128-bit value specified as a generated UUID according to the procedures of <xref target="ISO11578"/> Annex A.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>user_defined_data_payload</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a byte having user defined syntax and semantics as specified by the UUID generator.</t>
            </li>
          </ul>
        </section>
        <section anchor="undefined-metadata-syntax-and-semantics">
          <name>Undefined metadata syntax and semantics</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                           | b(8)
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>undefined_metadata_payload_byte</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>is a byte reserved for future case.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="ISO23091-2" target="https://www.iso.org/standard/81546.html">
        <front>
          <title>Recommendation ITU-T H.273 | ISO/IEC 23091-2, Information technology - Coding-independent code points - Part 2 Video</title>
          <author>
            <organization/>
          </author>
          <date year="2021" month="October"/>
        </front>
      </reference>
      <reference anchor="ISO9899" target="https://www.iso.org/standard/74528.html">
        <front>
          <title>ISO/IEC 9899:2018, Information technology - Programming languages - C</title>
          <author>
            <organization/>
          </author>
          <date year="2018" month="June"/>
        </front>
      </reference>
      <reference anchor="ITUT-T35" target="https://www.itu.int/rec/T-REC-T.35">
        <front>
          <title>Recommendation ITU-T T.35, Procedure for the allocation of ITU-T defined codes for non-standard facilities</title>
          <author>
            <organization/>
          </author>
          <date year="2000" month="February"/>
        </front>
      </reference>
      <reference anchor="CEA-861.3">
        <front>
          <title>CEA-861.3, HDR Static Metadata Extension</title>
          <author>
            <organization/>
          </author>
          <date year="2015" month="January"/>
        </front>
      </reference>
      <reference anchor="ISO11578" target="https://www.iso.org/standard/2229.html">
        <front>
          <title>ISO/IEC 11578:1996, Information technology - Open Systems Interconnection - Remote Procedure Cal1 (RPC)</title>
          <author>
            <organization/>
          </author>
          <date year="1996" month="December"/>
        </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>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
