<?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-05" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="APV">Advanced Professional Video</title>
    <seriesInfo name="Internet-Draft" value="draft-lim-apv-05"/>
    <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="July" day="20"/>
    <area>General</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>mezzanine codec</keyword>
    <keyword>visually lossless compression</keyword>
    <abstract>
      <?line 126?>

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

<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 the original, uncompressed quality</t>
        </li>
        <li>
          <t>Low complexity and high throughput intra frame only coding without inter frame coding.</t>
        </li>
        <li>
          <t>Intra frame coding without pixel domain prediction but frequency domain prediction for low delay encoding</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:0:0 to 4:4:4:4, and bit depths from 10 to 16 (Note: The profiles supporting 10 bit and 12 bit are currently defined)</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 are 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 four square blocks of 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 unit as defined in <xref target="appendix-rawbitstream"/></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. Each syntax element and multi-byte integers are written in big endian format. The decoding process behaves according to the value of the syntax element and to the values of previously decoded syntax elements.</t>
        <t>In some cases, the syntax tables may use the values of other variables derived from syntax elements values. Such variables appear in the 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 samplings</t>
          </li>
        </ul>
        <t>For the convenience of notation and terminology in this document, the variables and terms associated with these arrays can be referred to as luma and chroma regardless of the actual color representation method in use.</t>
        <t>The 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 <xref target="_figure-tile_examaple"/>: 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>This process converts a two dimensional array into an one dimensional array. The process starts at the top-left position position in the block then moves digaonally, changing direction at the edges of the block until it reaches the bottom-right position. <xref target="_figure-zz"/> shows an example of scanning order for 4x4 size block.</t>
          <figure anchor="_figure-zz">
            <name>Example of zig-zag scanning order for 4x4 block</name>
            <artwork><![CDATA[
     +===================+
     # 00 | 01 | 05 | 06 #
     +-------------------+
     # 02 | 04 | 07 | 12 #
     +-------------------+
     # 03 | 08 | 11 | 13 #
     +-------------------+
     # 09 | 10 | 14 | 15 #
     +===================+
]]></artwork>
          </figure>
          <t>Inputs to this process are:</t>
          <ul spacing="normal">
            <li>
              <t>a variable blkWidth specifying the width of a block, and</t>
            </li>
            <li>
              <t>a variable blkHeight specifying the height of a block.</t>
            </li>
          </ul>
          <t>Output of this process is the array zigZagScan[sPos].</t>
          <t>The array index sPos specifies the scan position ranging from 0 to (blkWidth * blkHeight)-1. Depending on the value of blkWidth and blkHeight, the array zigZagScan is derived as follows:</t>
          <figure anchor="_figure-zzscan">
            <name>Pseudo-code for zig-zag scan</name>
            <artwork><![CDATA[
pos = 0
zigZagScan[pos] = 0
pos++
for(line = 1; line < (blkWidth + blkHeight - 1); line++){
  if(line % 2){
    x = min(line, blkWidth - 1)
    y = max(0, line - (blkWidth - 1))
    while(x >=0 && y < blkHeight){
      zigZagScan[pos] = y * blkWidth + x
      pos++
      x--
      y++
    }
  }
  else{
    y = min(line, blkHeight - 1)
    x = max(0, line - (blkHeight - 1))
    while(y >= 0 && x < blkWidth){
      zigZagScan[pos] = y * blkWidth + x
      pos++
      x++
      y--
    }
  }
}
]]></artwork>
          </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 the last bit of a byte, i.e., the next bit in the bitstream is the first bit in a byte, the return value of byte_aligned() is equal to TRUE.</t>
            </li>
            <li>
              <t>Otherwise, the return value of byte_aligned() is equal to FALSE.</t>
            </li>
          </ul>
        </section>
        <section anchor="moredataintile">
          <name>more_data_in_tile()</name>
          <ul spacing="normal">
            <li>
              <t>If the current position in the i-th tile() syntax structure is less than TileSize[i] in bytes from the beginning of the tile_header() syntax structure of the i-th tile, the return value of more_data_in_tile() is equal to TRUE.</t>
            </li>
            <li>
              <t>Otherwise, the return value of more_data_in_tile() is equal to FALSE.</t>
            </li>
          </ul>
        </section>
        <section anchor="nextbitsn">
          <name>next_bits(n)</name>
          <t>This function provides the next n bits in the bitstream for comparison purposes, without advancing the bitstream pointer.</t>
        </section>
        <section anchor="readbitsn">
          <name>read_bits(n)</name>
          <t>This function 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, i.e. big endian format. 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, i.e. big endian format. 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 frames such as a frame for additional view, zero or more alpha frames, zero or more depth frames, zero or more preview frame such as a frame with smaller resolution, zero or more metadatas, and zero or more fillers.</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 the 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 values. When the value of group_id is equal to 0, the value of pbu_type MUST be greater than 64. The value of 0xFFFF for 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 a 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 frames in the previous access unit and frames in the current access unit in milliseconds if there has been any access unit preceding the access unit this frame belongs to.</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">level</th>
                <th align="right">Max luma sample rate (sample/sec)</th>
                <th align="right">Max coded data rate (Mbits/sec) band_idc==0</th>
                <th align="right">Max coded data rate (Mbits/sec) band_idc==1</th>
                <th align="right">Max coded data rate (Mbits/sec) band_idc==2</th>
                <th align="right">Max coded data rate (Mbits/sec) band_idc==3</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1</td>
                <td align="right">3,041,280</td>
                <td align="right">8</td>
                <td align="right">11</td>
                <td align="right">15</td>
                <td align="right">23</td>
              </tr>
              <tr>
                <td align="left">1.1</td>
                <td align="right">6,082,560</td>
                <td align="right">16</td>
                <td align="right">21</td>
                <td align="right">30</td>
                <td align="right">45</td>
              </tr>
              <tr>
                <td align="left">2</td>
                <td align="right">15,667,200</td>
                <td align="right">39</td>
                <td align="right">54</td>
                <td align="right">76</td>
                <td align="right">114</td>
              </tr>
              <tr>
                <td align="left">2.1</td>
                <td align="right">31,334,400</td>
                <td align="right">78</td>
                <td align="right">108</td>
                <td align="right">152</td>
                <td align="right">227</td>
              </tr>
              <tr>
                <td align="left">3</td>
                <td align="right">66,846,720</td>
                <td align="right">114</td>
                <td align="right">159</td>
                <td align="right">222</td>
                <td align="right">333</td>
              </tr>
              <tr>
                <td align="left">3.1</td>
                <td align="right">133,693,440</td>
                <td align="right">227</td>
                <td align="right">317</td>
                <td align="right">444</td>
                <td align="right">666</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="right">265,420,800</td>
                <td align="right">455</td>
                <td align="right">637</td>
                <td align="right">892</td>
                <td align="right">1,338</td>
              </tr>
              <tr>
                <td align="left">4.1</td>
                <td align="right">530,841,600</td>
                <td align="right">910</td>
                <td align="right">1,274</td>
                <td align="right">1,784</td>
                <td align="right">2,675</td>
              </tr>
              <tr>
                <td align="left">5</td>
                <td align="right">1,061,683,200</td>
                <td align="right">1,820</td>
                <td align="right">2,548</td>
                <td align="right">3,567</td>
                <td align="right">5,350</td>
              </tr>
              <tr>
                <td align="left">5.1</td>
                <td align="right">2,123,366,400</td>
                <td align="right">3,639</td>
                <td align="right">5,095</td>
                <td align="right">7,133</td>
                <td align="right">10,699</td>
              </tr>
              <tr>
                <td align="left">6</td>
                <td align="right">4,777,574,400</td>
                <td align="right">7,278</td>
                <td align="right">10,189</td>
                <td align="right">14,265</td>
                <td align="right">21,397</td>
              </tr>
              <tr>
                <td align="left">6.1</td>
                <td align="right">8,493,465,600</td>
                <td align="right">14,556</td>
                <td align="right">20,378</td>
                <td align="right">28,529</td>
                <td align="right">42,793</td>
              </tr>
              <tr>
                <td align="left">7</td>
                <td align="right">16,986,931,200</td>
                <td align="right">29,111</td>
                <td align="right">40,756</td>
                <td align="right">57,058</td>
                <td align="right">85,586</td>
              </tr>
              <tr>
                <td align="left">7.1</td>
                <td align="right">33,973,862,400</td>
                <td align="right">58,222</td>
                <td align="right">81,511</td>
                <td align="right">114,115</td>
                <td align="right">171,172</td>
              </tr>
            </tbody>
          </table>
          <t><xref target="_table-level_ex"/> shows widely used typical configurations of resolution and frame rate of video and corresponding levels for them.</t>
          <table anchor="_table-level_ex">
            <name>Example of typical video configurations and corresponding levels (informative)</name>
            <thead>
              <tr>
                <th align="center">use case</th>
                <th align="center">resolution</th>
                <th align="right">frame per second</th>
                <th align="right">luma sample per second</th>
                <th align="left">level</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="center">720p</td>
                <td align="center">1280 x 720</td>
                <td align="right">30</td>
                <td align="right">27,648,000</td>
                <td align="left">2.1</td>
              </tr>
              <tr>
                <td align="center">FHD</td>
                <td align="center">1920 x 1080</td>
                <td align="right">30</td>
                <td align="right">62,208,000</td>
                <td align="left">3</td>
              </tr>
              <tr>
                <td align="center">UHD 4K</td>
                <td align="center">3840 x 2160</td>
                <td align="right">60</td>
                <td align="right">497,664,000</td>
                <td align="left">4.1</td>
              </tr>
              <tr>
                <td align="center">UHD 4K</td>
                <td align="center">3840 x 2160</td>
                <td align="right">120</td>
                <td align="right">995,328,000</td>
                <td align="left">5</td>
              </tr>
              <tr>
                <td align="center">UHD 8K</td>
                <td align="center">7680 x 4320</td>
                <td align="right">60</td>
                <td align="right">1,990,656,000</td>
                <td align="left">5.1</td>
              </tr>
              <tr>
                <td align="center">UHD 8K</td>
                <td align="center">7680 x 4320</td>
                <td align="right">120</td>
                <td align="right">3,981,312,000</td>
                <td align="left">6</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>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 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 anchor="android-open-source-project">
          <name>Android open source project</name>
          <t>The Android open source project (AOSP) has implemented Advanced Professional Video (APV) conformant to this document <xref target="AOSP16APV"/>.</t>
        </section>
        <section anchor="ffmpeg-open-source-project">
          <name>FFmpeg open source project</name>
          <t>The FFmpeg project is developing APV decoder <xref target="FFmpegAPVdec"/> and APV encdoer <xref target="FFmpegAPVenc"/> conformant to this document.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="H273" target="https://www.itu.int/rec/T-REC-H.273">
          <front>
            <title>Recommendation ITU-T H.273 (V4) | ISO/IEC 23091-2:2025, Coding-independent 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>
        <reference anchor="AOSP16APV" target="https://developer.android.com/about/versions/16/features#apv">
          <front>
            <title>Android open source project version 16</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="FFmpegAPVdec" target="https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/483cadf8d77d3260eec8781f5f18c50f27e468f8">
          <front>
            <title>FFmpeg implementation of APV decoder</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="FFmpegAPVenc" target="https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/fab691edaf53bbf10429ef3448f1f274e5078395">
          <front>
            <title>FFmpeg implementation of APV encoder</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
kECeJvxDnVNgNVYrVGxDZZ2nzK6UVSW/Ua9J5qyLOX5nvqtbs5K9WYIk9lC1
lIGuGBHvKiquYJOnV7xr1Vtjv4KD9iUNart2oAzrOx0do8LuZMUVBt9fYBs+
NPL167HMX0IKFWb9WIhDw4dlDL6v+OmF3DJrhPUwkuHJcpsDRLrqXIjIj/KW
Dn1IQgIgsowqTsCwMz5yCeeo5nFvc+NUL2mvU9kInq30gwJfSm6s5kV7Ed55
XPwsf7bDFcnc+MX9s40c9sX9Y55tyxYbxc/yZ3fTohBMAvG7tfi79vHm47gM
+rfp4/cW73Qci6rptvdYcrtawkoKffFgTkDLukhOCXWEqlJEbyhYH8iAm7Op
L6P3TCoWdqx34ve2VaCRcWpVES3SFYy0A3yuT+8pfC5dCz4pZ2Q9t4L3zZaI
Mdf10z+vU9xetdavgGtadWk7zNToWSvKs/PCmoVlT8c2vdaqA4NeXQz1DCzE
ORbkGQpqJtZBhTyMRab47/Cy8cm/5DhJfCA/n7c/8RuVWFCd/JH9m3Jukqmr
xHEnovAZ0m4Kb1VePnmKiH5cWg/M4mmDPH61V1LBsYpOADNUCCcxJZIJL30E
PsbozBEotsytiVSyJeBgcGkOQxnGLAJyipAS1fRH6vCN9M8G66Oq7abRdD59
QgfrEfvMKC2FjqkVfdlHBbco3XmXtQh1oLh81VeSq4VW3xYaXFt7+Gd/qTTU
tdC220JzbQvNs+3OerXQBtw6xApk5d1dr9YRliXjNNmH95ZKz7xc+/RJCbOn
hnyfLB4sISNRkJx8X+BJd6pT9ig2AuWbpIqVtaE3/vgPKyp7oU4wtanVZ7B0
SlWs+9wOtNaVzbbU18P6mo8iVYYJhVKYWmYd6N9/+5c4CT+kb+L0F2lnVdMF
3b7wee7AkmakngGJZG4yepNRtKb7+NCgXG+0m+LH/IGLNlLpKpTKT1XySnFl
fbtkb41DCnjBprm1ZXUNHv1Cz+DLzs4WjF5tjJn8H4v2nwV9+4uF845F5oZo
17nIzk79M3BTOOSqfxAd+i0o9gTD/vCxZ7qBNen9At/781rL46YaVlNYiEtd
j0CG1tB1vkUe8ICRodxnuUoXu7RgCivE57Ig95O/zxsN+W0hn33d4v+CcRp8
NjjafbC6bzpZ6IRVyu7FAgMAqBtz7gZvI2/XC/1tIfvDvfhanMbEnXIqv0mD
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
3tU6dsIB2DJg275QTdoPJHmb4lVMSQPw5Pc6Vrfu+flcGVqW8B0ZnK8H+3iS
4zy+wqHIddR1gmkysGigrFCrKP4SRXd1bWUodPRzg7VrPHQK6ZFWo+Nkcd3v
5ncIc63v2+CrJ/lOmQjFoVPtWebJMLIOh8tuf1P3b6N8Uieg4u9a7pQJa6c7
raUSSfzIXJZv2ld3GFVmxJDvG3SHUAOv+vz6VR6zExebiXW1AbJyQ/BMhjFt
37elXiq8N1T8eaknGDdS/GX9OKmF7CASir9gEPo5+fSKEB1CVtfHD52bpPKc
Zf32czYYOuQIb6Z831xJkFS4oer7jZTfobwamZYctS0q6CA22SuMGPrQC+aL
Prdi1aQmTw+Z6vV8OJcVKVZq43DGfKkA+8F1uXLO5HIp4WygzuQ1yvu9nMM3
VtiR+xjCjXaeVP/mGral7pN//oV12n4hzxIu8JLQ1UDItRN2v8vhLKEPz0Ou
zqs3WvrW/1gbF77pKEgutBkRNCg8A9gECKdPvLDvcd4ck+FsPL6gJA9rkLEA
hGh6G+mCNIU5ePHbhUwGuWl9a2BtOBuxOQ+sfQ2hhLImt3+5AyKQXLnZDLu7
KWb8IlDt2nSt/larTG4jnFMnCmvOd1305rroziopazJbIk1zuVlzotGrFnOU
Xb1EfHG+BWqvuTYqrW+DB3pQKFwMZTRUzVNmG6lPcoHcp1B6lrzRy0TR4fp5
52AXLSt6U5dfWYpZ8S2Uclu8fF1K4GPlZrT4vtM0d+0VSbKiW+ey2mmekKu7
VzkIm/SzEsjKDpcM84q+vqIapw5frO5mGTtt0sOy+is7l1vFV3SMclY+gyp0
s8wznExrdCyvKWzSqXzdJR1iMWSv5dgbI3fykx3bcW4Qpkr9ICdMHCWjWnQs
h5YXCd+Xmrswe9j2UT77oCW+gc/v3dmHvRW62dmHpCglptq8J1JTo+G4EQhb
3YPRvCEMNo3UC4rn3saK515dbzA5iuwmmHS6BoqMJ7sxlGL6sM2gEBAgwwUd
JVzAVJulh5uiwpj4U5zBF1kI3RrAQkfenOsDOSyOz402Bt9Mscdp5Kr1cgdU
PMwyk8a1IxkJBuLM3HJsHwdIkZeqaz82kHRNkzc6FfryW4SY+WHk3MpDlVPi
F5maiU4cRnG6mXAtOWqzBMby07YdIxfyVKIX/1oaGZl1xwQygFeRR0k8d/Pi
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
DHyVqAJyIDFED1b/rf8fNKesAOCXAQA=

-->

</rfc>
