<?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-06" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.0 -->
  <front>
    <title abbrev="APV">Advanced Professional Video</title>
    <seriesInfo name="Internet-Draft" value="draft-lim-apv-06"/>
    <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="August" day="11"/>
    <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 (APV) and decoding process of it. APV is a professional video codec providing visually lossless compression mainly for recording and post production. APV is designed and developed to be open public standard with no licensing and royalty is required for use.</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. 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  APV codec is for use in professional video recording and editing workflows for various types of content. APV has been designed and developed to be made freely available to the industry for open public use without any licensing. 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 prediction between pixel values but between transformed values 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 primitive bitstream units 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 = 4                                          |
    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 < FrameHeightInMbsY; i++){                 |
    RowStarts[i] = startMb * MbHeight                         |
    startMb += tile_height_in_mbs                             |
  }                                                           |
  RowStarts[i] = FrameHeightInMbsY*MbHeight                     |
  TileRows = i                                                |
  NumTiles = TileCols * TileRows                              |
  tile_size_present_in_fh_flag                                | u(1)
  if(tile_size_present_in_fh_flag){                           |
    for(i = 0; i < NumTiles; i++){                            |
      tile_size_in_fh[i]                                      | u(32)
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </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 FrameHeightInMbsY * 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 FrameHeightInSamplesY - 1, inclusive.</t>
            </li>
          </ul>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <ul spacing="normal">
            <li>
              <t>The cropping rectangle contains the two chroma arrays having frame coordinates (x//SubWidthC, y//SubHeightC), where (x,y) are the frame coordinates of the specified luma samples.</t>
            </li>
          </ul>
        </li>
      </ul>
      <section anchor="mb-decoding">
        <name>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"/>. The project also provides various test vectors for verification of the implementations.</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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
lHc3qV89fvaeq2qd5hF4G19XjeDz5db/8hFcn6nvYgRz2Bf6/nBpL9QYvsXk
pzccQ+VCC/U1Ozw0UFfW106Q2iMDSDccreVBZntsLYOzVNbdlWOwQYAaXts5
2HYM/jdTkfRqoxQj2zOt3MHXFoBLTJm+Spzs3qKiwTizcJkBcRWgCo5a4UdQ
ZAWTVg3bst18m8unwBL/gtJWLG2v0JLbK1Vrc2fqtZ2nS1DM+ZIgdlycc2nY
LtGs04ar3HhKyVCl4boNLPP0dsBV65f5LBtFDwR/dj/dD3QA8I0iMlDgRLPJ
hbTm3KAnKmoyJ3oN0LWF779TACh+vbmP/F3oFPfA/fc2ISpfK9HHzFnJTPR8
YR0zDFyUrOYWRjlv5BGuSQeo7KEn75r5yFvnOibjhQdP9QRQtlc7OwIj2NRx
m47QK8Tztclk39mD//bJbt85uJn9Mx97WY29HS5Zif03g+2tDbavVJTwPTRM
mGwQN1mNUGIoCDfIj2Tp4LkkTxvtSxGLQXzjxCZqMfMX49gfnFNOi40Q+Gwl
kjdJEg/rmBoDA3HXs1WD7B1eUO69jfEXQ2MrtrsBe+O1YSok7IHY2dkAiTuJ
kNTMJLuxvnphLeM5EmwA83Mh4dgmJLCt/jf7OJx4g6lwHzlRJRv7v86Ja4u3
IicqEmwA835wYh7hmjW1PLt3BX2xiD8lnLPosbp9mXKu5q4w6+Wdu5e6rE4X
IpVZKxVTQZt1Ol20pKjkcRpkLxiaJGW1el6tBf2FHbx4FpKGnMoUzZYGBzKi
6bRuy8wiFpwuepFpVwRZXKen8TWkUqjlfauEajLmGailFztYhNGsW+drRSsU
QFVcZvncFs84jcs9VNnUEN88p+WSBWKt+jdfIPQS8TX80XnElC+6mgiFmbXW
FNAniveQASiZAv55MdgsSFrSTh8D0lZPAdqk/u09MwgDkn2yfU+smZTjLkwt
cl0pJj9f27OD8Z9NJotNJ8JnSrN9X48N7BODysMC029lYMjlCT9smLzc9mS6
vwk2ymbEZumOLQgbb4WNJVOe1KADyMafStPubebnxhl3zJ7+trP0jnrx+3Sj
hEGyvlLi/w2sul9JVLgpHUpvtcjJDWt2VKdDVldkKGGhcyBrMDQ9imqjPFAk
36klB2XWDFt9JgZiwLRrT4dq/OnMLuebZaVpVMeeVl7n++z1VZQDK0I3zJQz
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

-->

</rfc>
