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

<t>This document describes the bitstream format of Advanced Professional Video (APV) and its decoding process. APV is a professional video codec providing visually lossless compression mainly for recording and post production. APV is designed and developed to be an open public specification. standard with no licensing and royalty is required for use.</t>
    </abstract>
  </front>
  <middle>
    <?line 129?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines the bitstream format  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 the 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 requirements. 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>High bit-rates of 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>Various chroma sampling formats from 4:0:0 to 4:4:4:4, and bit depths from 10 to 16 (Note: Only the profiles supporting 10 bit and 12 bit are currently defined);</t>
        </li>
        <li>
          <t>Multiple decoding and re-encoding without severe visual quality degradation; and</t>
        </li>
        <li>
          <t>Various metadata including HDR10/10+ and user-defined format.</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 square 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>metadata: data describing various characteristics related to a bitstream wihtout directly affecting decoding process of it.</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 value of transform coefficients</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 a 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"/> following widely used industry practices for video codecs.</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>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 logarithm 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, '0b01000001' 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 format of the Advanced Professional Video (APV) Codec.</t>
        <t>A raw bitstream format consists of 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 decoded frames.</t>
        <t>The video source that is represented by the bitstream is a sequence of frames.</t>
        <t>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 as specified in <xref target="H273"/>).</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 as specified in <xref target="CIE15"/>).</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 verions of this document.</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>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, that 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 in the block then moves diagonally, 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 a 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>the size of a primitive bitstream unit in bytes. A value of 0 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 the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document 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 the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document 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>A value of 1 specifies that the quantization matrices are present. A value of 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 the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document 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>MUST be equal to 0 in bitstreams conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document MUST ignore PBU with values of reserved_zero_8bits 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 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 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 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 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 the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document 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 the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document 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 the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to the profiles specified in <xref target="appendix-profile-level-band"/> of this version of document 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 chroma_format_idc is equal to 2 or 3, Y, Cb, and Cr) for the current MB.</t>
        <t>The following steps apply:</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 recSamples[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 of 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 any metadata to be carried with this type of payload is expected to have been 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="RFC9562"/>, 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 specified in <xref target="RFC9562"/>.</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>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>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 specified 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 an APV decoder <xref target="FFmpegAPVdec"/> and an APV encoder <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="CIE15" target="https://cie.co.at/publications/colorimetry-4th-edition">
          <front>
            <title>Technical Rport, Colorimetri</title>
            <author>
              <organization/>
            </author>
            <date year="2018"/>
          </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="RFC9562">
          <front>
            <title>Universally Unique IDentifiers (UUIDs)</title>
            <author fullname="K. Davis" initials="K." surname="Davis"/>
            <author fullname="B. Peabody" initials="B." surname="Peabody"/>
            <author fullname="P. Leach" initials="P." surname="Leach"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
              <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9562"/>
          <seriesInfo name="DOI" value="10.17487/RFC9562"/>
        </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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
AQA=

-->

</rfc>
