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

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>This document defines the bitstream formats and decoding process for Advanced Professional Video (APV) Codec. The APV codec is a professional video codec that was developed in response to the need for professional level high quality video recording and post production. The primary purpose of the APV codec is for use in professional video recording and editing workflows for various types of content.</t>
      <t>The APV codec supports the following features:</t>
      <ul spacing="normal">
        <li>
          <t>Perceptually lossless video quality that is close to raw video quality</t>
        </li>
        <li>
          <t>Low complexity and high throughput intra frame only coding without pixel domain prediction</t>
        </li>
        <li>
          <t>Support for high bit-rates up to a few Gbps for 2K, 4K and 8K resolution content, enabled by a lightweight entropy coding scheme</t>
        </li>
        <li>
          <t>Frame tiling for immersive content and for enabling parallel encoding and decoding</t>
        </li>
        <li>
          <t>Support for various chroma sampling formats from 4:2:2 to 4:4:4, and bit-depths from 10 to 16</t>
        </li>
        <li>
          <t>Support for multiple decoding and re-encoding without severe visual quality degradation</t>
        </li>
      </ul>
    </section>
    <section anchor="terms">
      <name>Terms</name>
      <section anchor="terms-and-definitions">
        <name>Terms and definitions</name>
        <ul spacing="normal">
          <li>
            <t>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</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: 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</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</t>
          </li>
          <li>
            <t>Frame Data: a syntax structure containing coded representation of a frame</t>
          </li>
          <li>
            <t>Frame Data stream: a sequence of Frame Data</t>
          </li>
          <li>
            <t>Level: a defined set of constraints on the values that may be taken by the syntax elements and variables of this document, or the value of a transform coefficient prior to scaling</t>
          </li>
          <li>
            <t>luma: a sample array or single sample representing the monochrome signal related to the primary colors, represented by the symbol or subscript Y or L</t>
          </li>
          <li>
            <t>MB (macroblock): square block of luma samples and two corresponding blocks of chroma samples of a frame</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>Profile: a specified subset of the syntax of this document</t>
          </li>
          <li>
            <t>QP (quantization parameter): a variable used by the decoding process for scaling of transform coefficient levels</t>
          </li>
          <li>
            <t>raster scan: a mapping of a rectangular two-dimensional pattern to a one-dimensional pattern such that the first entries in the one- dimensional pattern are from the top row of the two- dimensional pattern scanned from left to right, followed by the second, third, etc., rows of the pattern each scanned from left to right</t>
          </li>
          <li>
            <t>raw bitstream: an encapsulation of a Frame Data stream where for each frame, a field indicating the size of Frame Data precedes the Frame Data</t>
          </li>
          <li>
            <t>source: a term used to describe the video material or some of its attributes before encoding process</t>
          </li>
          <li>
            <t>syntax element: an element of data represented in the bitstream</t>
          </li>
          <li>
            <t>syntax structure: zero or more syntax elements present together in the bitstream in a specified order</t>
          </li>
          <li>
            <t>tile: a rectangular region of MBs within a particular tile column and a particular tile row in a frame</t>
          </li>
          <li>
            <t>tile column: a rectangular region of MBs having a height equal to the height of the frame and width specified by syntax elements in the frame header</t>
          </li>
          <li>
            <t>tile row: a rectangular region of MBs having a height specified by syntax elements in the frame header and a width equal to the width of the frame</t>
          </li>
          <li>
            <t>tile scan: a specific sequential ordering of MBs partitioning a frame in which the MBs are ordered consecutively in MB raster scan in a tile and the tiles in a frame are ordered consecutively in a raster scan of the tiles of the frame</t>
          </li>
          <li>
            <t>transform coefficient: a scalar quantity, considered to be in a frequency domain, that is associated with a particular one- dimensional or two-dimensional index</t>
          </li>
        </ul>
      </section>
      <section anchor="abbreviated-terms">
        <name>Abbreviated terms</name>
        <ul spacing="normal">
          <li>
            <t>I: intra</t>
          </li>
          <li>
            <t>LSB: least significant bit</t>
          </li>
          <li>
            <t>MSB: most significant bit</t>
          </li>
          <li>
            <t>RGB: Red, Green and Blue</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions">
      <name>Conventions used in this document</name>
      <section anchor="general">
        <name>General</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119"/>.</t>
      </section>
      <section anchor="operators">
        <name>Operators</name>
        <t>The operators and the order of precedence are the same as used in the C programming language <xref target="ISO9899"/>, with the exception of the operators described in the <xref target="arith-operator"/> and <xref target="bit-operator"/></t>
        <section anchor="arith-operator">
          <name>Arithmetic operators</name>
          <ul spacing="normal">
            <li>
              <t>// : an integer division with rounding of the result toward zero. For example, 7//4 and -7//-4 are rounded to 1 and -7//4 and 7//-4 are rounded to -1</t>
            </li>
            <li>
              <t>/ or div(x,y) : a division in mathematical equations where no truncation or rounding is intended</t>
            </li>
            <li>
              <t>% : a modulus. x % y is a remainder of x divided by y</t>
            </li>
            <li>
              <t>min(x,y) : the minimum value of the values x and y</t>
            </li>
            <li>
              <t>max(x,y) : the maximum value of the values x and y</t>
            </li>
            <li>
              <t>ceil(x) : the smallest integer value that is larger than or equal to x</t>
            </li>
            <li>
              <t>clip(x,y,z) : clip(x,y,z)=max(x,min(z,y))</t>
            </li>
            <li>
              <t>sum (i=x, y, f(i)) : a summation of f(i) with i taking all integer values from x up to and including y</t>
            </li>
          </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 bitdepts, the bitdepts are equliazed by adding zeros in significant positions to the argument with lower bitdepth.</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 bitdepts, the bitdepts are equliazed by adding zeros in significant positions to the argument with lower bitdepth.</t>
            </li>
            <li>
              <t>x &gt;&gt; y : arithmetic right shift of a two's complement integer representation of x by y binary digits. This function is defined only for non-negative integer values of y. Bits shifted into the most significant bits (MSBs) as a result of the right shift have a value equal to the MSB of x prior to the shift operation.</t>
            </li>
            <li>
              <t>x &lt;&lt; y : arithmetic left shift of a two's complement integer representation of x by y binary digits. This function is defined only for non-negative integer values of y. Bits shifted into the least significant bits (LSBs) as a result of the left shift have a value equal to 0.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="range-notation">
        <name>Range notation</name>
        <ul spacing="normal">
          <li>
            <t>x = y..z</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>x takes on integer values starting from y to z, inclusive, with x, y, and z being integer numbers and z being greater than y.</t>
          </li>
        </ul>
        <section anchor="order-of-operations-precedence">
          <name>Order of operations precedence</name>
          <t>When order of precedence is not indicated explicitly by use of parentheses, operations are evaluated in the following order.</t>
          <ul spacing="normal">
            <li>
              <t>Operations of a higher precedence are evaluated before any operation of a lower precedence. <xref target="_table-operation_order"/> specifies the precedence of operations from highest to lowest; operations closer to the top of the table indicates a higher precedence.</t>
            </li>
            <li>
              <t>Operations of the same precedence are evaluated sequentially from left to right.</t>
            </li>
          </ul>
          <table anchor="_table-operation_order">
            <name>Operation precedence from highest (top of the table) to lowest (bottom of the table)</name>
            <thead>
              <tr>
                <th align="left">operations (with operands x, y, and z)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">"x++", "x--"</td>
              </tr>
              <tr>
                <td align="left">"!x", "-x" (as a unary prefix operator)</td>
              </tr>
              <tr>
                <td align="left">x^y (power)</td>
              </tr>
              <tr>
                <td align="left">"x * y", "x / y", "x // y", "x % y"</td>
              </tr>
              <tr>
                <td align="left">"x + y", "x - y", "sum (i=x, y, f(i))"</td>
              </tr>
              <tr>
                <td align="left">"x &lt;&lt; y", "x &gt;&gt; y"</td>
              </tr>
              <tr>
                <td align="left">"x &lt; y", "x &lt;= y", "x &gt; y", "x &gt;= y"</td>
              </tr>
              <tr>
                <td align="left">"x == y", "x != y"</td>
              </tr>
              <tr>
                <td align="left">"x &amp; y"</td>
              </tr>
              <tr>
                <td align="left">"x | y"</td>
              </tr>
              <tr>
                <td align="left">"x &amp;&amp; y"</td>
              </tr>
              <tr>
                <td align="left">"x || y"</td>
              </tr>
              <tr>
                <td align="left">"x ? y : z"</td>
              </tr>
              <tr>
                <td align="left">"x..y"</td>
              </tr>
              <tr>
                <td align="left">"x = y", "x += y", "x -= y"</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="variables-syntax-elements-and-tables">
        <name>Variables, syntax elements and tables</name>
        <t>Each syntax element is described by its name in all lowercase letters and its type is provided next to the syntax code in each row. The decoding process behaves according to the value of the syntax element and to the values of previously decoded syntax elements.</t>
        <t>In some cases, the syntax tables may use the values of other variables derived from syntax elements values. Such variables appear in the syntax tables, or text, named by a mixture of lower case and uppercase letters and without any underscore characters. Variables with names starting with an uppercase letter are derived for the decoding of the current syntax structure and all dependent syntax structures. Variables with names starting with an uppercase letter may be used in the decoding process for later syntax structures without mentioning the originating syntax structure of the variable. Variables with names starting with a lowercase letter are only used within the section in which they are derived.</t>
        <t>Functions that specify properties of the current position in the bitstream are referred to as syntax functions. These functions are specified in <xref target="syntax-func"/> and assume the existence of a bitstream pointer with an indication of the position of the next bit to be read by the decoding process from the bitstream.</t>
        <t>An 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 (vertial) index.</t>
        <t>A specification of values of the entries in rows and columns of an array may be denoted by {{...}{...}}, where each inner pair of brackets specifies the values of the elements within a row in increasing column order and the rows are ordered in increasing row order. Thus, setting a matrix s equal to {{1 6}{4 9}} specifies that s[0][0] is set equal to 1, s[1][0] is set equal to 6, s[0][1] is set equal to 4, and s[1][1] is set equal to 9.</t>
        <t>Binary notation is indicated by enclosing the string of bit values by single quote marks. For example, '01000001' represents an eight-bit string having only its second and its last bits (counted from the most to the least significant bit) equal to 1.</t>
        <t>Hexadecimal notation, indicated by prefixing the hexadecimal number by "0x", may be used instead of binary notation when the number of bits is an integer multiple of 4. For example, 0x41 represents an eight-bit string having only its second and its last bits (counted from the most to the least significant bit) equal to 1.</t>
        <t>A value equal to 0 represents a FALSE condition in a test statement. The value TRUE is represented by any value different from zero.</t>
      </section>
      <section anchor="processes">
        <name>Processes</name>
        <t>Processes are used to describe the decoding of syntax elements. A process has a separate specification and invoking.
When invoking a process, the assignment of variables is specified as follows:</t>
        <ul spacing="normal">
          <li>
            <t>If the variables at the invoking and the process specification do not have the same name, the variables are explicitly assigned to lower case input or output variables of the process specification.</t>
          </li>
          <li>
            <t>Otherwise (the variables at the invoking and the process specification have the same name), the assignment is implied.</t>
          </li>
        </ul>
        <t>In the specification of a process, a specific coding block may be referred to by the variable name having a value equal to the address of the specific coding block.</t>
      </section>
    </section>
    <section anchor="Formats">
      <name>Formats and processes used in this document</name>
      <section anchor="bitstream-formats">
        <name>Bitstream formats</name>
        <t>This section specifies the bitstream of the Advanced Professional Video (APV) Codec.</t>
        <t>The bitstream can be in one of two formats, the Frame Data stream format or the raw bitstream file storage format.</t>
        <t>The Frame Data stream format is conceptually the more "basic" type. It consists of a sequence of syntax structure called Frame Data.</t>
        <t>The raw bitstream file storage format can be constructed from the Frame Data stream format by prefixing each Frame Data with a frame size field to form a stream of bytes. The raw bitstream file storage format is specified in <xref target="appendix-rawbitstream"/>.</t>
      </section>
      <section anchor="source-decoded-and-output-frame-formats">
        <name>Source, decoded and output frame formats</name>
        <t>This section specifies the relationship between the source and the decoded frames that are the results of the decoding process.</t>
        <t>The video source that is represented by the bitstream is a sequence of frames.</t>
        <t>The source and decoded frames are each comprised of one or more sample arrays:</t>
        <ul spacing="normal">
          <li>
            <t>Luma and two chroma (YCbCr or YCgCo).</t>
          </li>
          <li>
            <t>Green, blue, and red (GBR, also known as RGB).</t>
          </li>
          <li>
            <t>Arrays representing other unspecified tri-stimulus color samplings (for example, YZX, also known as XYZ).</t>
          </li>
        </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 (or L or Y) and chroma, where the two chroma arrays can be referred to as Cb and Cr; regardless of the actual color representation method in use.</t>
        <t>The variables SubWidthC, SubHeightC and NumComp 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 NumComp may be specified in the future.</t>
        <table anchor="_table-chroma_format_idc">
          <name>SubWidthC, SubHeightC and NumComp 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">NumComp</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="center">0</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">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: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, each of the two chroma arrays has the same height and width as the luma array.</t>
        <t>The number of bits necessary for the representation of each of the samples in the luma and chroma arrays in a video sequence is in the range of 10 to 16, inclusive.</t>
        <t>When the value of chroma_format_idc is equal to 2, the chroma samples are co-sited with the corresponding luma samples and the nominal locations in a frame are as shown in <xref target="_figure-format420"/>.</t>
        <figure anchor="_figure-format420">
          <name>Nominal vertical and horizontal locations of 4:2:2 luma and chroma samples in a frame</name>
          <artwork><![CDATA[
                    & * & * & * & * & * ...

                    & * & * & * & * & * ...

                    & * & * & * & * & * ...

                    & * & * & * & * & * ...

                             ...

      & - location where both luma and chroma sample exist

      * - location where only luma sample exist
]]></artwork>
        </figure>
        <t>When the value of chroma_format_idc is equal to 3 or 4, for each frame, all the array samples are co-sited and the nominal locations in a frame are as shown in <xref target="_figure-format444"/>.</t>
        <figure anchor="_figure-format444">
          <name>Nominal vertical and horizontal locations of 4:4:4 and 4:4:4:4 luma and chroma samples in a frame</name>
          <artwork><![CDATA[
                    & & & & & & & & & & ...

                    & & & & & & & & & & ...

                    & & & & & & & & & & ...

                    & & & & & & & & & & ...

                             ...

      & - location where both luma and chroma sample exist
]]></artwork>
        </figure>
        <t>The samples are processed in units of MBs. The variables MbWidth and MbHeight, which specify the width and height of the luma arrays for each MB, are defined as follows:</t>
        <ul spacing="normal">
          <li>
            <t>MbWidth = 16</t>
          </li>
          <li>
            <t>MbHeight = 16</t>
          </li>
        </ul>
        <t>The variables MbWidthC and MbHeightC, which specify the width and height of the chroma arrays for each MB, are derived as follows:</t>
        <ul spacing="normal">
          <li>
            <t>MbWidthC = MbWidth // SubWidthC</t>
          </li>
          <li>
            <t>MbHeightC = MbHeight // SubHeightC</t>
          </li>
        </ul>
      </section>
      <section anchor="partitioning-of-a-frame">
        <name>Partitioning of a frame</name>
        <section anchor="partitioning-of-a-frame-into-tiles">
          <name>Partitioning of a frame into tiles</name>
          <t>This section specifies how a frame is partitioned into tiles.</t>
          <t>A frame is divided into tiles. A tile is a group of MBs that cover a rectangular region of a frame and is processed independently of other tiles. Every tile has the same width and height, except possibly tiles at the right or bottom frame boundary when the frame width or height is not a multiple of the tile width or height, respectively. The tiles in a frame are scanned in raster order. Within a tile, the MBs are scanned in raster order. Each MB is comprised of one (MbWidth) x (MbHeight) luma array and two corresponding chroma sample arrays.</t>
          <t>For example, a frame may be divided into 6 tiles (3 tile columns and 2 tile rows) as shown in Figure 3: Frame with 10 by 8 MBs that is partitioned into 6 tiles. In this example, the tile size is defined as 4 column MBs and 4 row MBs. In case of the third and sixth tiles (in raster order), the tile size is 2 column MBs and 4 row MBs since the frame width is not multiple of the tile width.</t>
          <figure anchor="_figure-tile_examaple">
            <name>Frame with 10 by 8 MBs that is partitioned into 6 tiles</name>
            <artwork><![CDATA[
     +===================+===================+=========+
     #    |    |    |    # MB | MB | MB | MB # MB | MB #
     +-------------------+-------------------+---------+
     #    |    |    |    # MB | MB | MB | MB # MB | MB #
     +-----   tile  -----+-------------------+---------+
     #    |    |    |    # MB | MB | MB | MB # MB | MB #
     +-------------------+-------------------+---------+
     #    |    |    |    # MB | MB | MB | MB # MB | MB #
     +===================+===================+=========+
     # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB #
     +-------------------+-------------------+---------+
     # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB #
     +-------------------+-------------------+---------+
     # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB #
     +-------------------+-------------------+---------+
     # MB | MB | MB | MB # MB | MB | MB | MB # MB | MB #
     +===================+===================+=========+

                 #,=  tile boundary

                 |,-  MB boundary
]]></artwork>
          </figure>
        </section>
        <section anchor="spatial-or-component-wise-partitioning">
          <name>Spatial or component-wise partitioning</name>
          <t>The following divisions of processing elements form spatial or component-wise partitioning:</t>
          <ul spacing="normal">
            <li>
              <t>the division of each frame into components;</t>
            </li>
            <li>
              <t>the division of each frame into tile columns;</t>
            </li>
            <li>
              <t>the division of each frame into tile rows;</t>
            </li>
            <li>
              <t>the division of each tile column into tiles;</t>
            </li>
            <li>
              <t>the division of each tile row into tiles;</t>
            </li>
            <li>
              <t>the division of each tile into color components;</t>
            </li>
            <li>
              <t>the division of each tile into MBs;</t>
            </li>
            <li>
              <t>the division of each MB into blocks.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="scanning-processes">
        <name>Scanning processes</name>
        <section anchor="zig-zag">
          <name>Zig-zag scan</name>
          <t>Inputs to this process are:</t>
          <ul spacing="normal">
            <li>
              <t>a variable blkWidth specifying the width of a block, and</t>
            </li>
            <li>
              <t>a variable blkHeight specifying the height of a block.</t>
            </li>
          </ul>
          <t>Output of this process is the array zigZagScan[sPos].</t>
          <t>The array index sPos specifies the scan position ranging from 0 to (blkWidth * blkHeight)-1. Depending on the value of blkWidth and blkHeight, the array zigZagScan is derived as follows:</t>
          <figure anchor="_figure-zzscan">
            <name>Pseudo-code for zig-zag scan</name>
            <artwork><![CDATA[
pos = 0
zigZagScan[pos] = 0
pos++
for(line = 1; line < (blkWidth + blkHeight - 1); line++){
  if(line % 2){
    x = min(line, blkWidth - 1)
    y = max(0, line - (blkWidth - 1))
    while(x >=0 && y < blkHeight){
      zigZagScan[pos] = y * blkWidth + x
      pos++
      x--
      y++
    }
  }
  else{
    y = min(line, blkHeight - 1)
    x = max(0, line - (blkHeight - 1))
    while(y >= 0 && x < blkWidth){
      zigZagScan[pos] = y * blkWidth + x
      pos++
      x++
      y--
    }
  }
}
]]></artwork>
          </figure>
        </section>
        <section anchor="inverse-scan">
          <name>Inverse scan</name>
          <t>Inputs to this process are:</t>
          <ul spacing="normal">
            <li>
              <t>a variable blkWidth specifying the width of a block, and</t>
            </li>
            <li>
              <t>a variable blkHeight specifying the height of a block.</t>
            </li>
          </ul>
          <t>Output of this process is the array inverseScan[rPos].</t>
          <t>The array index rPos specifies the raster scan position ranging from 0 to (blkWidth * blkHeight)-1. Depending on the value of blkWidth and blkHeight, the array inverseScan is derived as follows:</t>
          <ul spacing="normal">
            <li>
              <t>The variable forwardScan is derived by invoking zig-zag scan order 1D array initialization process as specified in <xref target="zig-zag"/> with input parameters blkWidth and blkHeight.</t>
            </li>
            <li>
              <t>The output variable inverseScan is derived as follows:</t>
            </li>
          </ul>
          <figure anchor="_figure-inv_zzscan">
            <name>Pseudo-code for inverse zig-zag scan</name>
            <artwork><![CDATA[
for(pos = 0; pos < blkWidth * blkHeight; pos++){
  inverseScan[forwardScan[pos]] = pos
}
]]></artwork>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="syntax">
      <name>Syntax and semantics</name>
      <section anchor="method-of-specifying-syntax">
        <name>Method of specifying syntax</name>
        <t>The syntax tables specify a superset of the syntax of all allowed bitstreams. Note that an actual decoder must implement some means for identifying entry points into the bitstream and some means to identify and handle non-conforming bitstreams. The methods for identifying and handling errors and other such situations are not specified in this document.</t>
        <t>The APV bitstream is described in this document using syntax code based on the C programming language <xref target="ISO9899"/> and uses its if/else, while,and for keywords as well as functions defined within this document.</t>
        <t>The syntax table in syntax code is presented in a two-column format such as shown in <xref target="syntax-examplecode"/>. In this form, the type column provides a type referenced in that same line of syntax code by using syntax elements processing function defined in <xref target="syntax-process-func"/>.</t>
        <figure anchor="syntax-examplecode">
          <name>A depiction of type-labeled syntax code for syntax description in this document</name>
          <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
ExampleSyntaxCode( ) {                                        |
       operations                                             |
       syntax_element                                         | u(n)
}                                                             |
]]></artwork>
        </figure>
      </section>
      <section anchor="syntax-func">
        <name>Syntax functions and descriptors</name>
        <t>The functions presented in this document are used in the syntacticaldescription. These functions are expressed in terms of the value ofa bitstream pointer that indicates the position of the next bit tobe read by the decoding process from the bitstream.</t>
        <section anchor="bytealigned">
          <name>byte_aligned()</name>
          <ul spacing="normal">
            <li>
              <t>If the current position in the bitstream is on a byte boundary, i.e., the next bit in the bitstream is the first bit in a byte,   the return value of byte_aligned() is equal to TRUE.</t>
            </li>
            <li>
              <t>Otherwise, the return value of byte_aligned() is equal to FALSE.</t>
            </li>
          </ul>
        </section>
        <section anchor="moredataintile">
          <name>more_data_in_tile()</name>
          <ul spacing="normal">
            <li>
              <t>If the current position in the tileIdx-th tile() syntax structure is less than TileSize[ tileIdx ] in bytes from the beginning of the tile_header() syntax structure of the tileIdx-th tile, the return value of more_data_in_tile() is equal to TURE.</t>
            </li>
            <li>
              <t>Otherwise, the return value of more_data_in_tile() is equal to FALSE.</t>
            </li>
          </ul>
        </section>
        <section anchor="nextbitsn">
          <name>next_bits(n)</name>
          <t>This function provides the next bits in the bitstream for comparison purposes, without advancing the bitstream pointer. Provides a lookat the next n bits in the bitstream with n being its argument.</t>
        </section>
        <section anchor="readbitsn">
          <name>read_bits(n)</name>
          <t>This function indicate to read the next n bits from the bitstreamand advances the bitstream pointer by n bit positions. When n isequal to 0, read_bits(n) is specified to return a value equal to 0and to not advance the bitstream pointer.</t>
        </section>
        <section anchor="syntax-process-func">
          <name>Syntax element processing functions</name>
          <ul spacing="normal">
            <li>
              <t>b(8): byte having any pattern of bit string (8 bits). The parsing process for this descriptor is specified by the return value of the function read_bits(8).</t>
            </li>
            <li>
              <t>f(n): fixed-pattern bit string using n bits written (from left to right) with the left bit first. The parsing process for this descriptor is specified by the return value of the function read_bits(n).</t>
            </li>
            <li>
              <t>u(n): unsigned integer using n bits. The parsing process for this descriptor is specified by the return value of the function read_bits(n) interpreted as a binary representation of an unsigned integer with most significant bit written first.</t>
            </li>
            <li>
              <t>h(v): variable-length entropy coded syntax element with the left bit first. The parsing process for this descriptor is specified in <xref target="process_h"/>.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="list-of-syntax">
        <name>List of syntax</name>
        <section anchor="frame-data">
          <name>Frame Data</name>
          <figure anchor="syntaxcode-frame_data">
            <name>frame_data() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
frame_data(){                                                 |
    frame_header()                                            |
    for(tileIdx = 0; tileIdx < NumTiles; tileIdx++){          |
        tile_size_minus1[tileIdx]                             | u(32)
        tile(tileIdx)                                         |
    }                                                         |
    metadata()                                                |
    filler_data()                                             |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_size_minus1[tileIdx]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 indicates the size in bytes of tileIdx-th tile data (i.e., tile(tileIdx)) in raster order in a frame.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>The variable TileSize[ tileIdx ] is set equal to tile_size_minus1[ tildIdx ] + 1</t>
            </li>
          </ul>
        </section>
        <section anchor="frame-header-syntax">
          <name>Frame header syntax</name>
          <figure anchor="syntaxcode-frame_header">
            <name>frame_header() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
frame_header(){                                               |
  frame_header_size                                           | u(16)
  profile_idc                                                 | u(8)
  level_idc                                                   | u(8)
  reserved_zero_8bits                                         | u(8)
  frame_width_minus1                                          | u(32)
  frame_height_minus1                                         | u(32)
  chroma_format_idc                                           | u(4)
  bit_depth_minus8                                            | u(4)
  capture_time_distance                                       | u(8)
  reserved_zero_16bits                                        | u(16)
  color_description_present_flag                              | u(1)
  if(color_description_present_flag){                         |
    color_primaries                                           | u(8)
    transfer_characteristics                                  | u(8)
    matrix_coefficients                                       | u(8)
  }                                                           |
  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>frame_header_size</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates the size of the frame header in bytes.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>profile_idc</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates a profile to which the Frame Data stream conforms to as specified in <xref target="appendix-profile"/>. Bitstreams shall not contain values of profiles_idc other than those specified in <xref target="appendix-profile"/>. 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 Frame Data stream conforms to as specified in <xref target="appendix-profile"/>. Bitstreams shall not contain values of level_idc other than those specified in <xref target="appendix-profile"/>. Other values of level_idc are reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_8bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>shall be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile"/>. MUST ignore Frame Data with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>frame_width_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the width of frame in units of luma samples. frame_width_minus1 plus 1 MUST be as multiple of 2 when chroma_format_idc has a value of 2.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>frame_height_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the height of frame in units of luma samples.</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_minus1 + 1</t>
                </li>
                <li>
                  <t>FrameHeightInSamplesY = frame_height_minus1 + 1</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 in the range of 2 to 4, inclusive. Other values of chroma_format_idc are reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>bit_depth_minus8</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the bit depth of the samples. The variables BitDepth and QpBdOffset are derived as follows:</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <ul spacing="normal">
                    <li>
                      <t>BitDepth   = bit_depth_minus8 + 8</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <ul spacing="normal">
                    <li>
                      <t>QpBdOffset = bit_depth_minus8 * 6</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>bit_depth_minus8</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be in the range of 2 to 8, inclusive. Other values of bit_depth_minus8 are reserved for future use.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>capture_time_distance</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>indicates time difference between the capture time of the previous frame and the current frame if there has been any frame preceding this frame.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_16bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_16bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile"/> MUST ignore Frame Data with values of reserved_zero_16bits 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="ISO23091-2"/>. 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="ISO23091-2"/>. 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 semnatics of MatrixCoefficients as specified in <xref target="ISO23091-2"/>. 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>use_q_matrix</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>equal to 1 specifies that the quantization matrices are present. use_q_matrix equal to 0 specifies that the quantization matrices are not present.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_8bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile"/> MUST ignore Frame Data with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
        </section>
        <section anchor="quantization-matrix-syntax">
          <name>Quantization matrix syntax</name>
          <figure anchor="syntaxcode-quantization_matrix">
            <name>quantization_matrix() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
quantization_matrix(){                                        |
  for(cIdx = 0; cIdx < NumComp; cIdx++){                      |
    for(y = 0; y < 8; y++){                                   |
      for(x = 0; x < 8; x++){                                 |
        q_matrix_minus1[cIdx][x][y]                           | u(8)
      }                                                       |
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>q_matrix_minus1[cIdx][x0][y0]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies a scaling value in the quantization matrices. When q_matrix_minus1[cIdx][x0][y0] is not present, it is inferred to be equal to 15. 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.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>The quantization matrix, QMatrix[cIdx][x0][y0], is derived as follows:</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>QMatrix[cIdx][x0][y0] = q_matrix_minus1[cIdx][x0][y0] + 1</t>
            </li>
          </ul>
        </section>
        <section anchor="tile-info-syntax">
          <name>Tile info syntax</name>
          <figure anchor="syntaxcode-tile_info">
            <name>tile_info() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
tile_info(){                                                  |
  tile_width_in_mbs_minus1                                    | u(28)
  tile_height_in_mbs_minus1                                   | u(28)
  startMb=0                                                   |
  for(i = 0; startMb < FrameWidthInMbsY; i++){                |
    ColStarts[i] = startMb * MbWidth                          |
    startMb += tile_width_in_mbs_minus1 + 1                   |
  }                                                           |
  ColStarts[i] = FrameWidthInMbsY*MbWidth                     |
  TileCols = i                                                |
  startMb = 0                                                 |
  for(i = 0; startMb < FrameHeightMbsY; i++){                 |
    RowStarts[i] = startMb * MbHeight                         |
    startMb += tile_height_in_mbs_minus1 + 1                  |
  }                                                           |
  RowStarts[i] = FrameHeightMbsY*MbHeight                     |
  TileRows = i                                                |
  NumTiles = TileCols * TileRows                              |
  tile_size_present_in_fh_flag                                | u(1)
  if(tile_size_present_in_fh_flag){                           |
    for(tileIdx = 0; tileIdx < NumTiles; tileIdx++){          |
      tile_size_in_fh_minus1[tileIdx]                         | u(32)
    }                                                         |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>tile_width_in_mbs_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 specifies the width of a tile in units of MBs.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_height_in_mbs_minus1</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 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_minus1[tileIdx] is present in Frame header. tile_size_present_in_fh_flag equal to 0 specifies that tile_size_in_fh_minus1[tileIdx] is not present in Frame header.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_size_in_fh_minus1[tileIdx]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>plus 1 indicates the size in bytes of tileIdx-th tile data in raster order in a frame. The value of tile_size_in_fh_minus1[tileIdx] MUST have the same value with tile_size_minus[tileIdx]. When it is not present, the value of tile_size_in_fh_minus1[tileIdx] is inferred to be equal to tile_size_minus1[tileIdx].</t>
            </li>
          </ul>
        </section>
        <section anchor="metadata-syntax">
          <name>Metadata syntax</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)                       |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>metadata_size</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specifies the size of metadata in current Frame Data.</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-data-syntax">
          <name>Filler data syntax</name>
          <figure anchor="syntaxcode-fillerdata">
            <name>filler_data() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
filler_data(){                                                |
  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-syntax">
          <name>Tile syntax</name>
          <figure anchor="syntaxcode-tile">
            <name>tile() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
tile(tileIdx){                                                |
  tile_header()                                               |
  for(i = 0; i < NumComp; 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-syntax">
          <name>Tile header syntax</name>
          <figure anchor="syntaxcode-tileheader">
            <name>tile_header() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
tile_header(){                                                |
  tile_header_size                                            | u(16)
  tile_index                                                  | u(16)
  for(i = 0; i < NumComp; i++){                               |
    tile_data_size_minus1[i]                                  | u(32)
  }                                                           |
  for(i = 0; i < NumComp; 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_minus1[i] plus 1</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</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>tile_qp[i]</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>specify the quantization parameter value for i-th color component. The array index i specifies an indicator for the color component; when chroma_format_idc is equal to 2 or 3, 0 for Y, 1 for Cb and 2 for Cr. Qp[i] to be used for the MBs in the tile are derived as follows</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <ul spacing="normal">
                    <li>
                      <t>Qp[i] = tile_qp[i] - QpBdOffset</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <ul spacing="normal">
                    <li>
                      <t>Qp[i] MUST be in the range of -QpBdOffset to 51, inclusive.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>reserved_zero_8bits</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be equal to 0 in bitstreams conforming to this version of document. Values of reserved_zero_8bits greater than 0 are reserved for future use. Decoders conforming to a profile specified in <xref target="appendix-profile"/> MUST ignore Frame Data with values of reserved_zero_8bits greater than 0.</t>
            </li>
          </ul>
        </section>
        <section anchor="tile-data-syntax">
          <name>Tile data syntax</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-syntax">
          <name>Macroblock layer syntax</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-syntax">
          <name>AC coefficient coding syntax</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>
        </section>
        <section anchor="byte-alignment-syntax">
          <name>Byte alignment syntax</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 Frame Data. 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 Frame Data is parsed to obtain the parsed syntax structures.</t>
        </li>
        <li>
          <t>The processes in <xref target="mb-decoding"/>, <xref target="block-recon"/> and <xref target="scaling-transform"/> specify the decoding processes using syntax elements in all syntax structures. It is the requirement of bitstream conformance that the coded tiles of the frame MUST contain tile data for every MB of the frame, such that the division of the frame into tiles and the division of the tiles into MBs each forms a partitioning of the frame.</t>
        </li>
        <li>
          <t>After all the tiles in the current frame have been decoded, the decoded frame is cropped using the cropping rectangle if FrameWidthInSamplesY is not equal to FrameWidthInMbY * MbWidth or FrameHeightInSamplesY is not equal to FrameHeightInMbY * MbHeight.</t>
        </li>
        <li>
          <t>The cropping rectangle, which specifies the samples of a frame that are output, is derived as follows.</t>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <ul spacing="normal">
            <li>
              <t>The cropping rectangle contains the luma samples with horizontal frame coordinates from 0 to FrameWidthInSampleY - 1 and vertical frame coordinates from 0 to FrameHeightInSampleY - 1, inclusive.</t>
            </li>
          </ul>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <ul spacing="normal">
            <li>
              <t>The cropping rectangle contains the two chroma arrays having frame coordinates (x//SubWidthC, y//SubHeightC), where (x,y) are the frame coordinates of the specified luma samples.</t>
            </li>
          </ul>
        </li>
      </ul>
      <section anchor="mb-decoding">
        <name>MB decoding process</name>
        <t>This process is invoked for each MB.</t>
        <t>Input to this process is a luma location (xMb, yMb) specifying the top-left sample of the current luma MB relative to the top left luma sample of the current frame.
Outputs of this process are the reconstructed samples of all the NumComp color components (when chorma_format_idc is equal to 2 or 3, Y, Cb, and Cr) for the current MB.</t>
        <t>The following steps applies:</t>
        <ul spacing="normal">
          <li>
            <t>Let recSamples[0] be a (MbWidth)x(MbHeight) array of the reconstructed samples of the first color component (when chroma_format_idc is equal to 2 or 3, Y).</t>
          </li>
          <li>
            <t>The block reconstruction process as specified in <xref target="block-recon"/> is invoked with the luma location (xMb, yMb), the variable nBlkW set equal to MbWidth, the variable nBlkH set equal to MbHeight, the variable cIdx set equal to 0, and the (MbWidth)x(MbHeight) array recSamples[0] as inputs, the output is a modified version of the (MbWidth)x(MbHeight) array resSamples[0], which is the reconstructed samples of the first color component for the current MB.</t>
          </li>
          <li>
            <t>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>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>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>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 == 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 == 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 componnet of the current block, and</t>
          </li>
          <li>
            <t>an (nBlkW)x(nBlkH) array recSamples of reconstructed block.</t>
          </li>
        </ul>
        <t>Output of this process is a modified version of the (nBlkW)x(nBlkH) array recSamples of reconstructed samples.</t>
        <t>The following applies:</t>
        <ul spacing="normal">
          <li>
            <t>The variables numBlkX and numBlkY are derived as follows:</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <ul spacing="normal">
                  <li>
                    <t>numBlkX = nBlkW // TrSize</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <ul spacing="normal">
                  <li>
                    <t>numBlkY = nBlkH // TrSize</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <ul spacing="normal">
          <li>
            <t>For yIdx = 0..numBlkY - 1, the following applies:</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <ul spacing="normal">
                  <li>
                    <t>For xIdx = 0..numBlkX - 1, the following applies:</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <t>The variables xBlk and yBlk are derived as follows:</t>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <ul spacing="normal">
                  <li>
                    <t>xBlk = xMb // (cIdx==0? 1: SubWidthC) + xIdx*TrSize</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <ul spacing="normal">
                  <li>
                    <t>yBlk = yMb // (cIdx==0? 1: SubHeightC) + yIdx*TrSize</t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <ul spacing="normal">
          <li>
            <t>The scaling and transformation process as specified in <xref target="scaling-transform"/> is invoked with the location (xBlk, yBlk), the variable cIdx set equal to cIdx, the transform width nBlkW set equal to TrSize and the transform height nBlkH set equal to TrSize as inputs, and the output is a (TrSize)x(TrSize) array r of reconstructed block.</t>
          </li>
          <li>
            <t>The (TrSize)x(TrSize) array recSamples is modified as follows:</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <t>recSamples[(xIdx * TrSize) + i, (yIdx * TrSize) + j] = r[i,j], with i=0..TrSize-1, j=0..TrSize-1</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="scaling-transform">
        <name>Scaling and transformation process</name>
        <t>Inputs to this process are:</t>
        <ul spacing="normal">
          <li>
            <t>a location (xBlkY, yBlkY) of the current color component specifying the top-left sample of the current block relative to the top-left sample of the current frame,</t>
          </li>
          <li>
            <t>a variable cIdx specifying the color component of the current block,</t>
          </li>
          <li>
            <t>a variable nBlkW specifying the width of the current block, and</t>
          </li>
          <li>
            <t>a variable nBlkH specifying the height of the current block.</t>
          </li>
        </ul>
        <t>Output of this process is the (nBlkW)x(nBlkH) array of reconstructed samples r with elements r[x][y].</t>
        <t>The quantization parameter qP is derived as follows:</t>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <t>qP = Qp[cIdx] + QpBdOffset</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>The (nBlKW)x(nBlkH) array of reconstructed samples r is derived as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The scaling process for transform coefficients as specified in <xref target="scaling-process"/> is invoked with the block location (xBlkY, yBlkY), the block width nBlkW and the block height nBlkH, the color component variable cIdx, and the quantization parameter qP as inputs, and the output is an (nBlkW)x(nBlkH) array of scaled transform coefficients d.</t>
          </li>
          <li>
            <t>The transformation process for scaled transform coefficients as specified in <xref target="process-coeff"/> is invoked with the block location (xBlkY, yBlkY), the block width nBlkW and the block height nBlkH, the color component variable cIdx, and the (nBlkW)x(nBlkH) array of scaled transform coefficients d as inputs, and the output is an (nBlkW)x(nBlkH) array of reconstructed samples r.</t>
          </li>
          <li>
            <t>The variable bdShift is derived as follows:</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <t>bdShift = 20 - BitDepth</t>
              </li>
            </ul>
          </li>
        </ul>
        <ul spacing="normal">
          <li>
            <t>The reconstructed sample values r[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 are modified as follows:</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul empty="true">
              <li>
                <t>r[x][y] = clip(0, (1 &lt;&lt; BitDepth)-1, ((r[x][y]+(1 &lt;&lt; (bdShift-1)))&gt;&gt;bdShift) + (1 &lt;&lt; (BitDepth-1)))</t>
              </li>
            </ul>
          </li>
        </ul>
        <section anchor="scaling-process">
          <name>Scaling process for transform coefficients</name>
          <t>Inputs to this process are:</t>
          <ul spacing="normal">
            <li>
              <t>a location (xBlkY, yBlkY) of the current color component specifying the top-left sample of the current block relative to the top-left sample of the current frame,</t>
            </li>
            <li>
              <t>a variable nBlkW specifying the width of the current block,</t>
            </li>
            <li>
              <t>a variable nBlkH specifying the height of the current block,</t>
            </li>
            <li>
              <t>a variable cIdx specifying the color component of the current block, and</t>
            </li>
            <li>
              <t>a variable qP specifying the quantization parameter.</t>
            </li>
          </ul>
          <t>Output of this process is the (nBlkW)x(nBlkH) array d of scaled transform coefficients with elements d[x][y].</t>
          <t>The variable bdShift is derived as follows:</t>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <t>bdShift = BitDepth + ((Log2(nBlkW) + Log2(nBlkH)) // 2) - 5</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>The list levelScale[] is specified as follows:</t>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <t>levelScale[k] = {40, 45, 51, 57, 64, 71} with k = 0..5.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>For the derivation of the scaled transform coefficients d[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1, the following applies:</t>
          <ul spacing="normal">
            <li>
              <t>The scaled transform coefficient d[x][y] is derived as follows:</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul empty="true">
                <li>
                  <t>d[x][y] = clip(-32768, 32767, ((TransCoeff[cIdx][xBlkY][yBlkY] * QMatrix[cIdx][x][y] * levelScale[qP % 6] &lt;&lt; (qP//6)) + (1 &lt;&lt; (bdShift-1)) &gt;&gt; bdShift))</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="process-coeff">
          <name>Process for scaled transform coefficients</name>
          <section anchor="general-1">
            <name>General</name>
            <t>Inputs to this process are:</t>
            <ul spacing="normal">
              <li>
                <t>a location (xBlkY, yBlkY) of the current color component specifying the top-left sample of the current block relative to the top-left sample of the current frame,</t>
              </li>
              <li>
                <t>a variable nBlkW specifying the width of the current block,</t>
              </li>
              <li>
                <t>a variable nBlkH specifying the height of the current block, and</t>
              </li>
              <li>
                <t>an (nBlkW)x(nBlkH) array d of scaled transform coefficients with elements d[ x ][ y ].</t>
              </li>
            </ul>
            <t>Output of this process is the (nBlkW)x(nBlkH) array r of reconstructed samples with elements r[x][y].</t>
            <t>The (nBlkW)x(nBlkH) array r of reconstructed samples is derived as follows:</t>
            <ul spacing="normal">
              <li>
                <t>Each (vertical) column of scaled transform coefficients d[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 is transformed to e[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 by invoking the one- dimensional transformation process as specified in <xref target="transform-process"/> for each column x = 0..nBlkW - 1 with the size of the transform block nBlkH, and the list d[x][y] with y = 0..nBlkH - 1 as inputs, and the output is the list e[x][y] with y = 0..nBlkH - 1.</t>
              </li>
              <li>
                <t>The following applies:</t>
              </li>
            </ul>
            <ul empty="true">
              <li>
                <ul empty="true">
                  <li>
                    <t>g[x][y] = (e[x][y] + 64) &gt;&gt; 7</t>
                  </li>
                </ul>
              </li>
            </ul>
            <ul spacing="normal">
              <li>
                <t>Each (horizontal) row of the resulting array g[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 is transformed to r[x][y] with x = 0..nBlkW - 1, y = 0..nBlkH - 1 by invoking the one-dimensional transformation process as specified in <xref target="transform-process"/> for each row y = 0..nBlkH - 1 with the size of the transform block nBlkW, and the list g[x][y] with x = 0..nBlkW - 1 as inputs, and the output is the list r[x][y] with x = 0..nBlkW - 1.</t>
              </li>
            </ul>
          </section>
          <section anchor="transform-process">
            <name>Transformation process</name>
            <t>Inputs to this process are:</t>
            <ul spacing="normal">
              <li>
                <t>a variable nTbS specifying the sample size of scaled transform coefficients, and</t>
              </li>
              <li>
                <t>a list of scaled transform coefficients x with elements x[j], with j = 0..(nTbS - 1).</t>
              </li>
              <li>
                <t>Output of this process is the list of transformed samples y with elements y[i], with i = 0..(nTbS - 1).</t>
              </li>
              <li>
                <t>The transformation matrix derivation process as specified in <xref target="matrix-process"/>. invoked with the transform size nTbS as input, and the transformation matrix transMatrix as output.</t>
              </li>
              <li>
                <t>The list of transformed samples y[i] with i = 0..(nTbS - 1) is derived as follows:</t>
              </li>
            </ul>
            <ul empty="true">
              <li>
                <ul empty="true">
                  <li>
                    <t>y[i] = sum(j = 0, nTbS - 1, transMatrix[i][j] * x[j])</t>
                  </li>
                </ul>
              </li>
            </ul>
          </section>
          <section anchor="matrix-process">
            <name>Transformation matrix derivation process</name>
            <t>Input to this process is a variable nTbS specifying the horizontal sample size of scaled transform coefficients.</t>
            <t>Output of this process is the transformation matrix transMatrix.</t>
            <t>The transformation matrix transMatrix is derived based on nTbs as follows:</t>
            <ul spacing="normal">
              <li>
                <t>If nTbS is equal to 8, the following applies:</t>
              </li>
            </ul>
            <figure anchor="transmatrix">
              <name>Transform matrix for nTbS == 8</name>
              <artwork><![CDATA[
transMatrix[m][n] =
   {
    {  64,  64,  64,  64,  64,  64,  64,  64 }
    {  89,  75,  50,  18, -18, -50, -75, -89 }
    {  84,  35, -35, -84, -84, -35,  35,  84 }
    {  75, -18, -89, -50,  50,  89,  18, -75 }
    {  64, -64, -64,  64,  64, -64, -64,  64 }
    {  50, -89,  18,  75, -75, -18,  89, -50 }
    {  35, -84,  84, -35, -35,  84, -84,  35 }
    {  18, -50,  75, -89,  89, -75,  50, -18 }
   }
]]></artwork>
            </figure>
          </section>
        </section>
      </section>
    </section>
    <section anchor="parsing-process">
      <name>Parsing process</name>
      <section anchor="process_h">
        <name>Process for syntax element type h(v)</name>
        <t>This process is invoked for the parsing of syntax elements with descriptor h(v) in <xref target="mb-syntax"/> and <xref target="ac-syntax"/>.</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="security-considerations">
      <name>Security considerations</name>
      <t>APV decoder should take appropriate security considerations into account. A decoder MUST be robust against any non-compliant or malicious payloads.</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-profile">
        <name>Profiles and levels</name>
        <section anchor="overview-of-profiles-and-levels">
          <name>Overview of profiles and levels</name>
          <t>Profiles and levels specify restrictions on the bitstreams and hence limits on the capabilities needed to decode the bitstreams. Profiles and levels may also be used to indicate interoperability points between individual decoder implementations.</t>
          <ul empty="true">
            <li>
              <t>NOTE: This document does not include individually selectable "options" at the decoder, as this would increase interoperability difficulties.
Each profile specifies a subset of algorithmic features and limits that MUST be supported by all decoders conforming to that profile.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>NOTE: Encoders are not required to make use of any particular subset of features supported in a profile.</t>
            </li>
          </ul>
          <t>Each level specifies a set of limits on the values that may be taken by the syntax elements of this document. The same set of level definitions is used with all profiles, but individual implementations may support a different level for each supported profile. For any given profile, a level generally corresponds to a particular decoder processing load and memory capability.</t>
        </section>
        <section anchor="requirements-on-video-decoder-capability">
          <name>Requirements on video decoder capability</name>
          <t>Capabilities of video decoders conforming to this document are specified in terms of the ability to decode video streams conforming to the constraints of profiles and levels specified in this section. When expressing the capabilities of a decoder for a specified profile, the level supported for that profile should also be expressed.</t>
          <t>Specific values are specified in this section for the syntax elements profile_idc and level_idc. All other values of profile_idc and level_idc are reserved for future use.</t>
          <ul empty="true">
            <li>
              <t>NOTE: Decoders must 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 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 Frame Datas that are specified are constraints for Frame Datas that are activated when the bitstream is decoded.</t>
            <section anchor="profile">
              <name>422-10 profile</name>
              <t>Conformance of a bitstream to the 422-10 profile is indicated by profile_idc equal to 33.</t>
              <t>Bitstreams 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>
              </ul>
              <t>The level constraints specified for the 422-10 profile in <xref target="levels"/> MUST be fulfilled. Decoders conforming to the 422-10 profile at a specific level (identified by a specific value of L) MUST be capable of decoding all bitstreams for which all of the following conditions apply:</t>
              <ul spacing="normal">
                <li>
                  <t>The bitstream is indicated to conform to the 422-10 profile.</t>
                </li>
                <li>
                  <t>The bitstream 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>
              </ul>
            </section>
            <section anchor="profile-1">
              <name>422-12 profile</name>
              <t>Conformance of a bitstream to the 422-12 profile is indicated by profile_idc equal to 44.</t>
              <t>Bitstreams 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>
              </ul>
              <t>The level constraints specified for the 422-12 profile in <xref target="levels"/> MUST be fulfilled. Decoders conforming to the 422-12 profile at a specific level (identified by a specific value of L) MUST be capable of decoding all bitstreams for which all of the following conditions apply:</t>
              <ul spacing="normal">
                <li>
                  <t>The bitstream is indicated to conform to the 422-12 profile or the 422-10 profile.</t>
                </li>
                <li>
                  <t>The bitstream 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>
              </ul>
            </section>
            <section anchor="profile-2">
              <name>444-10 profile</name>
              <t>Conformance of a bitstream to the 444-10 profile is indicated by profile_idc equal to 55.</t>
              <t>Bitstreams 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>
              </ul>
              <t>The level constraints specified for the 444-10 profile in <xref target="levels"/> MUST be fulfilled. Decoders conforming to the 444-10 profile at a specific level (identified by a specific value of L) MUST be capable of decoding all bitstreams for which all of the following conditions apply:</t>
              <ul spacing="normal">
                <li>
                  <t>The bitstream is indicated to conform to the 444-10 profile or the 422-10 profile.</t>
                </li>
                <li>
                  <t>The bitstream 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>
              </ul>
            </section>
            <section anchor="profile-3">
              <name>444-12 profile</name>
              <t>Conformance of a bitstream to the 444-12 profile is indicated by profile_idc equal to 66.</t>
              <t>Bitstreams 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>
              </ul>
              <t>The level constraints specified for the 444-12 profile in <xref target="levels"/> MUST be fulfilled. Decoders conforming to the 444-12 profile at a specific level (identified by a specific value of L) MUST be capable of decoding all bitstreams for which all of the following conditions apply:</t>
              <ul spacing="normal">
                <li>
                  <t>The bitstream 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 bitstream 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>
              </ul>
            </section>
            <section anchor="profile-4">
              <name>4444-10 profile</name>
              <t>Conformance of a bitstream to the 4444-10 profile is indicated by profile_idc equal to 77.</t>
              <t>Bitstreams 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>
              </ul>
              <t>The level constraints specified for the 4444-10 profile in <xref target="levels"/> MUST be fulfilled. Decoders conforming to the 4444-10 profile at a specific level (identified by a specific value of L) MUST be capable of decoding all bitstreams for which all of the following conditions apply:</t>
              <ul spacing="normal">
                <li>
                  <t>The bitstream is indicated to conform to the 4444-10 profile, the 444-10 profile or the 422-10 profile.</t>
                </li>
                <li>
                  <t>The bitstream 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>
              </ul>
            </section>
            <section anchor="profile-5">
              <name>4444-12 profile</name>
              <t>Conformance of a bitstream to the 4444-12 profile is indicated by profile_idc equal to 88.</t>
              <t>Bitstreams 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>
              </ul>
              <t>The level constraints specified for the 4444-12 profile in <xref target="levels"/> MUST be fulfilled. Decoders conforming to the 4444-12 profile at a specific level (identified by a specific value of L) MUST be capable of decoding all bitstreams for which all of the following conditions apply:</t>
              <ul spacing="normal">
                <li>
                  <t>The bitstream 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 bitstream 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>
              </ul>
            </section>
          </section>
        </section>
        <section anchor="levels">
          <name>Levels</name>
          <section anchor="general-level-limits">
            <name>General level limits</name>
            <t>For purposes of comparison of level capabilities, a particular level is considered to be a lower level than some other level when the value of the level_idc of the particular level is less than that of the other level.</t>
            <ul spacing="normal">
              <li>
                <t>FrameSizeInSamplesY MUST be less than or equal to MaxLumaSr, where MaxLumaSr is specified in Table 3.</t>
              </li>
              <li>
                <t>The luma sample rate (luma samples per second) MUST be less than or equal to MaxLumaSr.</t>
              </li>
              <li>
                <t>The coded data rate (bits per second) MUST be less than or equal to MaxCodedDr.</t>
              </li>
              <li>
                <t>The value of tile_width_in_mbs_minus1 MUST be greater than or equal to 15.</t>
              </li>
              <li>
                <t>The value of tile_height_in_mbs_minus1 MUST be greater than or equal to 7.</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>
            <t><xref target="_table-levels"/> specifies the limits for each level.
A level to which a bitstream conforms is indicated by the syntax element level_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 (bits/sec)</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">1</td>
                  <td align="right">70,778,880</td>
                  <td align="right">200,400,000</td>
                </tr>
                <tr>
                  <td align="left">1.1</td>
                  <td align="right">141,557,760</td>
                  <td align="right">400,800,000</td>
                </tr>
                <tr>
                  <td align="left">1.2</td>
                  <td align="right">141,557,760</td>
                  <td align="right">601,200,000</td>
                </tr>
                <tr>
                  <td align="left">2</td>
                  <td align="right">267,386,880</td>
                  <td align="right">780,000,000</td>
                </tr>
                <tr>
                  <td align="left">2.1</td>
                  <td align="right">534,773,760</td>
                  <td align="right">1,560,000,000</td>
                </tr>
                <tr>
                  <td align="left">2.2</td>
                  <td align="right">534,773,760</td>
                  <td align="right">2,340,000,000</td>
                </tr>
                <tr>
                  <td align="left">3</td>
                  <td align="right">1,069,547,520</td>
                  <td align="right">3,324,000,000</td>
                </tr>
                <tr>
                  <td align="left">3.1</td>
                  <td align="right">2,139,095,040</td>
                  <td align="right">6,648,000,000</td>
                </tr>
                <tr>
                  <td align="left">3.2</td>
                  <td align="right">2,139,095,040</td>
                  <td align="right">9,972,000,000</td>
                </tr>
                <tr>
                  <td align="left">4</td>
                  <td align="right">4,278,190,080</td>
                  <td align="right">13,296,000,000</td>
                </tr>
                <tr>
                  <td align="left">4.1</td>
                  <td align="right">8,556,380,160</td>
                  <td align="right">26,592,000,000</td>
                </tr>
                <tr>
                  <td align="left">4.2</td>
                  <td align="right">8,556,380,160</td>
                  <td align="right">39,888,000,000</td>
                </tr>
                <tr>
                  <td align="left">5</td>
                  <td align="right">17,112,760,320</td>
                  <td align="right">53,184,000,000</td>
                </tr>
                <tr>
                  <td align="left">5.1</td>
                  <td align="right">34,225,520,640</td>
                  <td align="right">106,368,000,000</td>
                </tr>
                <tr>
                  <td align="left">5.2</td>
                  <td align="right">34,225,520,640</td>
                  <td align="right">159,552,000,000</td>
                </tr>
              </tbody>
            </table>
          </section>
        </section>
      </section>
      <section anchor="appendix-rawbitstream">
        <name>Raw bitstream format</name>
        <t>### Raw bitstream frame data syntax and semantics</t>
        <figure anchor="syntax-rawbitstream">
          <name>raw_bitstream_frame_data() syntax code</name>
          <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
raw_bitstream_frame_data(){                                   |
    frame_data_size                                           | u(32)
    frame_data()                                              |
}                                                             |
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>frame_data_size</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>indicates the length of the Frame Data, in bytes, within the frame_data( ) syntax structure.</t>
          </li>
        </ul>
      </section>
      <section anchor="appendix-metadata">
        <name>Metadata information</name>
        <section anchor="metadata-payload-syntax">
          <name>Metadata payload syntax</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="filler-metadata">
          <name>Filler metadata</name>
          <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
metadata_filler(payloadSize){                                 |
  for(i = 0; i < payloadSize; i++){                           |
    ff_byte                                                   | f(8)
  }                                                           |
}                                                             |
]]></artwork>
          <ul spacing="normal">
            <li>
              <t>ff_byte</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>is a byte equal to 0xFF.</t>
            </li>
          </ul>
        </section>
        <section anchor="recommendation-itu-t-t35-metadata">
          <name>Recommendation ITU-T T.35 metadata</name>
          <t>This metadata contains information registered as specified in <xref target="ITUT-T35"/>.</t>
          <figure anchor="syntax-metat35">
            <name>metadata_itu_t_t35() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
metadata_itu_t_t35(payloadSize){                              |
  itu_t_t35_country_code                                      | b(8)
  readSize = payloadSize - 1                                  |
                                                              |
  if(itu_t_t35_country_code == 0xFF){                         |
    itu_t_t35_country_code_extension                          | b(8)
    readSize--                                                |
  }                                                           |
                                                              |
  while (readSize > 0){                                       |
    itu_t_t35_payload                                         | b(8)
    readSize--                                                |
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>itu_t_t35_country_code</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a byte having the semantics of country code as specified in Annex A of <xref target="ITUT-T35"/>.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>itu_t_t35_country_code_extension</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a byte having the semantics of country code as specified in Annex B of <xref target="ITUT-T35"/>.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>itu_t_t35_payload</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be bytes having the semantics of data registered as specified in <xref target="ITUT-T35"/>.</t>
            </li>
          </ul>
          <t>The terminal provider code and terminal provider oriented code as speicified in <xref target="ITUT-T35"/> shall be contained in the first one or more bytes of the itu_t_t35_payload. Any remaining bytes in itu_t_t35_payload data shall be data having syntax and semantics as specified by the entity identified by the <xref target="ITUT-T35"/> country code and terminal provider code.</t>
        </section>
        <section anchor="mastering-display-colour-volume-metadata">
          <name>Mastering display colour 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-syntax-and-semantics">
          <name>User defined metadata syntax and semantics</name>
          <t>This metadata has user data identified by a universal unique identifier as specifies in <xref target="ISO11578"/>, the contents of which are not specifieid in this document.</t>
          <figure anchor="syntax-metauserdef">
            <name>metadata_user_defined() syntax code</name>
            <artwork><![CDATA[
syntax code                                                 | type
------------------------------------------------------------|-----
metadata_user_defined(payloadSize){                         |
  uuid                                                      | u(128)
  for(i = 0; i < (payloadSize - 16); i++)                   |
    user_defined_data_payload                               | b(8)
}                                                           |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>uuid</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a 128-bit value specified as a generated UUID according to the procedures of <xref target="ISO11578"/> Annex A.</t>
            </li>
          </ul>
          <ul spacing="normal">
            <li>
              <t>user_defined_data_payload</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>MUST be a byte having user defined syntax and semantics as specified by the UUID generator.</t>
            </li>
          </ul>
        </section>
        <section anchor="undefined-metadata-syntax-and-semantics">
          <name>Undefined metadata syntax and semantics</name>
          <figure anchor="syntax-metaund">
            <name>metadata_undefined() syntax code</name>
            <artwork><![CDATA[
syntax code                                                   | type
--------------------------------------------------------------|-----
metadata_undefined(payloadSize){                              |
  for(i = 0; i < payloadSize; i++){                           |
    undefined_metadata_payload_byte                           | b(8)
  }                                                           |
}                                                             |
]]></artwork>
          </figure>
          <ul spacing="normal">
            <li>
              <t>undefined_metadata_payload_byte</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>is a byte reserved for future case.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="ISO23091-2" target="https://www.iso.org/standard/81546.html">
        <front>
          <title>Recommendation ITU-T H.273 | ISO/IEC 23091-2, Information technology - Coding-independent code points - Part 2 Video</title>
          <author>
            <organization/>
          </author>
          <date year="2021" month="October"/>
        </front>
      </reference>
      <reference anchor="ISO9899" target="https://www.iso.org/standard/74528.html">
        <front>
          <title>ISO/IEC 9899:2018, Information technology - Programming languages - C</title>
          <author>
            <organization/>
          </author>
          <date year="2018" month="June"/>
        </front>
      </reference>
      <reference anchor="ITUT-T35" target="https://www.itu.int/rec/T-REC-T.35">
        <front>
          <title>Recommendation ITU-T T.35, Procedure for the allocation of ITU-T defined codes for non-standard facilities</title>
          <author>
            <organization/>
          </author>
          <date year="2000" month="February"/>
        </front>
      </reference>
      <reference anchor="CEA-861.3">
        <front>
          <title>CEA-861.3, HDR Static Metadata Extension</title>
          <author>
            <organization/>
          </author>
          <date year="2015" month="January"/>
        </front>
      </reference>
      <reference anchor="ISO11578" target="https://www.iso.org/standard/2229.html">
        <front>
          <title>ISO/IEC 11578:1996, Information technology - Open Systems Interconnection - Remote Procedure Cal1 (RPC)</title>
          <author>
            <organization/>
          </author>
          <date year="1996" month="December"/>
        </front>
      </reference>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner"/>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
    </references>
  </back>
  <!-- ##markdown-source:
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
4g0kW+Q8dVxFbpeQSOKmwmyezOKUPb+4SeknYcp7sZIrLbeh524nyFtBUr1n
GSgfqS/R5hKEfBpPA+lq5qfam+eEuxinp3xQ1t4Eox4IKlFJlrSAU6oUeRPx
SCXrNHPFrwaCTdRX/uLlfOq/S9Qh2fqBm8IPske79GxnkgRb59nhVrhoOueO
z3CjmU4wbW2KgoLMx8HTufcMmPblawHE6MfRDxqioTcqU8rSPgmjk+kgVWE3
CuIp8HNWxn293XJgnLNdF9p+AZi+un113/rd0pp49foGNRtfvtAObVtrUTfG
U0qK3pWTnPVYcXWs1FnxfoO0MHcV92XsfRU3F8y80Hu09uloVsz9dhfoPlX4
ElrytqB8uqzTUeh7Ay9LaXyVlb4im5QwMf+4D5zWkmVK2VEWaHw9bH9tH+L/
ATLfffXVXEqy3/X29w+8g4Ouedzvdr0d+K/bxYdYq9NzavV2et7u7r63v2fV
whoHbq3++lp73Z7Xt2v1cxj29/a97YM9F8P9A6ph1cphuLu9A/3attuCxvcK
tfrravW97Z1crW0Hw57X3Xvg7e7se7t9XWvb2+7v5Go5GPa93vYDr/tg1+vu
6Fp73t7OQb5Wf12tB96D/b5ba8fBcMfrwwj3HkABTcPettd/sJer5WB4AGO1
B5Tvej1Njf6et/sg35aDYVktQPngINevXRvD3r7X6/WR6kA2VWt32+sd5Gi4
a2MIY9Xv7yLVgWyyVq8Lje/l27IxLK21CwO46/YLBZEyBi0ZdeOx3LmbEgXv
irf+haV42ErNRfgk/oUuccm7+W4l2m8jYZa6Cfd702CKJ/cM09t2sRN050Qj
f0LInyDym13xJG+P17VOKFW4Tk/mzW0Z3Ge3XZMeN3yzkzPGimuqCVW83SlH
kEbjkdk/5lmFAlqljWV2aPEWE4GXR6WcZy8XOFZjQremLwmS94YEmU9MpxMu
wOC02HYq38vINF1cBstJqLeNOxXWJxLNpvz3GFrwFO50ImgZt37lQFKrDp3W
XfNOSI1DmM1PspNse7dpN7ym/vVuhOcQ2ZJO7G7SiRz+09HwfFPUvzX+e1fA
fziZ1EL/W+Lf627QgRz+5ERIanThW+K/v0EHcvjP0yA5oZi9YLRRL24K/6te
kp3HP6qDvLgZ/AtXAdaqf8PzmiKFUvpyaito2cKUhlPGM2JfTc5bO1WUiNlm
ojp2r0G3AKy8A13XBwjjExzvK1Fi3DxoXZvfboJftlQ38B41SoOhPpkrlhbP
nuk41mE8Bb4esbnx4viX9rE47mzvWlxCEd7qp9DXr9lmShKchmlGrq5ibhEA
PW4fb+/SCvuWsly5ZbCG68g6URVPKPchWZ5s3q2vYsAsg4nAdLb7Q5tn6SCt
9UAa68us7cS4WdEPzCQHbllBCXkBfWn1k2CR8SFmK9pXRDBkaLev0onr6vnr
fPT1uKKpxxJzjurZqYaISr1v3P7tIOI3mOyAGoVJzghrYZoD3VfOivadvFIf
ypsiyQepFvfs76dqrJ/y6uxxFAUL8RjL5TRbVctGCG4WhydrcJA8ZDdKC9PK
Ntl9ubEmRwczBlKHeELhLIkx9SCRCOMxboVXcYLHjAUju1NhOXiRntE+mb7t
U0V0q0v24og2nqZ4fTv3Si7FC/3vALkwD2sKUCiBb8kx4CXSxi4f1TL9krQq
8wO59JHObNwczJbC3SXEF07v3NEtJRa+knP0Kx8HBNEYhels4i/pgNt5Is7x
IM/g9ttzhWXrpo6pnD23jVac2BItsfHSc5aEUx8FkXatYdhgdE7wwL4NKDFv
9vZa1VCW9aBcd3qC6QXWIZSol+vNBvU1FpVQlnWgTP3FyVRx5QkwIfAuBjBs
1BftMJzihtg1oXyDGQe5tTDlEAuX+Akr+QvVrp2W1+309kB3LYJRm6ivXNOg
tv4m7NrCXDeML6cF4fdTIVfBqFuOXjwVvQfbPbU3G/I5lfC7b7X/Fi/S/jEJ
gsgTT/ggGnyJZ7pMlp3KjizrdeT9behItZzU6AkB4azYmxme1agtr4haNcH9
tAS1KrwqxFmvHvs7nYMKbKBqOJ1PdROmUQ3GMwntPIsPYcYLJr7crodFaUJz
WMB3hlRoBY1M76DT26nCBqb4m8TmLh2SBCVxX5rOXZfBFtbS99bPvnmn60Zr
kq9Sy0PlK/QjP1eM/auBUVC+xbpiyOPKw5pX90izEm0vKeJKK6VCSjEYrmGW
okl99PRx+2Cv19m+vPTMYQWPtVwi6arbo32ltn8eJP5pcCOtIsv/kgaJVhba
8VO+F+o6h/AkhjnVpo2sXKzcPArxzkYwc+Hbr3iMniqQ2DimcjXw7nWvt7t/
gCjK1OVMJafLEBOZXK8qhsW0zxvwON2AUOZFstIPv9rNMp+Hm7sEcn0AQeqT
hyBnUzdzDqe9FrtKK1AQwsb9xPY5r0WBXBTXM4NLBBnxAXQKIuzQuESWkZju
ghwIRIesyEOO7KtpfOs0l19+efEDHXWSjKzgUTo8YEQnNvCyXHOvchmQSFdS
r9o3MLelceOFKGEpkY7VXPZLtKFU39KprHz/ZwMv7fU3BnTTJ/m9lnUbBto3
d+t8a/OouIFkSFyQmXvriOBuN5QdiTD06UwEZAsx8IefGv8/S9PqJPhWAQA=

-->

</rfc>
