<?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.21 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lim-apv-03" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="APV">Advanced Professional Video</title>
    <seriesInfo name="Internet-Draft" value="draft-lim-apv-03"/>
    <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="December" day="12"/>
    <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[tileIdx]                                    | u(32)
        tile(tileIdx)                                         |
    }                                                         |
    filler()                                                  |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_size[tileIdx]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the size in bytes of tileIdx-th tile data (i.e., tile(tileIdx)) in raster order in a frame. The value of 0 for tile_size[tileIdx] is reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>The variable TileSize[tileIdx] is set equal to tile_size[tildIdx].</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)
    full_range_flag                                           | u(1)
  }                                                           |
  use_q_matrix                                                | u(1)
  if(use_q_matrix){                                           |
    quantization_matrix()                                     |
  }                                                           |
  tile_info()                                                 |
  reserved_zero_8bits                                         | u(8)
  byte_alignment()                                            |
}                                                             |
]]></artwork>
          </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>full_range_flag</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST have the semantics of VideoFullRangeFlag as specified in <xref target="ISO23091-2"/>. When the full_range_flag syntax element is not present, the value of full_range_flag is inferred to be equal to 0.</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                                                 | u(24)
  frame_height                                                | u(24)
  chroma_format_idc                                           | u(4)
  bit_depth_minus8                                            | u(4)
  capture_time_distance                                       | u(8)
  reserved_zero_8bits                                         | u(8)
}                                                             |
]]></artwork>
          </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</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the width of frame in units of luma samples. frame_width MUST be as multiple of 2 when chroma_format_idc has a value of 2. The value of 0 for frame_width is reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>frame_height</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the height of frame in units of luma samples. The value of 0 for frame_height is reserved for future use.</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</t>
                </li>
                <li>
                  <t>FrameHeightInSamplesY = frame_height</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 empty="true">
            <li>
              <t>bit_depth_minus8 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[cIdx][x][y]                                  | u(8)
      }                                                       |
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>q_matrix[cIdx][x0][y0]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies a scaling value in the quantization matrices. When q_matrix[cIdx][x0][y0] is not present, it is inferred to be equal to 16. 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 0 for q_matrix[cIdx][x0][y0] is reserved for future use.</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[cIdx][x0][y0]</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                                           | u(20)
  tile_height_in_mbs                                          | u(20)
  startMb=0                                                   |
  for(i = 0; startMb < FrameWidthInMbsY; i++){                |
    ColStarts[i] = startMb * MbWidth                          |
    startMb += tile_width_in_mbs                              |
  }                                                           |
  ColStarts[i] = FrameWidthInMbsY*MbWidth                     |
  TileCols = i                                                |
  startMb = 0                                                 |
  for(i = 0; startMb < FrameHeightMbsY; i++){                 |
    RowStarts[i] = startMb * MbHeight                         |
    startMb += tile_height_in_mbs                             |
  }                                                           |
  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[tileIdx]                                | u(32)
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_width_in_mbs</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the width of a tile in units of MBs.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_height_in_mbs</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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[tileIdx] is present in Frame header. tile_size_present_in_fh_flag equal to 0 specifies that tile_size_in_fh[tileIdx] is not present in Frame header.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_size_in_fh[tileIdx]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the size in bytes of tileIdx-th tile data in raster order in a frame. The value of tile_size_in_fh[tileIdx] MUST have the same value with tile_size[tileIdx]. When it is not present, the value of tile_size_in_fh[tileIdx] is inferred to be equal to tile_size[tileIdx]. The value of 0 for tile_size_in_fh[tileIdx] is reserved for future use.</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()                                            |
  filler()                                                    |
}                                                             |
]]></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[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[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>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. The value of 0 for tile_data_size[i] is reserved for future use.</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 MUST be greater than or equal to 16.</t>
              </li>
              <li>
                <t>The value of tile_height_in_mbs MUST be greater than or equal to 8.</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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
T3nSkC1Ez+9/rv3/7M07AUeFAQA=

-->

</rfc>
