<?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-07" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="APV">Advanced Professional Video</title>
    <seriesInfo name="Internet-Draft" value="draft-lim-apv-07"/>
    <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="September" day="08"/>
    <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 (PBU) 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--                                                |
  }                                                           |
                                                              |
  for(i = 0; i < readSize; i++){                              |
    itu_t_t35_payload[i]                                      | b(8)
  }                                                           |
}                                                             |
]]></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[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a byte 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[i]                            | 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[i]</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[i]                        | b(8)
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>undefined_metadata_payload_byte[i]</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>
        <t>Each profile specifies a subset of algorithmic features and limits that MUST be supported by all decoders conforming to that profile.</t>
        <ul empty="true">
          <li>
            <t>NOTE: This document does not include individually selectable "options" at the decoder, as this would increase interoperability difficulties.</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. For any given profile, a level with a band generally corresponds to a particular decoder processing load and memory capability. The constraints set by levels and bands are orthogonal to the constraints defined by profiles so that the same set of level and band definitions is used with all profiles. For example, a certain level L and a certain band B can be combined with either profile X or profile Y to specifically different set of constraints.</t>
        <ul empty="true">
          <li>
            <t>NOTE: Individual implementations may support a different level for each supported profile.</t>
          </li>
        </ul>
      </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>Any levels and bands constraints specified 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>Any levels and bands constraints specified 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>Any levels and bands constraints specified 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>Any levels and bands constraints specified 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>Any levels and bands constraints specified 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>Any levels and bands constraints specified 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>Any levels and bands constraints specified 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 at https://github.com/AcademySoftwareFoundation/openapv/tree/main/test/bitstream.</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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
8A8QfsU1gqrIARFCXiQun2EzrN/UE2yhs79faKLhnOPUtJWMotaYOKZ06SGy
ww9CGmX0mOwZXc8kytkHC70c8Todyh1RfgBimYhM2ed4IQYf3gGrB74qi9Y4
dLE9VcGTCVbU+U6wq+NE5YGTW5dk+CrBLvKutrETPoAtD2zbF6pJ/4Ekb1O8
jClpAO783sTq1j0/nytD6xK+I4Pz9WAfT3Ocx1c4FLmOuk4wTQYWDZQNanWK
v8TQXV1bOQod+9xg7ToPnUJ6pNXoOFlcD7r5FcJc2/s2+Goh3ylToTh0qj3L
PRlG1uZw2e1v6u5z1E9qB1T8ovVOmbJ2utNaqpHEj8xl+aZ9dYdRZUYM+b5B
dwg18KrPL1/kNjtxsRGs6w2QlQuCp/IY0/Z9m+qlwXtLw5+neoJxK8Nf1o+T
WsgBIqH4Cx5Cv6CYXhFiQMjq+vihfZNU7rOs337OB0ObHOHtjO/bGwmSCrc0
fb+R8TuUtybTlKOWRQUbxCZ7hRNDb3qBvOh9KzZNanL3kKlezx/nsk6Klfo4
nDFfqsB+cEOunD25XEo4G6gjvMZ4v5cyfGuDHbmPIdxq5Un1b29hW+Y+xedf
Wrvtl3Iv4RIvCV0NhEI7YfW7HM4S+rAccnWevdHTt/7HWrjwTUdBcqndiGBB
4R7AJkA4feKlfY/z5pgMZ+PxJSV5WIOMBSBE06/RLkhTkMHL3y9lMshN61sD
a8PZiM15YO1rCCWUNbn98x0QgfTK7STs7kTMxEWg2bXpXP2tZpncQjhnThTm
nO+26O1t0Z1VWtZktkSa5nKz5lSjV63mKLt6ifrifAvUXnNtVFrfBg+MoFC4
GMpoqJqnzDJS7+QCuc+g9Cx5raeJYsD1s87hHnpW9KIuP7MUs+JbKOWWePm6
lMDHys1o8X2nae7aK5JkRbcuZLWzPCFXd69yEDbpZyWQlR0uGeYVfX1JNc4c
vljdzTJ22qSHZfVXdi43i6/oGOWsfApV6GaZpyhMa3Qsbyls0ql83SUdYjVk
z+XYG6N38sKO7Tg3CFOlfpBTJo6RUa06lkPLq4TvU81duD1s/yjvfdAU38Dn
927vw14K3W7vQ1KUElNt3hNpqdFw3AqEbe7BaN4SBrtG6gXDc39jw3O/rheY
fIrsNph0ugaKPE92ayjF9GGbQSEgQIZL2kq4BFGbpUebosKY+FOU4MsshG4N
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

-->

</rfc>
