<?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.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lim-apv-04" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="APV">Advanced Professional Video</title>
    <seriesInfo name="Internet-Draft" value="draft-lim-apv-04"/>
    <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="2025" month="April" day="15"/>
    <area>General</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>mezzanine codec</keyword>
    <keyword>visually lossless compression</keyword>
    <abstract>
      <?line 115?>

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

<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. This specification is neither the product of the IETF nor a consensus view of the community.</t>
      <t>The APV codec supports the following features:</t>
      <ul spacing="normal">
        <li>
          <t>Perceptually lossless video quality that is close to 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 MUST 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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</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 is referred to by the variable name having a value equal to the address of the specific coding block.</t>
      </section>
    </section>
    <section anchor="Formats">
      <name>Formats 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 NumComps are specified in <xref target="_table-chroma_format_idc"/>, depending on the chroma format sampling structure, which is specified through chroma_format_idc. Other values of chroma_format_idc, SubWidthC, SubHeightC and NumComps may be specified in the future.</t>
        <table anchor="_table-chroma_format_idc">
          <name>SubWidthC, SubHeightC and NumComps values derived from chroma_format_idc</name>
          <thead>
            <tr>
              <th align="center">chroma_format_idc</th>
              <th align="center">Chroma format</th>
              <th align="center">SubWidthC</th>
              <th align="center">SubHeightC</th>
              <th align="center">NumComps</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">0</td>
              <td align="center">4:0:0</td>
              <td align="center">1</td>
              <td align="center">1</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="center">1</td>
              <td align="center">reserved</td>
              <td align="center">reserved</td>
              <td align="center">reserved</td>
              <td align="center">reserved</td>
            </tr>
            <tr>
              <td align="center">2</td>
              <td align="center">4:2:2</td>
              <td align="center">2</td>
              <td align="center">1</td>
              <td align="center">3</td>
            </tr>
            <tr>
              <td align="center">3</td>
              <td align="center">4:4:4</td>
              <td align="center">1</td>
              <td align="center">1</td>
              <td align="center">3</td>
            </tr>
            <tr>
              <td align="center">4</td>
              <td align="center">4:4:4:4</td>
              <td align="center">1</td>
              <td align="center">1</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="center">5..7</td>
              <td align="center">reserved</td>
              <td align="center">reserved</td>
              <td align="center">reserved</td>
              <td align="center">reserved</td>
            </tr>
          </tbody>
        </table>
        <t>In 4:0:0 sampling, there is only one sample array that can be considered as the luma array.</t>
        <t>In 4:2:2 sampling, each of the two chroma arrays has the same height and half the width of the luma array.</t>
        <t>In 4:4:4 sampling and 4:4:4:4 sampling, all the sample arrays have the same height and width as the luma array.</t>
        <t>The number of bits necessary for the representation of each of the samples in the luma and chroma arrays in a video sequence is in the range of 10 to 16, inclusive.</t>
        <t>When the value of chroma_format_idc is equal to 2, the chroma samples are co-sited with the corresponding 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 is 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 i-th tile() syntax structure is less than TileSize[i] in bytes from the beginning of the tile_header() syntax structure of the i-th tile, the return value of more_data_in_tile() is equal to 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){                                         |
    signature                                                 | f(32)
    currReadSize = 0                                          |
    do(){                                                     |
        pbu_size                                              | u(32)
        currReadSize += 4                                     |
        pbu()                                                 |
        currReadSize += pbu_size                              |
    } while (au_size > currReadSize)                          |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>signature</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>A four-character code that identifies the bitstream as an APV AU. The value MUST be 'aPv1' (0x61507631).</t>
            </li>
          </ul>
          <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 MUST 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(i = 0; i < NumTiles; i++){                            |
        tile_size[i]                                          | u(32)
        tile(i)                                               |
    }                                                         |
    filler()                                                  |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_size[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the size in bytes of i-th tile data (i.e., tile(i)) in raster order in a frame. The value of 0 for tile_size[i] is reserved for future use.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>The variable TileSize[i] is set equal to tile_size[i].</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="H273"/>. 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="H273"/>. 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="H273"/>. 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="H273"/>. 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(i = 0; i < NumComps; i++){                              |
    for(y = 0; y < 8; y++){                                   |
      for(x = 0; x < 8; x++){                                 |
        q_matrix[i][x][y]                                     | u(8)
      }                                                       |
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>q_matrix[i][x][y]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies a scaling value in the quantization matrices. When q_matrix[i][x][y] is not present, it is inferred to be equal to 16. The array index i specifies an indicator for the color component; when chroma_format_idc is equal to 2 or 3, 0 for Y, 1 for Cb and 2 for Cr. The value of 0 for q_matrix[i][x][y] is reserved for future use.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>The quantization matrix, QMatrix[i][x][y], is derived as follows:</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>QMatrix[i][x][y] = q_matrix[i][x][y]</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(i = 0; i < NumTiles; i++){                            |
      tile_size_in_fh[i]                                      | 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[i] is present in Frame header. tile_size_present_in_fh_flag equal to 0 specifies that tile_size_in_fh[i] is not present in Frame header.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_size_in_fh[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the size in bytes of i-th tile data in raster order in a frame. The value of tile_size_in_fh[i] MUST have the same value with tile_size[i]. When it is not present, the value of tile_size_in_fh[i] is inferred to be equal to tile_size[i]. The value of 0 for tile_size_in_fh[i] is reserved for 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(i = 0; i < num_frames; i++){                            |
    pbu_type                                                  | u(8)
    group_id                                                  | u(16)
    reserved_zero_8bits                                       | u(8)
    frame_info()                                              |
  }                                                           |
  reserved_zero_8bits                                         | u(8)
  byte_alignment()                                            |
  filler()                                                    |
}                                                             |
]]></artwork>
          </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(tileIdx)                                        |
  for(i = 0; i < NumComps; 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(tileIdx){                                         |
  tile_header_size                                            | u(16)
  tile_index                                                  | u(16)
  for(i = 0; i < NumComps; i++){                              |
    tile_data_size[i]                                         | u(32)
  }                                                           |
  for(i = 0; i < NumComps; i++){                              |
    tile_qp[i]                                                | u(8)
  }                                                           |
  reserved_zero_8bits                                         | u(8)
  byte_alignment()                                            |
}                                                             |
]]></artwork>
          </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 NumComps 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="appendix-metadata">
      <name>Metadata information</name>
      <section anchor="metadata-payload">
        <name>Metadata payload</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="list-of-metadata-syntax-and-semantics">
        <name>List of metadata syntax and semantics</name>
        <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"/> MUST be contained in the first one or more bytes of the itu_t_t35_payload. Any remaining bytes in itu_t_t35_payload data MUST be data having syntax and semantics as specified by the entity identified by the <xref target="ITUT-T35"/> country code and terminal provider code. Note that the registration of any metadata to be carried with this type of payload must be registered through either national administrator, Alliance for Telecommuncations Industry Solutions (ATIS) or ITUT-T Telecommnunication Standardization Bureau (TSB) as specified in <xref target="ITUT-T35"/>.</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">
          <name>User defined metadata</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">
          <name>Undefined metadata</name>
          <figure anchor="syntax-metaund">
            <name>metadata_undefined() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
metadata_undefined(payloadSize){                              |
  for(i = 0; i < payloadSize; i++){                           |
    undefined_metadata_payload_byte                           | 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>
    <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 are also 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 MUST 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 SHALL 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>
        <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 anchor="levels_and_bands">
        <name>Levels and bands</name>
        <section anchor="general-3">
          <name>General</name>
          <t>For purposes of comparison of level capabilities, a particular level of each band is considered to be a lower level than some other level when the value of the level_idc of the particular level of each band is less than that of the other level.</t>
          <ul spacing="normal">
            <li>
              <t>The luma sample rate (luma samples per second) MUST 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>
        </section>
        <section anchor="limits-of-levels-and-bands">
          <name>Limits of levels and bands</name>
          <t><xref target="_table-levels"/> specifies the limits for each level of each band.
A level to which a coded frame conforms is indicated by the syntax elements level_idc and band_idc as follows:</t>
          <ul spacing="normal">
            <li>
              <t>level_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="security-considerations">
      <name>Security considerations</name>
      <t>APV decoder MUST take appropriate security considerations into account.</t>
      <t>Like any other audio or video codec, APV should not be used with insecure ciphers or cipher modes that are vulnerable to known    plaintext attacks.  Some of the header bits as well as the padding are easily predictable.</t>
      <t>Implementations of the APV codec need to take appropriate security considerations into account. Those related to denial of service are outlined in Section 2.1 of <xref target="RFC4732"/>. A decoder MUST be robust against any non-compliant or malicious payloads. Malicious payloads MUST NOT cause the decoder to overrun its allocated memory or to take an excessive amount of resources to decode. An overrun in allocated memory could lead to arbitrary code execution by an attacker. The same applies to the encoder, even though problems in encoders are typically rarer.  Malicious video streams MUST NOT cause the encoder to misbehave because this would allow an attacker to attack transcoding gateways.  A frequent security problem in image and video codecs is failure to check for integer overflows.  An example is allocating "frame_width * frame_height" in pixel count computations without considering that the multiplication result may have overflowed the range of the arithmetic type. The range coder could, if implemented naively, read one byte over the end.  The implementation MUST ensure that no read outside allocated and initialized memory occurs.</t>
      <t>A decoder MUST NOT try to process the metadata whose type is not recognized by the implementation. Failure of processing of any metadata exactly according to the syntax structure specificed MAY put a decoder in unknown status.</t>
      <t>None of the content carried in APV is intended to be executable.</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-rawbitstream">
        <name>Raw bitstream format</name>
        <figure anchor="syntax-rawbitstream">
          <name>raw_bitstream_access_unit() syntax code</name>
          <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
raw_bitstream_access_unit(){                                  |
    au_size                                                   | u(32)
    access_unit(au_size)                                      |
}                                                             |
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>au_size</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>indicates the size of access unit in bytes. 0 is prohibited and 0xFFFFFFFF is reserved.</t>
          </li>
        </ul>
      </section>
      <section anchor="apv-implementations">
        <name>APV implementations</name>
        <section anchor="openapv-open-source-project">
          <name>OpenAPV open source project</name>
          <t>The Academy Software Foundation (ASWF) <xref target="ASWF"/> jointly found by Academy of Motion Picture Arts and Science (AMPAS) <xref target="AMPAS"/> and the Linux Foundation has created an open source software development project conformant to this document <xref target="OpenAPV"/>.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="H273" target="https://www.itu.int/rec/T-REC-H.273">
          <front>
            <title>Recommendation ITU-T H.273 (V4) | ISO/IEC 23091-2:2025, Coding-independent code points - Part 2 Video</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="July"/>
          </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>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC4732">
          <front>
            <title>Internet Denial-of-Service Considerations</title>
            <author fullname="M. Handley" initials="M." role="editor" surname="Handley"/>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
            <author>
              <organization abbrev="IAB">Internet Architecture Board</organization>
            </author>
            <date month="December" year="2006"/>
            <abstract>
              <t>This document provides an overview of possible avenues for denial-of-service (DoS) attack on Internet systems. The aim is to encourage protocol designers and network engineers towards designs that are more robust. We discuss partial solutions that reduce the effectiveness of attacks, and how some solutions might inadvertently open up alternative vulnerabilities. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4732"/>
          <seriesInfo name="DOI" value="10.17487/RFC4732"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="ASWF" target="https://www.aswf.io/">
          <front>
            <title>The Academy Software Foundation</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="AMPAS" target="https://www.oscars.org/">
          <front>
            <title>Academy of Motion Picture Arts and Science</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="OpenAPV" target="https://github.com/AcademySoftwareFoundation/openapv">
          <front>
            <title>OpenAPV</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
ZitBMCEmyrv4Ifz1w+zXD/PV4kysrdjNNxFvI8LkZhuY38BFUMJXyldQvlVb
cBoURiS/7Et7Pk2iPClKBV7q/pV+8OIY593eYbbIud0+4BnNzjsU2ijpY8Co
ofQVIU6Ot79WmfNOinqcvGEKZ+sZzM42fTntyiys9CMpNbVL+7gsdqZItJkn
/v7KBeRVZvd5XCgLolgyfKgWzzmR3SC+i8rQ2sbfIGZOBwKQSY8n5sfddSNM
Oq26gsIG/9pgDBS6F/VV99Eahx4NFFexS1CgWvMWd4WaZ512Go/OsGaKsViP
NJT7Ogn3wvZ1D/C44ZqEvY2gjhz2+Z7fX9QJrI+sDjAw41W4Sfuq92sdW7Xq
V48fr20WDJ+k/9v4umr8ni/205eP3+osfRvjl8M+1/P7C/ugxu8tXiy64fip
UFeor1nhvoG6tL4OVtSRE0C4wXClSC87smoRnIV67rYCeA0C1PDKQbx2AO+/
mXmkZxplFNkRZOWBuLbyW+By9FWuWPeiCA3GkcFFfr5lgCo4asl+f5EVTEoz
yiRvheM2F4vAgjiA0lYsS6/QktsrVWv9oOeVg5xLUMzFfCB2XJwzU9ihy2zP
hsvCbUrJUGXdug0sish2wFXblvlcFsVIAX96N8ME9BndjU5OoMKJpuMLeTRo
g56og4051WuArqx8/53OaOLXzWPZb8OiuANhujc5SvKt0mlMnZnMHHAvzGOG
gYua1Vw0J+VGbrWaVHzKqXnyrpk/HOvcOGOi5eCpFgAJxElgwAg29dFKR+kV
zt21ybPe2Yf/Dsi93jnczPeZPx5Zjb19qrES++/O2hs7a1+pg7x30ClhEjZs
MhuhxlAQNshCZNngm6dSYiz68ca5R9Rk5s9Hsd8/p7QTayHwxUribvIUHtUx
ewUemF3NTw26d3BBGevWxl8MjJ/Y7gasjFeGqZCwB2JnZw0kbuUko2Ym2Y3V
zQtrGs+RYA2YXwppvdYhge3x3+zjcOIGonAXOVGl9Pq/zokrq7ciJyoSrAHz
bnBiHuGaJVqe3buCvVjEn9K6WfRY3r5M7FZzZ5jVsrvdSVtWZ/SQxqyVLalg
zTqdLnpSVIo2DbIbDNBO0X3OmbVgv3AcFkshWcipSrdsLDjQEU2ndVtnFrEY
+ZhxeZ6ZiAEurjPI+BpSKdTyvlVCNXnpDNTSSxUswmjWrZfdJa8NQFVc5tLc
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
AQA=

-->

</rfc>
