<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=FyKnight</id>
	<title>MultimediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=FyKnight"/>
	<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php/Special:Contributions/FyKnight"/>
	<updated>2026-06-19T08:09:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5704</id>
		<title>Indeo 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5704"/>
		<updated>2006-08-15T14:35:13Z</updated>

		<summary type="html">&lt;p&gt;FyKnight: /* Block header */ added conditions and loops info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: IV50&lt;br /&gt;
* Company: [[Intel]], then [[Ligos]]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/IV50/ http://samples.mplayerhq.hu/V-codecs/IV50/]&lt;br /&gt;
&lt;br /&gt;
== General description ==&lt;br /&gt;
&lt;br /&gt;
=== Frame layout ===&lt;br /&gt;
&lt;br /&gt;
The general indeo5 frames layout is composed of one global header, followed by the content of the three YUV plans.&lt;br /&gt;
&lt;br /&gt;
In this document, the global header is split into 3 parts:&lt;br /&gt;
* [[#Frame_header|Frame header]]: describe the kind of frame (I/P/B)&lt;br /&gt;
* [[#GOP_header|GOP header]]: some data which is true for all the frame in this GOP (present only in the first (I) frame of the GOP)&lt;br /&gt;
* [[#More_header|More header]]: some more data which is true only for this single frame&lt;br /&gt;
&lt;br /&gt;
Each YUV plan begin with a [[#Plan_header|Plan header]], containing values which are valid only for this single plan.&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
This codec is based on the slant transform. Other used standard techniques are huffman coding and motion compensation.&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Headers are described in some tables. Each row of those tables describes a value which may be read from the frame. Those tables and rows are presented in the order of appearance in the frame.&lt;br /&gt;
&lt;br /&gt;
Here are the meaning of each columns:&lt;br /&gt;
* '''size''': The size of this value in bits. Bits are counted in LSB to MSB order. As an example, with the byte 01110000b, reading 3 bits then 5 bits will return 000b then 01110b. Reading more than 8 bits thus reads as a little-endian value. Think of the get_bits function as filling up the return value from its LSB, using the bits from each byte starting from their LSB.&lt;br /&gt;
* '''name''': Kind of variable name, used to reference the value. When a value is named valueX, it generally means we don't know it's purpose. Lines named alignmentX means that bits reader need to skip bits until next byte boundary.&lt;br /&gt;
* '''condition''': The value is present in the frame only if this condition is matched. No condition means that the value is always present.&lt;br /&gt;
* '''nb times''': How many times the value is repeated.&lt;br /&gt;
* '''comments''': Some details about the content of the value. It may also explain that a value is repeated until a certain condition is reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== Frame header ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| 5 || const1 || || || = 0x1F always&lt;br /&gt;
|-&lt;br /&gt;
| 3  || frame_flags || || ||&lt;br /&gt;
* frame_flags &amp;amp; 0x01 =&amp;gt; backward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x02 =&amp;gt; forward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x04 =&amp;gt; null frame&lt;br /&gt;
common values:&lt;br /&gt;
* 0 =&amp;gt; I frame&lt;br /&gt;
* 1 =&amp;gt; P frame&lt;br /&gt;
* 3 =&amp;gt; B frame&lt;br /&gt;
* 6 and 7 are illegal&lt;br /&gt;
|-&lt;br /&gt;
| 8 || id_in_gop || || || frame number in GOP (0 for I frame)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
null frames don't contain anything else than this header.&lt;br /&gt;
&lt;br /&gt;
=== GOP header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in I frames only. The values in this header are valid during the whole GOP starting at this frame.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;gh_flags&amp;quot;&amp;gt;gh_flags&amp;lt;/span&amp;gt; || || || [[#gh_flags|gh_flags]] &amp;amp; 0x02 =&amp;gt; YV12 (default YVU9)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value1&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x01 || || discard in decoding&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 32 || &amp;lt;span id=&amp;quot;value2&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x20 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value3&amp;quot;&amp;gt;value3&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value4&amp;quot;&amp;gt;value4&amp;lt;/span&amp;gt; || || || legal values are 0, 1, 2 and 6&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;res_id&amp;quot;&amp;gt;res_id&amp;lt;/span&amp;gt; || || || see [[#Resolution_table|Resolution table]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;height&amp;quot;&amp;gt;height&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#res_id|res_id]] == 15 || || frame height&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;width&amp;quot;&amp;gt;width&amp;lt;/span&amp;gt; || || frame width&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  6 || &amp;lt;span id=&amp;quot;value5&amp;quot;&amp;gt;value5&amp;lt;/span&amp;gt; || || rowspan=&amp;quot;2&amp;quot; | 2*n (n == 1 always?) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value6&amp;quot;&amp;gt;value6&amp;lt;/span&amp;gt; || [[#value5|value5]] &amp;gt;&amp;gt; 3 || need to be = 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value7&amp;quot;&amp;gt;value7&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#gh_flags|gh_flags]] &amp;amp; 0x08 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value8&amp;quot;&amp;gt;value8&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment1&amp;quot;&amp;gt;alignment1&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value9&amp;quot;&amp;gt;value9&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value10&amp;quot;&amp;gt;value10&amp;lt;/span&amp;gt; || [[#value9|value9]] &amp;amp; 0x800000 || || loops while value10 &amp;amp; 0x8000 (probably some kind of VLC ?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in all kinds of frame except null.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;mh_flags&amp;quot;&amp;gt;mh_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;frame_size&amp;quot;&amp;gt;frame_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x01 || || tolal size of frame data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value11&amp;quot;&amp;gt;value11&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter1&amp;quot;&amp;gt;counter1&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#mh_flags|mh_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;2&amp;quot; | this whole block loops while [[#counter1|counter1]] != 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value12&amp;quot;&amp;gt;value12&amp;lt;/span&amp;gt; || [[#counter1|counter1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value13&amp;quot;&amp;gt;value13&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter2&amp;quot;&amp;gt;counter2&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#value13|value13]] == 7 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value14&amp;quot;&amp;gt;value14&amp;lt;/span&amp;gt; || [[#counter2|counter2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value15&amp;quot;&amp;gt;value15&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment2&amp;quot;&amp;gt;alignment2&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Plane header ===&lt;br /&gt;
&lt;br /&gt;
This header is present at the beginning of every plane.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;ph_flags&amp;quot;&amp;gt;ph_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;plan_size&amp;quot;&amp;gt;plan_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x80 || || tolal size of plan data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter3&amp;quot;&amp;gt;counter3&amp;lt;/span&amp;gt; || rowspan=&amp;quot;3&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x10 || || must be &amp;lt; 0x3E&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value16&amp;quot;&amp;gt;value16&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#counter3|counter3]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value17&amp;quot;&amp;gt;value17&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value18&amp;quot;&amp;gt;value18&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;table1_id&amp;quot;&amp;gt;table1_id&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x80 || || see [[#Table_1|Table 1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter4&amp;quot;&amp;gt;counter4&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#table1_id|table1_id]] == 7 || || rowspan=&amp;quot;2&amp;quot; | used instead of [[#Table1|Table1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value19&amp;quot;&amp;gt;value19&amp;lt;/span&amp;gt; || [[#counter4|counter4]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value20&amp;quot;&amp;gt;value20&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value21&amp;quot;&amp;gt;value21&amp;lt;/span&amp;gt; || [[#value20|value20]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  5 || &amp;lt;span id=&amp;quot;value22&amp;quot;&amp;gt;value22&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment3&amp;quot;&amp;gt;alignment3&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter5&amp;quot;&amp;gt;counter5&amp;lt;/span&amp;gt; || rowspan=&amp;quot;4&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;3&amp;quot; | all of this is repeated as long as [[#value23|value23]] is true&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;skip1&amp;quot;&amp;gt;skip1&amp;lt;/span&amp;gt; || [[#counter5|counter5]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value23&amp;quot;&amp;gt;value23&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment4&amp;quot;&amp;gt;alignment4&amp;lt;/span&amp;gt; || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planes ==&lt;br /&gt;
=== Plane data ===&lt;br /&gt;
&lt;br /&gt;
Needs more analysis. Follows plane header.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value24&amp;quot;&amp;gt;value24&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value25&amp;quot;&amp;gt;value25&amp;lt;/span&amp;gt; || ! [[#value24|value24]] || || plan_data_size = value25&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value26&amp;quot;&amp;gt;value26&amp;lt;/span&amp;gt; || [[#value25|value25]] == 1 || || plan_data_size = value26&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value27&amp;quot;&amp;gt;value27&amp;lt;/span&amp;gt; || [[#value26|value26]] == 0xFF || || plan_data_size = value27&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block header ===&lt;br /&gt;
&lt;br /&gt;
Each plane is split into a number of blocks in the x and y directions. There is one of these headers one after another for each block in the plane.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value28&amp;quot;&amp;gt;value28&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value29&amp;quot;&amp;gt;value29&amp;lt;/span&amp;gt; || value28 &amp;amp;&amp;amp; plane_state17 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value30&amp;quot;&amp;gt;value30&amp;lt;/span&amp;gt; || !value28 &amp;amp;&amp;amp; plane_state12 &amp;amp;&amp;amp; plane_state1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value31&amp;quot;&amp;gt;value31&amp;lt;/span&amp;gt; || !value28 &amp;amp;&amp;amp; four_blocks || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value32&amp;quot;&amp;gt;value32&amp;lt;/span&amp;gt; || !value28 &amp;amp;&amp;amp; !four_blocks || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value33&amp;quot;&amp;gt;value33&amp;lt;/span&amp;gt; || !value28 &amp;amp;&amp;amp; plane_state14 &amp;amp;&amp;amp; !plane_state13 &amp;amp;&amp;amp; (plane_state17 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; value31/2) || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value34&amp;quot;&amp;gt;value34&amp;lt;/span&amp;gt; || rowspan=2 | !value28 &amp;amp;&amp;amp; !(block_state4 &amp;amp; 2) &amp;amp;&amp;amp; !plane_state12 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value35&amp;quot;&amp;gt;value35&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The 'plane_state' states come from plane parsing; they are yet to be connected to the previous data.&lt;br /&gt;
&lt;br /&gt;
block_state4 is too complicated to explain here, sorry!&lt;br /&gt;
&lt;br /&gt;
=== Block data ===&lt;br /&gt;
&lt;br /&gt;
Follows block header. One of these for each plane that has 'plane_flags&amp;amp;1'. The variable 'run' starts at -1 and carries over from one coded plane to the next. I don't really know what I'm doing with vlc's so the names might not be correct... but their functional description is.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;vlc&amp;quot;&amp;gt;vlc&amp;lt;/span&amp;gt; || || rowspan=4 valign=top | while (vlc != vlcEnd) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;run_add&amp;quot;&amp;gt;run_add&amp;lt;/span&amp;gt; || rowspan=3 | vlc == vlcEsc || run += run_add + 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_lo&amp;quot;&amp;gt;lindex_lo&amp;lt;/span&amp;gt; || rowspan=2 | lindex = lindex_lo &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (lindex_hi&amp;lt;&amp;lt;6)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_hi&amp;quot;&amp;gt;lindex_hi&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If vlc != vlcEsc then run_add is run_table[vlc], lindex is lindex_table[vlc].&lt;br /&gt;
&lt;br /&gt;
After each loop, stored coefficient is: block[ scan_table[run] ] = level_tables[run][lindex-1].&lt;br /&gt;
&lt;br /&gt;
The values of vlcEnd and vlcEsc are variable, as is the vlc table itself. However, they are all fixed for all the planes in the same block. run_table, lindex_table, scan_table are also fixed-per-block. level_tables is per-plane.&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
&lt;br /&gt;
=== Resolution table ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | res_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | width&lt;br /&gt;
| 640 || 320 || 160 || 704 || 352 || 352 || 176 || 240 || 640 || 704 || 80 || 88&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | height&lt;br /&gt;
| 480 || 240 || 120 || 224 || 240 || 288 || 144 || 180 || 240 || 240 || 60 || 72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Table 1 ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | table1_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || default&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | counter4&lt;br /&gt;
| 10 || 11 || 12 || 13 || 11 || 13 || 13 || 9&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | value19&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
default is used when !([[#ph_flags|ph_flags]] &amp;amp; 0x80)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>FyKnight</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5698</id>
		<title>Indeo 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5698"/>
		<updated>2006-08-15T08:39:58Z</updated>

		<summary type="html">&lt;p&gt;FyKnight: Block header: might or might not be huffman but is definitely a vlc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: IV50&lt;br /&gt;
* Company: [[Intel]], then [[Ligos]]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/IV50/ http://samples.mplayerhq.hu/V-codecs/IV50/]&lt;br /&gt;
&lt;br /&gt;
== General description ==&lt;br /&gt;
&lt;br /&gt;
=== Frame layout ===&lt;br /&gt;
&lt;br /&gt;
The general indeo5 frames layout is composed of one global header, followed by the content of the three YUV plans.&lt;br /&gt;
&lt;br /&gt;
In this document, the global header is split into 3 parts:&lt;br /&gt;
* [[#Frame_header|Frame header]]: describe the kind of frame (I/P/B)&lt;br /&gt;
* [[#GOP_header|GOP header]]: some data which is true for all the frame in this GOP (present only in the first (I) frame of the GOP)&lt;br /&gt;
* [[#More_header|More header]]: some more data which is true only for this single frame&lt;br /&gt;
&lt;br /&gt;
Each YUV plan begin with a [[#Plan_header|Plan header]], containing values which are valid only for this single plan.&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
This codec is based on the slant transform. Other used standard techniques are huffman coding and motion compensation.&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Headers are described in some tables. Each row of those tables describes a value which may be read from the frame. Those tables and rows are presented in the order of appearance in the frame.&lt;br /&gt;
&lt;br /&gt;
Here are the meaning of each columns:&lt;br /&gt;
* '''size''': The size of this value in bits. Bits are counted in LSB to MSB order. As an example, with the byte 01110000b, reading 3 bits then 5 bits will return 000b then 01110b. Reading more than 8 bits thus reads as a little-endian value. Think of the get_bits function as filling up the return value from its LSB, using the bits from each byte starting from their LSB.&lt;br /&gt;
* '''name''': Kind of variable name, used to reference the value. When a value is named valueX, it generally means we don't know it's purpose. Lines named alignmentX means that bits reader need to skip bits until next byte boundary.&lt;br /&gt;
* '''condition''': The value is present in the frame only if this condition is matched. No condition means that the value is always present.&lt;br /&gt;
* '''nb times''': How many times the value is repeated.&lt;br /&gt;
* '''comments''': Some details about the content of the value. It may also explain that a value is repeated until a certain condition is reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== Frame header ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| 5 || const1 || || || = 0x1F always&lt;br /&gt;
|-&lt;br /&gt;
| 3  || frame_flags || || ||&lt;br /&gt;
* frame_flags &amp;amp; 0x01 =&amp;gt; backward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x02 =&amp;gt; forward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x04 =&amp;gt; null frame&lt;br /&gt;
common values:&lt;br /&gt;
* 0 =&amp;gt; I frame&lt;br /&gt;
* 1 =&amp;gt; P frame&lt;br /&gt;
* 3 =&amp;gt; B frame&lt;br /&gt;
* 6 and 7 are illegal&lt;br /&gt;
|-&lt;br /&gt;
| 8 || id_in_gop || || || frame number in GOP (0 for I frame)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
null frames don't contain anything else than this header.&lt;br /&gt;
&lt;br /&gt;
=== GOP header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in I frames only. The values in this header are valid during the whole GOP starting at this frame.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;gh_flags&amp;quot;&amp;gt;gh_flags&amp;lt;/span&amp;gt; || || || [[#gh_flags|gh_flags]] &amp;amp; 0x02 =&amp;gt; YV12 (default YVU9)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value1&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x01 || || discard in decoding&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 32 || &amp;lt;span id=&amp;quot;value2&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x20 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value3&amp;quot;&amp;gt;value3&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value4&amp;quot;&amp;gt;value4&amp;lt;/span&amp;gt; || || || legal values are 0, 1, 2 and 6&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;res_id&amp;quot;&amp;gt;res_id&amp;lt;/span&amp;gt; || || || see [[#Resolution_table|Resolution table]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;height&amp;quot;&amp;gt;height&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#res_id|res_id]] == 15 || || frame height&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;width&amp;quot;&amp;gt;width&amp;lt;/span&amp;gt; || || frame width&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  6 || &amp;lt;span id=&amp;quot;value5&amp;quot;&amp;gt;value5&amp;lt;/span&amp;gt; || || rowspan=&amp;quot;2&amp;quot; | 2*n (n == 1 always?) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value6&amp;quot;&amp;gt;value6&amp;lt;/span&amp;gt; || [[#value5|value5]] &amp;gt;&amp;gt; 3 || need to be = 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value7&amp;quot;&amp;gt;value7&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#gh_flags|gh_flags]] &amp;amp; 0x08 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value8&amp;quot;&amp;gt;value8&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment1&amp;quot;&amp;gt;alignment1&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value9&amp;quot;&amp;gt;value9&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value10&amp;quot;&amp;gt;value10&amp;lt;/span&amp;gt; || [[#value9|value9]] &amp;amp; 0x800000 || || loops while value10 &amp;amp; 0x8000 (probably some kind of VLC ?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in all kinds of frame except null.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;mh_flags&amp;quot;&amp;gt;mh_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;frame_size&amp;quot;&amp;gt;frame_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x01 || || tolal size of frame data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value11&amp;quot;&amp;gt;value11&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter1&amp;quot;&amp;gt;counter1&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#mh_flags|mh_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;2&amp;quot; | this whole block loops while [[#counter1|counter1]] != 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value12&amp;quot;&amp;gt;value12&amp;lt;/span&amp;gt; || [[#counter1|counter1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value13&amp;quot;&amp;gt;value13&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter2&amp;quot;&amp;gt;counter2&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#value13|value13]] == 7 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value14&amp;quot;&amp;gt;value14&amp;lt;/span&amp;gt; || [[#counter2|counter2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value15&amp;quot;&amp;gt;value15&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment2&amp;quot;&amp;gt;alignment2&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Plane header ===&lt;br /&gt;
&lt;br /&gt;
This header is present at the beginning of every plane.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;ph_flags&amp;quot;&amp;gt;ph_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;plan_size&amp;quot;&amp;gt;plan_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x80 || || tolal size of plan data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter3&amp;quot;&amp;gt;counter3&amp;lt;/span&amp;gt; || rowspan=&amp;quot;3&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x10 || || must be &amp;lt; 0x3E&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value16&amp;quot;&amp;gt;value16&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#counter3|counter3]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value17&amp;quot;&amp;gt;value17&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value18&amp;quot;&amp;gt;value18&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;table1_id&amp;quot;&amp;gt;table1_id&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x80 || || see [[#Table_1|Table 1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter4&amp;quot;&amp;gt;counter4&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#table1_id|table1_id]] == 7 || || rowspan=&amp;quot;2&amp;quot; | used instead of [[#Table1|Table1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value19&amp;quot;&amp;gt;value19&amp;lt;/span&amp;gt; || [[#counter4|counter4]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value20&amp;quot;&amp;gt;value20&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value21&amp;quot;&amp;gt;value21&amp;lt;/span&amp;gt; || [[#value20|value20]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  5 || &amp;lt;span id=&amp;quot;value22&amp;quot;&amp;gt;value22&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment3&amp;quot;&amp;gt;alignment3&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter5&amp;quot;&amp;gt;counter5&amp;lt;/span&amp;gt; || rowspan=&amp;quot;4&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;3&amp;quot; | all of this is repeated as long as [[#value23|value23]] is true&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;skip1&amp;quot;&amp;gt;skip1&amp;lt;/span&amp;gt; || [[#counter5|counter5]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value23&amp;quot;&amp;gt;value23&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment4&amp;quot;&amp;gt;alignment4&amp;lt;/span&amp;gt; || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planes ==&lt;br /&gt;
=== Plane data ===&lt;br /&gt;
&lt;br /&gt;
Needs more analysis. Follows plane header.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value24&amp;quot;&amp;gt;value24&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value25&amp;quot;&amp;gt;value25&amp;lt;/span&amp;gt; || ! [[#value24|value24]] || || plan_data_size = value25&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value26&amp;quot;&amp;gt;value26&amp;lt;/span&amp;gt; || [[#value25|value25]] == 1 || || plan_data_size = value26&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value27&amp;quot;&amp;gt;value27&amp;lt;/span&amp;gt; || [[#value26|value26]] == 0xFF || || plan_data_size = value27&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block header ===&lt;br /&gt;
&lt;br /&gt;
One of these for each block after plane data. Conditions/loops not yet investigated.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value28&amp;quot;&amp;gt;value28&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value29&amp;quot;&amp;gt;value29&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value30&amp;quot;&amp;gt;value30&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value31&amp;quot;&amp;gt;value31&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value32&amp;quot;&amp;gt;value32&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value33&amp;quot;&amp;gt;value33&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value34&amp;quot;&amp;gt;value34&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;value35&amp;quot;&amp;gt;value35&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block data ===&lt;br /&gt;
&lt;br /&gt;
Follows block header. One of these for each plane that has 'plane_flags&amp;amp;1'. The variable 'run' starts at -1 and carries over from one coded plane to the next. I don't really know what I'm doing with vlc's so the names might not be correct... but their functional description is.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;vlc&amp;quot;&amp;gt;vlc&amp;lt;/span&amp;gt; || || rowspan=4 valign=top | while (vlc != vlcEnd) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;run_add&amp;quot;&amp;gt;run_add&amp;lt;/span&amp;gt; || rowspan=3 | vlc == vlcEsc || run += run_add + 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_lo&amp;quot;&amp;gt;lindex_lo&amp;lt;/span&amp;gt; || rowspan=2 | lindex = lindex_lo &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (lindex_hi&amp;lt;&amp;lt;6)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_hi&amp;quot;&amp;gt;lindex_hi&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If vlc != vlcEsc then run_add is run_table[vlc], lindex is lindex_table[vlc].&lt;br /&gt;
&lt;br /&gt;
After each loop, stored coefficient is: block[ scan_table[run] ] = level_tables[run][lindex-1].&lt;br /&gt;
&lt;br /&gt;
The values of vlcEnd and vlcEsc are variable, as is the vlc table itself. However, they are all fixed for all the planes in the same block. run_table, lindex_table, scan_table are also fixed-per-block. level_tables is per-plane.&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
&lt;br /&gt;
=== Resolution table ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | res_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | width&lt;br /&gt;
| 640 || 320 || 160 || 704 || 352 || 352 || 176 || 240 || 640 || 704 || 80 || 88&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | height&lt;br /&gt;
| 480 || 240 || 120 || 224 || 240 || 288 || 144 || 180 || 240 || 240 || 60 || 72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Table 1 ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | table1_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || default&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | counter4&lt;br /&gt;
| 10 || 11 || 12 || 13 || 11 || 13 || 13 || 9&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | value19&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
default is used when !([[#ph_flags|ph_flags]] &amp;amp; 0x80)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>FyKnight</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5697</id>
		<title>Indeo 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5697"/>
		<updated>2006-08-15T08:35:40Z</updated>

		<summary type="html">&lt;p&gt;FyKnight: Block data: prettified; little extra info on tables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: IV50&lt;br /&gt;
* Company: [[Intel]], then [[Ligos]]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/IV50/ http://samples.mplayerhq.hu/V-codecs/IV50/]&lt;br /&gt;
&lt;br /&gt;
== General description ==&lt;br /&gt;
&lt;br /&gt;
=== Frame layout ===&lt;br /&gt;
&lt;br /&gt;
The general indeo5 frames layout is composed of one global header, followed by the content of the three YUV plans.&lt;br /&gt;
&lt;br /&gt;
In this document, the global header is split into 3 parts:&lt;br /&gt;
* [[#Frame_header|Frame header]]: describe the kind of frame (I/P/B)&lt;br /&gt;
* [[#GOP_header|GOP header]]: some data which is true for all the frame in this GOP (present only in the first (I) frame of the GOP)&lt;br /&gt;
* [[#More_header|More header]]: some more data which is true only for this single frame&lt;br /&gt;
&lt;br /&gt;
Each YUV plan begin with a [[#Plan_header|Plan header]], containing values which are valid only for this single plan.&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
This codec is based on the slant transform. Other used standard techniques are huffman coding and motion compensation.&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Headers are described in some tables. Each row of those tables describes a value which may be read from the frame. Those tables and rows are presented in the order of appearance in the frame.&lt;br /&gt;
&lt;br /&gt;
Here are the meaning of each columns:&lt;br /&gt;
* '''size''': The size of this value in bits. Bits are counted in LSB to MSB order. As an example, with the byte 01110000b, reading 3 bits then 5 bits will return 000b then 01110b. Reading more than 8 bits thus reads as a little-endian value. Think of the get_bits function as filling up the return value from its LSB, using the bits from each byte starting from their LSB.&lt;br /&gt;
* '''name''': Kind of variable name, used to reference the value. When a value is named valueX, it generally means we don't know it's purpose. Lines named alignmentX means that bits reader need to skip bits until next byte boundary.&lt;br /&gt;
* '''condition''': The value is present in the frame only if this condition is matched. No condition means that the value is always present.&lt;br /&gt;
* '''nb times''': How many times the value is repeated.&lt;br /&gt;
* '''comments''': Some details about the content of the value. It may also explain that a value is repeated until a certain condition is reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== Frame header ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| 5 || const1 || || || = 0x1F always&lt;br /&gt;
|-&lt;br /&gt;
| 3  || frame_flags || || ||&lt;br /&gt;
* frame_flags &amp;amp; 0x01 =&amp;gt; backward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x02 =&amp;gt; forward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x04 =&amp;gt; null frame&lt;br /&gt;
common values:&lt;br /&gt;
* 0 =&amp;gt; I frame&lt;br /&gt;
* 1 =&amp;gt; P frame&lt;br /&gt;
* 3 =&amp;gt; B frame&lt;br /&gt;
* 6 and 7 are illegal&lt;br /&gt;
|-&lt;br /&gt;
| 8 || id_in_gop || || || frame number in GOP (0 for I frame)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
null frames don't contain anything else than this header.&lt;br /&gt;
&lt;br /&gt;
=== GOP header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in I frames only. The values in this header are valid during the whole GOP starting at this frame.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;gh_flags&amp;quot;&amp;gt;gh_flags&amp;lt;/span&amp;gt; || || || [[#gh_flags|gh_flags]] &amp;amp; 0x02 =&amp;gt; YV12 (default YVU9)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value1&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x01 || || discard in decoding&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 32 || &amp;lt;span id=&amp;quot;value2&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x20 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value3&amp;quot;&amp;gt;value3&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value4&amp;quot;&amp;gt;value4&amp;lt;/span&amp;gt; || || || legal values are 0, 1, 2 and 6&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;res_id&amp;quot;&amp;gt;res_id&amp;lt;/span&amp;gt; || || || see [[#Resolution_table|Resolution table]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;height&amp;quot;&amp;gt;height&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#res_id|res_id]] == 15 || || frame height&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;width&amp;quot;&amp;gt;width&amp;lt;/span&amp;gt; || || frame width&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  6 || &amp;lt;span id=&amp;quot;value5&amp;quot;&amp;gt;value5&amp;lt;/span&amp;gt; || || rowspan=&amp;quot;2&amp;quot; | 2*n (n == 1 always?) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value6&amp;quot;&amp;gt;value6&amp;lt;/span&amp;gt; || [[#value5|value5]] &amp;gt;&amp;gt; 3 || need to be = 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value7&amp;quot;&amp;gt;value7&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#gh_flags|gh_flags]] &amp;amp; 0x08 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value8&amp;quot;&amp;gt;value8&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment1&amp;quot;&amp;gt;alignment1&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value9&amp;quot;&amp;gt;value9&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value10&amp;quot;&amp;gt;value10&amp;lt;/span&amp;gt; || [[#value9|value9]] &amp;amp; 0x800000 || || loops while value10 &amp;amp; 0x8000 (probably some kind of VLC ?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in all kinds of frame except null.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;mh_flags&amp;quot;&amp;gt;mh_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;frame_size&amp;quot;&amp;gt;frame_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x01 || || tolal size of frame data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value11&amp;quot;&amp;gt;value11&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter1&amp;quot;&amp;gt;counter1&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#mh_flags|mh_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;2&amp;quot; | this whole block loops while [[#counter1|counter1]] != 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value12&amp;quot;&amp;gt;value12&amp;lt;/span&amp;gt; || [[#counter1|counter1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value13&amp;quot;&amp;gt;value13&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter2&amp;quot;&amp;gt;counter2&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#value13|value13]] == 7 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value14&amp;quot;&amp;gt;value14&amp;lt;/span&amp;gt; || [[#counter2|counter2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value15&amp;quot;&amp;gt;value15&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment2&amp;quot;&amp;gt;alignment2&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Plane header ===&lt;br /&gt;
&lt;br /&gt;
This header is present at the beginning of every plane.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;ph_flags&amp;quot;&amp;gt;ph_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;plan_size&amp;quot;&amp;gt;plan_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x80 || || tolal size of plan data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter3&amp;quot;&amp;gt;counter3&amp;lt;/span&amp;gt; || rowspan=&amp;quot;3&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x10 || || must be &amp;lt; 0x3E&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value16&amp;quot;&amp;gt;value16&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#counter3|counter3]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value17&amp;quot;&amp;gt;value17&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value18&amp;quot;&amp;gt;value18&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;table1_id&amp;quot;&amp;gt;table1_id&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x80 || || see [[#Table_1|Table 1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter4&amp;quot;&amp;gt;counter4&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#table1_id|table1_id]] == 7 || || rowspan=&amp;quot;2&amp;quot; | used instead of [[#Table1|Table1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value19&amp;quot;&amp;gt;value19&amp;lt;/span&amp;gt; || [[#counter4|counter4]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value20&amp;quot;&amp;gt;value20&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value21&amp;quot;&amp;gt;value21&amp;lt;/span&amp;gt; || [[#value20|value20]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  5 || &amp;lt;span id=&amp;quot;value22&amp;quot;&amp;gt;value22&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment3&amp;quot;&amp;gt;alignment3&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter5&amp;quot;&amp;gt;counter5&amp;lt;/span&amp;gt; || rowspan=&amp;quot;4&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;3&amp;quot; | all of this is repeated as long as [[#value23|value23]] is true&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;skip1&amp;quot;&amp;gt;skip1&amp;lt;/span&amp;gt; || [[#counter5|counter5]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value23&amp;quot;&amp;gt;value23&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment4&amp;quot;&amp;gt;alignment4&amp;lt;/span&amp;gt; || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planes ==&lt;br /&gt;
=== Plane data ===&lt;br /&gt;
&lt;br /&gt;
Needs more analysis. Follows plane header.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value24&amp;quot;&amp;gt;value24&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value25&amp;quot;&amp;gt;value25&amp;lt;/span&amp;gt; || ! [[#value24|value24]] || || plan_data_size = value25&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value26&amp;quot;&amp;gt;value26&amp;lt;/span&amp;gt; || [[#value25|value25]] == 1 || || plan_data_size = value26&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value27&amp;quot;&amp;gt;value27&amp;lt;/span&amp;gt; || [[#value26|value26]] == 0xFF || || plan_data_size = value27&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block header ===&lt;br /&gt;
&lt;br /&gt;
One of these for each block after plane data. Conditions/loops not yet investigated.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value28&amp;quot;&amp;gt;value28&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value29&amp;quot;&amp;gt;value29&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value30&amp;quot;&amp;gt;value30&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value31&amp;quot;&amp;gt;value31&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value32&amp;quot;&amp;gt;value32&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value33&amp;quot;&amp;gt;value33&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value34&amp;quot;&amp;gt;value34&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value35&amp;quot;&amp;gt;value35&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block data ===&lt;br /&gt;
&lt;br /&gt;
Follows block header. One of these for each plane that has 'plane_flags&amp;amp;1'. The variable 'run' starts at -1 and carries over from one coded plane to the next. I don't really know what I'm doing with vlc's so the names might not be correct... but their functional description is.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;vlc&amp;quot;&amp;gt;vlc&amp;lt;/span&amp;gt; || || rowspan=4 valign=top | while (vlc != vlcEnd) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;run_add&amp;quot;&amp;gt;run_add&amp;lt;/span&amp;gt; || rowspan=3 | vlc == vlcEsc || run += run_add + 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_lo&amp;quot;&amp;gt;lindex_lo&amp;lt;/span&amp;gt; || rowspan=2 | lindex = lindex_lo &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (lindex_hi&amp;lt;&amp;lt;6)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_hi&amp;quot;&amp;gt;lindex_hi&amp;lt;/span&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If vlc != vlcEsc then run_add is run_table[vlc], lindex is lindex_table[vlc].&lt;br /&gt;
&lt;br /&gt;
After each loop, stored coefficient is: block[ scan_table[run] ] = level_tables[run][lindex-1].&lt;br /&gt;
&lt;br /&gt;
The values of vlcEnd and vlcEsc are variable, as is the vlc table itself. However, they are all fixed for all the planes in the same block. run_table, lindex_table, scan_table are also fixed-per-block. level_tables is per-plane.&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
&lt;br /&gt;
=== Resolution table ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | res_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | width&lt;br /&gt;
| 640 || 320 || 160 || 704 || 352 || 352 || 176 || 240 || 640 || 704 || 80 || 88&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | height&lt;br /&gt;
| 480 || 240 || 120 || 224 || 240 || 288 || 144 || 180 || 240 || 240 || 60 || 72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Table 1 ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | table1_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || default&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | counter4&lt;br /&gt;
| 10 || 11 || 12 || 13 || 11 || 13 || 13 || 9&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | value19&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
default is used when !([[#ph_flags|ph_flags]] &amp;amp; 0x80)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>FyKnight</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5696</id>
		<title>Indeo 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5696"/>
		<updated>2006-08-15T08:31:06Z</updated>

		<summary type="html">&lt;p&gt;FyKnight: Block data info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: IV50&lt;br /&gt;
* Company: [[Intel]], then [[Ligos]]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/IV50/ http://samples.mplayerhq.hu/V-codecs/IV50/]&lt;br /&gt;
&lt;br /&gt;
== General description ==&lt;br /&gt;
&lt;br /&gt;
=== Frame layout ===&lt;br /&gt;
&lt;br /&gt;
The general indeo5 frames layout is composed of one global header, followed by the content of the three YUV plans.&lt;br /&gt;
&lt;br /&gt;
In this document, the global header is split into 3 parts:&lt;br /&gt;
* [[#Frame_header|Frame header]]: describe the kind of frame (I/P/B)&lt;br /&gt;
* [[#GOP_header|GOP header]]: some data which is true for all the frame in this GOP (present only in the first (I) frame of the GOP)&lt;br /&gt;
* [[#More_header|More header]]: some more data which is true only for this single frame&lt;br /&gt;
&lt;br /&gt;
Each YUV plan begin with a [[#Plan_header|Plan header]], containing values which are valid only for this single plan.&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
This codec is based on the slant transform. Other used standard techniques are huffman coding and motion compensation.&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Headers are described in some tables. Each row of those tables describes a value which may be read from the frame. Those tables and rows are presented in the order of appearance in the frame.&lt;br /&gt;
&lt;br /&gt;
Here are the meaning of each columns:&lt;br /&gt;
* '''size''': The size of this value in bits. Bits are counted in LSB to MSB order. As an example, with the byte 01110000b, reading 3 bits then 5 bits will return 000b then 01110b. Reading more than 8 bits thus reads as a little-endian value. Think of the get_bits function as filling up the return value from its LSB, using the bits from each byte starting from their LSB.&lt;br /&gt;
* '''name''': Kind of variable name, used to reference the value. When a value is named valueX, it generally means we don't know it's purpose. Lines named alignmentX means that bits reader need to skip bits until next byte boundary.&lt;br /&gt;
* '''condition''': The value is present in the frame only if this condition is matched. No condition means that the value is always present.&lt;br /&gt;
* '''nb times''': How many times the value is repeated.&lt;br /&gt;
* '''comments''': Some details about the content of the value. It may also explain that a value is repeated until a certain condition is reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== Frame header ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| 5 || const1 || || || = 0x1F always&lt;br /&gt;
|-&lt;br /&gt;
| 3  || frame_flags || || ||&lt;br /&gt;
* frame_flags &amp;amp; 0x01 =&amp;gt; backward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x02 =&amp;gt; forward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x04 =&amp;gt; null frame&lt;br /&gt;
common values:&lt;br /&gt;
* 0 =&amp;gt; I frame&lt;br /&gt;
* 1 =&amp;gt; P frame&lt;br /&gt;
* 3 =&amp;gt; B frame&lt;br /&gt;
* 6 and 7 are illegal&lt;br /&gt;
|-&lt;br /&gt;
| 8 || id_in_gop || || || frame number in GOP (0 for I frame)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
null frames don't contain anything else than this header.&lt;br /&gt;
&lt;br /&gt;
=== GOP header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in I frames only. The values in this header are valid during the whole GOP starting at this frame.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;gh_flags&amp;quot;&amp;gt;gh_flags&amp;lt;/span&amp;gt; || || || [[#gh_flags|gh_flags]] &amp;amp; 0x02 =&amp;gt; YV12 (default YVU9)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value1&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x01 || || discard in decoding&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 32 || &amp;lt;span id=&amp;quot;value2&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x20 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value3&amp;quot;&amp;gt;value3&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value4&amp;quot;&amp;gt;value4&amp;lt;/span&amp;gt; || || || legal values are 0, 1, 2 and 6&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;res_id&amp;quot;&amp;gt;res_id&amp;lt;/span&amp;gt; || || || see [[#Resolution_table|Resolution table]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;height&amp;quot;&amp;gt;height&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#res_id|res_id]] == 15 || || frame height&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;width&amp;quot;&amp;gt;width&amp;lt;/span&amp;gt; || || frame width&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  6 || &amp;lt;span id=&amp;quot;value5&amp;quot;&amp;gt;value5&amp;lt;/span&amp;gt; || || rowspan=&amp;quot;2&amp;quot; | 2*n (n == 1 always?) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value6&amp;quot;&amp;gt;value6&amp;lt;/span&amp;gt; || [[#value5|value5]] &amp;gt;&amp;gt; 3 || need to be = 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value7&amp;quot;&amp;gt;value7&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#gh_flags|gh_flags]] &amp;amp; 0x08 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value8&amp;quot;&amp;gt;value8&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment1&amp;quot;&amp;gt;alignment1&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value9&amp;quot;&amp;gt;value9&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value10&amp;quot;&amp;gt;value10&amp;lt;/span&amp;gt; || [[#value9|value9]] &amp;amp; 0x800000 || || loops while value10 &amp;amp; 0x8000 (probably some kind of VLC ?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in all kinds of frame except null.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;mh_flags&amp;quot;&amp;gt;mh_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;frame_size&amp;quot;&amp;gt;frame_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x01 || || tolal size of frame data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value11&amp;quot;&amp;gt;value11&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter1&amp;quot;&amp;gt;counter1&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#mh_flags|mh_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;2&amp;quot; | this whole block loops while [[#counter1|counter1]] != 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value12&amp;quot;&amp;gt;value12&amp;lt;/span&amp;gt; || [[#counter1|counter1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value13&amp;quot;&amp;gt;value13&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter2&amp;quot;&amp;gt;counter2&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#value13|value13]] == 7 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value14&amp;quot;&amp;gt;value14&amp;lt;/span&amp;gt; || [[#counter2|counter2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value15&amp;quot;&amp;gt;value15&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment2&amp;quot;&amp;gt;alignment2&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Plane header ===&lt;br /&gt;
&lt;br /&gt;
This header is present at the beginning of every plane.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;ph_flags&amp;quot;&amp;gt;ph_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;plan_size&amp;quot;&amp;gt;plan_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x80 || || tolal size of plan data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter3&amp;quot;&amp;gt;counter3&amp;lt;/span&amp;gt; || rowspan=&amp;quot;3&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x10 || || must be &amp;lt; 0x3E&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value16&amp;quot;&amp;gt;value16&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#counter3|counter3]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value17&amp;quot;&amp;gt;value17&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value18&amp;quot;&amp;gt;value18&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;table1_id&amp;quot;&amp;gt;table1_id&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x80 || || see [[#Table_1|Table 1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter4&amp;quot;&amp;gt;counter4&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#table1_id|table1_id]] == 7 || || rowspan=&amp;quot;2&amp;quot; | used instead of [[#Table1|Table1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value19&amp;quot;&amp;gt;value19&amp;lt;/span&amp;gt; || [[#counter4|counter4]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value20&amp;quot;&amp;gt;value20&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value21&amp;quot;&amp;gt;value21&amp;lt;/span&amp;gt; || [[#value20|value20]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  5 || &amp;lt;span id=&amp;quot;value22&amp;quot;&amp;gt;value22&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment3&amp;quot;&amp;gt;alignment3&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter5&amp;quot;&amp;gt;counter5&amp;lt;/span&amp;gt; || rowspan=&amp;quot;4&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;3&amp;quot; | all of this is repeated as long as [[#value23|value23]] is true&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;skip1&amp;quot;&amp;gt;skip1&amp;lt;/span&amp;gt; || [[#counter5|counter5]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value23&amp;quot;&amp;gt;value23&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment4&amp;quot;&amp;gt;alignment4&amp;lt;/span&amp;gt; || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planes ==&lt;br /&gt;
=== Plane data ===&lt;br /&gt;
&lt;br /&gt;
Needs more analysis. Follows plane header.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value24&amp;quot;&amp;gt;value24&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value25&amp;quot;&amp;gt;value25&amp;lt;/span&amp;gt; || ! [[#value24|value24]] || || plan_data_size = value25&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value26&amp;quot;&amp;gt;value26&amp;lt;/span&amp;gt; || [[#value25|value25]] == 1 || || plan_data_size = value26&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value27&amp;quot;&amp;gt;value27&amp;lt;/span&amp;gt; || [[#value26|value26]] == 0xFF || || plan_data_size = value27&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block header ===&lt;br /&gt;
&lt;br /&gt;
One of these for each block after plane data. Conditions/loops not yet investigated.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value28&amp;quot;&amp;gt;value28&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value29&amp;quot;&amp;gt;value29&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value30&amp;quot;&amp;gt;value30&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value31&amp;quot;&amp;gt;value31&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value32&amp;quot;&amp;gt;value32&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value33&amp;quot;&amp;gt;value33&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value34&amp;quot;&amp;gt;value34&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value35&amp;quot;&amp;gt;value35&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block data ===&lt;br /&gt;
&lt;br /&gt;
Follows block header. One of these for each plane that has 'plane_flags&amp;amp;1'. The variable 'run' starts at -1 and carries over from one coded plane to the next. I don't really know what I'm doing with vlc's so the names might not be correct... but their functional description is.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;vlc&amp;quot;&amp;gt;vlc&amp;lt;/span&amp;gt; || || while (vlc != vlcEnd) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;run_add&amp;quot;&amp;gt;run_add&amp;lt;/span&amp;gt; || vlc == vlcEsc || || run += run_add + 1&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_lo&amp;quot;&amp;gt;lindex_lo&amp;lt;/span&amp;gt; || vlc == vlcEsc || || rowspan=2 | lindex = lindex_lo &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (lindex_hi&amp;lt;&amp;lt;6)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  vlc || &amp;lt;span id=&amp;quot;lindex_hi&amp;quot;&amp;gt;lindex_hi&amp;lt;/span&amp;gt; || vlc == vlcEsc || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If vlc != vlcEsc then run_add is run_table[vlc], lindex is lindex_table[vlc].&lt;br /&gt;
After each loop, stored coefficient is: block[ scan_table[run] ] = level_tables[run][lindex-1].&lt;br /&gt;
The values of vlcEnd and vlcEsc are variable, as is the vlc table itself. However, they are all fixed for all the planes in the same block.&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
&lt;br /&gt;
=== Resolution table ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | res_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | width&lt;br /&gt;
| 640 || 320 || 160 || 704 || 352 || 352 || 176 || 240 || 640 || 704 || 80 || 88&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | height&lt;br /&gt;
| 480 || 240 || 120 || 224 || 240 || 288 || 144 || 180 || 240 || 240 || 60 || 72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Table 1 ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | table1_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || default&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | counter4&lt;br /&gt;
| 10 || 11 || 12 || 13 || 11 || 13 || 13 || 9&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | value19&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
default is used when !([[#ph_flags|ph_flags]] &amp;amp; 0x80)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>FyKnight</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5660</id>
		<title>Indeo 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5660"/>
		<updated>2006-08-07T05:47:20Z</updated>

		<summary type="html">&lt;p&gt;FyKnight: First version of block header and data. s/plan/plane&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: IV50&lt;br /&gt;
* Company: [[Intel]], then [[Ligos]]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/IV50/ http://samples.mplayerhq.hu/V-codecs/IV50/]&lt;br /&gt;
&lt;br /&gt;
== General description ==&lt;br /&gt;
&lt;br /&gt;
=== Frame layout ===&lt;br /&gt;
&lt;br /&gt;
The general indeo5 frames layout is composed of one global header, followed by the content of the three YUV plans.&lt;br /&gt;
&lt;br /&gt;
In this document, the global header is split into 3 parts:&lt;br /&gt;
* [[#Frame_header|Frame header]]: describe the kind of frame (I/P/B)&lt;br /&gt;
* [[#GOP_header|GOP header]]: some data which is true for all the frame in this GOP (present only in the first (I) frame of the GOP)&lt;br /&gt;
* [[#More_header|More header]]: some more data which is true only for this single frame&lt;br /&gt;
&lt;br /&gt;
Each YUV plan begin with a [[#Plan_header|Plan header]], containing values which are valid only for this single plan.&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
This codec is based on the slant transform. Other used standard techniques are huffman coding and motion compensation.&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Headers are described in some tables. Each row of those tables describes a value which may be read from the frame. Those tables and rows are presented in the order of appearance in the frame.&lt;br /&gt;
&lt;br /&gt;
Here are the meaning of each columns:&lt;br /&gt;
* '''size''': The size of this value in bits. Bits are counted in LSB to MSB order. As an example, with the byte 01110000b, reading 3 bits then 5 bits will return 000b then 01110b. Reading more than 8 bits thus reads as a little-endian value. Think of the get_bits function as filling up the return value from its LSB, using the bits from each byte starting from their LSB.&lt;br /&gt;
* '''name''': Kind of variable name, used to reference the value. When a value is named valueX, it generally means we don't know it's purpose. Lines named alignmentX means that bits reader need to skip bits until next byte boundary.&lt;br /&gt;
* '''condition''': The value is present in the frame only if this condition is matched. No condition means that the value is always present.&lt;br /&gt;
* '''nb times''': How many times the value is repeated.&lt;br /&gt;
* '''comments''': Some details about the content of the value. It may also explain that a value is repeated until a certain condition is reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== Frame header ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| 5 || const1 || || || = 0x1F always&lt;br /&gt;
|-&lt;br /&gt;
| 3  || frame_flags || || ||&lt;br /&gt;
* frame_flags &amp;amp; 0x01 =&amp;gt; backward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x02 =&amp;gt; forward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x04 =&amp;gt; null frame&lt;br /&gt;
common values:&lt;br /&gt;
* 0 =&amp;gt; I frame&lt;br /&gt;
* 1 =&amp;gt; P frame&lt;br /&gt;
* 3 =&amp;gt; B frame&lt;br /&gt;
* 6 and 7 are illegal&lt;br /&gt;
|-&lt;br /&gt;
| 8 || id_in_gop || || || frame number in GOP (0 for I frame)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
null frames don't contain anything else than this header.&lt;br /&gt;
&lt;br /&gt;
=== GOP header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in I frames only. The values in this header are valid during the whole GOP starting at this frame.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;gh_flags&amp;quot;&amp;gt;gh_flags&amp;lt;/span&amp;gt; || || || [[#gh_flags|gh_flags]] &amp;amp; 0x02 =&amp;gt; YV12 (default YVU9)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value1&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x01 || || discard in decoding&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 32 || &amp;lt;span id=&amp;quot;value2&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x20 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value3&amp;quot;&amp;gt;value3&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value4&amp;quot;&amp;gt;value4&amp;lt;/span&amp;gt; || || || legal values are 0, 1, 2 and 6&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;res_id&amp;quot;&amp;gt;res_id&amp;lt;/span&amp;gt; || || || see [[#Resolution_table|Resolution table]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;height&amp;quot;&amp;gt;height&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#res_id|res_id]] == 15 || || frame height&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;width&amp;quot;&amp;gt;width&amp;lt;/span&amp;gt; || || frame width&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  6 || &amp;lt;span id=&amp;quot;value5&amp;quot;&amp;gt;value5&amp;lt;/span&amp;gt; || || rowspan=&amp;quot;2&amp;quot; | 2*n (n == 1 always?) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value6&amp;quot;&amp;gt;value6&amp;lt;/span&amp;gt; || [[#value5|value5]] &amp;gt;&amp;gt; 3 || need to be = 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value7&amp;quot;&amp;gt;value7&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#gh_flags|gh_flags]] &amp;amp; 0x08 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value8&amp;quot;&amp;gt;value8&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment1&amp;quot;&amp;gt;alignment1&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value9&amp;quot;&amp;gt;value9&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value10&amp;quot;&amp;gt;value10&amp;lt;/span&amp;gt; || [[#value9|value9]] &amp;amp; 0x800000 || || loops while value10 &amp;amp; 0x8000 (probably some kind of VLC ?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in all kinds of frame except null.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;mh_flags&amp;quot;&amp;gt;mh_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;frame_size&amp;quot;&amp;gt;frame_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x01 || || tolal size of frame data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value11&amp;quot;&amp;gt;value11&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter1&amp;quot;&amp;gt;counter1&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#mh_flags|mh_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;2&amp;quot; | this whole block loops while [[#counter1|counter1]] != 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value12&amp;quot;&amp;gt;value12&amp;lt;/span&amp;gt; || [[#counter1|counter1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value13&amp;quot;&amp;gt;value13&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter2&amp;quot;&amp;gt;counter2&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#value13|value13]] == 7 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value14&amp;quot;&amp;gt;value14&amp;lt;/span&amp;gt; || [[#counter2|counter2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value15&amp;quot;&amp;gt;value15&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment2&amp;quot;&amp;gt;alignment2&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Plane header ===&lt;br /&gt;
&lt;br /&gt;
This header is present at the beginning of every plane.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;ph_flags&amp;quot;&amp;gt;ph_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;plan_size&amp;quot;&amp;gt;plan_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x80 || || tolal size of plan data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter3&amp;quot;&amp;gt;counter3&amp;lt;/span&amp;gt; || rowspan=&amp;quot;3&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x10 || || must be &amp;lt; 0x3E&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value16&amp;quot;&amp;gt;value16&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#counter3|counter3]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value17&amp;quot;&amp;gt;value17&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value18&amp;quot;&amp;gt;value18&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;table1_id&amp;quot;&amp;gt;table1_id&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x80 || || see [[#Table_1|Table 1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter4&amp;quot;&amp;gt;counter4&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#table1_id|table1_id]] == 7 || || rowspan=&amp;quot;2&amp;quot; | used instead of [[#Table1|Table1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value19&amp;quot;&amp;gt;value19&amp;lt;/span&amp;gt; || [[#counter4|counter4]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value20&amp;quot;&amp;gt;value20&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value21&amp;quot;&amp;gt;value21&amp;lt;/span&amp;gt; || [[#value20|value20]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  5 || &amp;lt;span id=&amp;quot;value22&amp;quot;&amp;gt;value22&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment3&amp;quot;&amp;gt;alignment3&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter5&amp;quot;&amp;gt;counter5&amp;lt;/span&amp;gt; || rowspan=&amp;quot;4&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;3&amp;quot; | all of this is repeated as long as [[#value23|value23]] is true&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;skip1&amp;quot;&amp;gt;skip1&amp;lt;/span&amp;gt; || [[#counter5|counter5]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value23&amp;quot;&amp;gt;value23&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment4&amp;quot;&amp;gt;alignment4&amp;lt;/span&amp;gt; || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planes ==&lt;br /&gt;
=== Plane data ===&lt;br /&gt;
&lt;br /&gt;
Needs more analysis. Follows plane header.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value24&amp;quot;&amp;gt;value24&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value25&amp;quot;&amp;gt;value25&amp;lt;/span&amp;gt; || ! [[#value24|value24]] || || plan_data_size = value25&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value26&amp;quot;&amp;gt;value26&amp;lt;/span&amp;gt; || [[#value25|value25]] == 1 || || plan_data_size = value26&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value27&amp;quot;&amp;gt;value27&amp;lt;/span&amp;gt; || [[#value26|value26]] == 0xFF || || plan_data_size = value27&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block header ===&lt;br /&gt;
&lt;br /&gt;
One of these for each block after plane data. Conditions/loops not yet investigated.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value28&amp;quot;&amp;gt;value28&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value29&amp;quot;&amp;gt;value29&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value30&amp;quot;&amp;gt;value30&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value31&amp;quot;&amp;gt;value31&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value32&amp;quot;&amp;gt;value32&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value33&amp;quot;&amp;gt;value33&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value34&amp;quot;&amp;gt;value34&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value35&amp;quot;&amp;gt;value35&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block data ===&lt;br /&gt;
&lt;br /&gt;
Follows block header. Conditions/loops not yet investigated.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value35&amp;quot;&amp;gt;value35&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value36&amp;quot;&amp;gt;value36&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value37&amp;quot;&amp;gt;value37&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  huffman || &amp;lt;span id=&amp;quot;value38&amp;quot;&amp;gt;value38&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
&lt;br /&gt;
=== Resolution table ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | res_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | width&lt;br /&gt;
| 640 || 320 || 160 || 704 || 352 || 352 || 176 || 240 || 640 || 704 || 80 || 88&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | height&lt;br /&gt;
| 480 || 240 || 120 || 224 || 240 || 288 || 144 || 180 || 240 || 240 || 60 || 72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Table 1 ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | table1_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || default&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | counter4&lt;br /&gt;
| 10 || 11 || 12 || 13 || 11 || 13 || 13 || 9&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | value19&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
default is used when !([[#ph_flags|ph_flags]] &amp;amp; 0x80)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>FyKnight</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5659</id>
		<title>Indeo 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5659"/>
		<updated>2006-08-06T16:56:00Z</updated>

		<summary type="html">&lt;p&gt;FyKnight: Fixed bit order description since it's little-endian. Added a few remarks.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: IV50&lt;br /&gt;
* Company: [[Intel]], then [[Ligos]]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/IV50/ http://samples.mplayerhq.hu/V-codecs/IV50/]&lt;br /&gt;
&lt;br /&gt;
== General description ==&lt;br /&gt;
&lt;br /&gt;
=== Frame layout ===&lt;br /&gt;
&lt;br /&gt;
The general indeo5 frames layout is composed of one global header, followed by the content of the three YUV plans.&lt;br /&gt;
&lt;br /&gt;
In this document, the global header is split into 3 parts:&lt;br /&gt;
* [[#Frame_header|Frame header]]: describe the kind of frame (I/P/B)&lt;br /&gt;
* [[#GOP_header|GOP header]]: some data which is true for all the frame in this GOP (present only in the first (I) frame of the GOP)&lt;br /&gt;
* [[#More_header|More header]]: some more data which is true only for this single frame&lt;br /&gt;
&lt;br /&gt;
Each YUV plan begin with a [[#Plan_header|Plan header]], containing values which are valid only for this single plan.&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
This codec is based on the slant transform. Other used standard techniques are huffman coding and motion compensation.&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Headers are described in some tables. Each row of those tables describes a value which may be read from the frame. Those tables and rows are presented in the order of appearance in the frame.&lt;br /&gt;
&lt;br /&gt;
Here are the meaning of each columns:&lt;br /&gt;
* '''size''': The size of this value in bits. Bits are counted in LSB to MSB order. As an example, with the byte 01110000b, reading 3 bits then 5 bits will return 000b then 01110b. Reading more than 8 bits thus reads as a little-endian value. Think of the get_bits function as filling up the return value from its LSB, using the bits from each byte starting from their LSB.&lt;br /&gt;
* '''name''': Kind of variable name, used to reference the value. When a value is named valueX, it generally means we don't know it's purpose. Lines named alignmentX means that bits reader need to skip bits until next byte boundary.&lt;br /&gt;
* '''condition''': The value is present in the frame only if this condition is matched. No condition means that the value is always present.&lt;br /&gt;
* '''nb times''': How many times the value is repeated.&lt;br /&gt;
* '''comments''': Some details about the content of the value. It may also explain that a value is repeated until a certain condition is reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== Frame header ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| 5 || const1 || || || = 0x1F always&lt;br /&gt;
|-&lt;br /&gt;
| 3  || frame_flags || || ||&lt;br /&gt;
* frame_flags &amp;amp; 0x01 =&amp;gt; backward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x02 =&amp;gt; forward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x04 =&amp;gt; null frame&lt;br /&gt;
common values:&lt;br /&gt;
* 0 =&amp;gt; I frame&lt;br /&gt;
* 1 =&amp;gt; P frame&lt;br /&gt;
* 3 =&amp;gt; B frame&lt;br /&gt;
* 6 and 7 are illegal&lt;br /&gt;
|-&lt;br /&gt;
| 8 || id_in_gop || || || frame number in GOP (0 for I frame)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
null frames don't contain anything else than this header.&lt;br /&gt;
&lt;br /&gt;
=== GOP header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in I frames only. The values in this header are valid during the whole GOP starting at this frame.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;gh_flags&amp;quot;&amp;gt;gh_flags&amp;lt;/span&amp;gt; || || || [[#gh_flags|gh_flags]] &amp;amp; 0x02 =&amp;gt; YV12 (default YVU9)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value1&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x01 || || discard in decoding&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 32 || &amp;lt;span id=&amp;quot;value2&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x20 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value3&amp;quot;&amp;gt;value3&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value4&amp;quot;&amp;gt;value4&amp;lt;/span&amp;gt; || || || legal values are 0, 1, 2 and 6&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;res_id&amp;quot;&amp;gt;res_id&amp;lt;/span&amp;gt; || || || see [[#Resolution_table|Resolution table]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;height&amp;quot;&amp;gt;height&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#res_id|res_id]] == 15 || || frame height&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;width&amp;quot;&amp;gt;width&amp;lt;/span&amp;gt; || || frame width&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  6 || &amp;lt;span id=&amp;quot;value5&amp;quot;&amp;gt;value5&amp;lt;/span&amp;gt; || || rowspan=&amp;quot;2&amp;quot; | 2*n (n == 1 always?) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value6&amp;quot;&amp;gt;value6&amp;lt;/span&amp;gt; || [[#value5|value5]] &amp;gt;&amp;gt; 3 || need to be = 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value7&amp;quot;&amp;gt;value7&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#gh_flags|gh_flags]] &amp;amp; 0x08 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value8&amp;quot;&amp;gt;value8&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment1&amp;quot;&amp;gt;alignment1&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value9&amp;quot;&amp;gt;value9&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value10&amp;quot;&amp;gt;value10&amp;lt;/span&amp;gt; || [[#value9|value9]] &amp;amp; 0x800000 || || loops while value10 &amp;amp; 0x8000 (probably some kind of VLC ?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in all kinds of frame except null.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;mh_flags&amp;quot;&amp;gt;mh_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;frame_size&amp;quot;&amp;gt;frame_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x01 || || tolal size of frame data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value11&amp;quot;&amp;gt;value11&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter1&amp;quot;&amp;gt;counter1&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#mh_flags|mh_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;2&amp;quot; | this whole block loops while [[#counter1|counter1]] != 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value12&amp;quot;&amp;gt;value12&amp;lt;/span&amp;gt; || [[#counter1|counter1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value13&amp;quot;&amp;gt;value13&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter2&amp;quot;&amp;gt;counter2&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#value13|value13]] == 7 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value14&amp;quot;&amp;gt;value14&amp;lt;/span&amp;gt; || [[#counter2|counter2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value15&amp;quot;&amp;gt;value15&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment2&amp;quot;&amp;gt;alignment2&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Plan header ===&lt;br /&gt;
&lt;br /&gt;
This header is present at the beginning of every plan.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;ph_flags&amp;quot;&amp;gt;ph_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;plan_size&amp;quot;&amp;gt;plan_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x80 || || tolal size of plan data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter3&amp;quot;&amp;gt;counter3&amp;lt;/span&amp;gt; || rowspan=&amp;quot;3&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x10 || || must be &amp;lt; 0x3E&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value16&amp;quot;&amp;gt;value16&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#counter3|counter3]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value17&amp;quot;&amp;gt;value17&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value18&amp;quot;&amp;gt;value18&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;table1_id&amp;quot;&amp;gt;table1_id&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x80 || || see [[#Table_1|Table 1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter4&amp;quot;&amp;gt;counter4&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#table1_id|table1_id]] == 7 || || rowspan=&amp;quot;2&amp;quot; | used instead of [[#Table1|Table1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value19&amp;quot;&amp;gt;value19&amp;lt;/span&amp;gt; || [[#counter4|counter4]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value20&amp;quot;&amp;gt;value20&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value21&amp;quot;&amp;gt;value21&amp;lt;/span&amp;gt; || [[#value20|value20]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  5 || &amp;lt;span id=&amp;quot;value22&amp;quot;&amp;gt;value22&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment3&amp;quot;&amp;gt;alignment3&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter5&amp;quot;&amp;gt;counter5&amp;lt;/span&amp;gt; || rowspan=&amp;quot;4&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;3&amp;quot; | all of this is repeated as long as [[#value23|value23]] is true&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;skip1&amp;quot;&amp;gt;skip1&amp;lt;/span&amp;gt; || [[#counter5|counter5]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value23&amp;quot;&amp;gt;value23&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment4&amp;quot;&amp;gt;alignment4&amp;lt;/span&amp;gt; || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plan data ==&lt;br /&gt;
&lt;br /&gt;
This is where the actual data is, but this still need to be reverse engineered :-(&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value24&amp;quot;&amp;gt;value24&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value25&amp;quot;&amp;gt;value25&amp;lt;/span&amp;gt; || ! [[#value24|value24]] || || plan_data_size = value25&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value26&amp;quot;&amp;gt;value26&amp;lt;/span&amp;gt; || [[#value25|value25]] == 1 || || plan_data_size = value26&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value27&amp;quot;&amp;gt;value27&amp;lt;/span&amp;gt; || [[#value26|value26]] == 0xFF || || plan_data_size = value27&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || ... || || || more data to analyze&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
&lt;br /&gt;
=== Resolution table ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | res_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | width&lt;br /&gt;
| 640 || 320 || 160 || 704 || 352 || 352 || 176 || 240 || 640 || 704 || 80 || 88&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | height&lt;br /&gt;
| 480 || 240 || 120 || 224 || 240 || 288 || 144 || 180 || 240 || 240 || 60 || 72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Table 1 ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | table1_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || default&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | counter4&lt;br /&gt;
| 10 || 11 || 12 || 13 || 11 || 13 || 13 || 9&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | value19&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
default is used when !([[#ph_flags|ph_flags]] &amp;amp; 0x80)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>FyKnight</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5636</id>
		<title>Indeo 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Indeo_5&amp;diff=5636"/>
		<updated>2006-07-24T10:28:05Z</updated>

		<summary type="html">&lt;p&gt;FyKnight: Fixed link to samples.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: IV50&lt;br /&gt;
* Company: [[Intel]], then [[Ligos]]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/IV50/ http://samples.mplayerhq.hu/V-codecs/IV50/]&lt;br /&gt;
&lt;br /&gt;
== General description ==&lt;br /&gt;
&lt;br /&gt;
=== Frame layout ===&lt;br /&gt;
&lt;br /&gt;
The general indeo5 frames layout is composed of one global header, followed by the content of the three YUV plans.&lt;br /&gt;
&lt;br /&gt;
In this document, the global header is split into 3 parts:&lt;br /&gt;
* [[#Frame_header|Frame header]]: describe the kind of frame (I/P/B)&lt;br /&gt;
* [[#GOP_header|GOP header]]: some data which is true for all the frame in this GOP (present only in the first (I) frame of the GOP)&lt;br /&gt;
* [[#More_header|More header]]: some more data which is true only for this single frame&lt;br /&gt;
&lt;br /&gt;
Each YUV plan begin with a [[#Plan_header|Plan header]], containing values which are valid only for this single plan.&lt;br /&gt;
&lt;br /&gt;
=== Encoding ===&lt;br /&gt;
&lt;br /&gt;
This codec is based on the slant transform. Other used standard techniques are huffman coding and motion compensation.&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Headers are described in some tables. Each row of those tables describes a value which may be read from the frame. Those tables and rows are presented in the order of appearance in the frame.&lt;br /&gt;
&lt;br /&gt;
Here are the meaning of each columns:&lt;br /&gt;
* '''size''': The size of this value in bits. Bits are counted in MSB to LSB order. As an example, with the byte 01110000b, reading 3 bits then 5 bits will return 011b then 10000b.&lt;br /&gt;
* '''name''': Kind of variable name, used to reference the value. When a value is named valueX, it generally means we don't know it's purpose. Lines named alignmentX means that bits reader need to skip bits until next byte boundary.&lt;br /&gt;
* '''condition''': The value is present in the frame only if this condition is matched. No condition means that the value is always present.&lt;br /&gt;
* '''nb times''': How many times the value is repeated.&lt;br /&gt;
* '''comments''': Some details about the content of the value. It may also explain that a value is repeated until a certain condition is reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Headers ==&lt;br /&gt;
&lt;br /&gt;
=== Frame header ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| 3  || frame_flags || || ||&lt;br /&gt;
* frame_flags &amp;amp; 0x01 =&amp;gt; backward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x02 =&amp;gt; forward predictive&lt;br /&gt;
* frame_flags &amp;amp; 0x04 =&amp;gt; null frame&lt;br /&gt;
common values:&lt;br /&gt;
* 0 =&amp;gt; I frame&lt;br /&gt;
* 1 =&amp;gt; P frame&lt;br /&gt;
* 3 =&amp;gt; B frame&lt;br /&gt;
|-&lt;br /&gt;
| 5 || const1 || || || = 0x1F always&lt;br /&gt;
|-&lt;br /&gt;
| 8 || id_in_gop || || || frame number in GOP (0 for I frame)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
null frames don't contain anything else than this header.&lt;br /&gt;
&lt;br /&gt;
=== GOP header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in I frames only. The values in this header are valid during the whole GOP starting at this frame.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;gh_flags&amp;quot;&amp;gt;gh_flags&amp;lt;/span&amp;gt; || || || [[#gh_flags|gh_flags]] &amp;amp; 0x02 =&amp;gt; YV12 (default YVU9)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value1&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x01 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 32 || &amp;lt;span id=&amp;quot;value2&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x20 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value3&amp;quot;&amp;gt;value3&amp;lt;/span&amp;gt; || [[#gh_flags|gh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value4&amp;quot;&amp;gt;value4&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;res_id&amp;quot;&amp;gt;res_id&amp;lt;/span&amp;gt; || || || see [[#Resolution_table|Resolution table]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;height&amp;quot;&amp;gt;height&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#res_id|res_id]] == 15 || || frame height&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 13 || &amp;lt;span id=&amp;quot;width&amp;quot;&amp;gt;width&amp;lt;/span&amp;gt; || || frame width&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  6 || &amp;lt;span id=&amp;quot;value5&amp;quot;&amp;gt;value5&amp;lt;/span&amp;gt; || || rowspan=&amp;quot;2&amp;quot; | 2*n (n == 1 always?) ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  2 || &amp;lt;span id=&amp;quot;value6&amp;quot;&amp;gt;value6&amp;lt;/span&amp;gt; || [[#value5|value5]] &amp;gt;&amp;gt; 3 || need to be = 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value7&amp;quot;&amp;gt;value7&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#gh_flags|gh_flags]] &amp;amp; 0x08 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value8&amp;quot;&amp;gt;value8&amp;lt;/span&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment1&amp;quot;&amp;gt;alignment1&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value9&amp;quot;&amp;gt;value9&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value10&amp;quot;&amp;gt;value10&amp;lt;/span&amp;gt; || [[#value9|value9]] &amp;amp; 0x800000 || || loops while value10 &amp;amp; 0x8000 (probably some kind of VLC ?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More header ===&lt;br /&gt;
&lt;br /&gt;
This header is present in all kinds of frame except null.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;mh_flags&amp;quot;&amp;gt;mh_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;frame_size&amp;quot;&amp;gt;frame_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x01 || || tolal size of frame data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value11&amp;quot;&amp;gt;value11&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter1&amp;quot;&amp;gt;counter1&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#mh_flags|mh_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;2&amp;quot; | this whole block loops while [[#counter1|counter1]] != 0&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value12&amp;quot;&amp;gt;value12&amp;lt;/span&amp;gt; || [[#counter1|counter1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value13&amp;quot;&amp;gt;value13&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter2&amp;quot;&amp;gt;counter2&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#value13|value13]] == 7 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value14&amp;quot;&amp;gt;value14&amp;lt;/span&amp;gt; || [[#counter2|counter2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value15&amp;quot;&amp;gt;value15&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment2&amp;quot;&amp;gt;alignment2&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Plan header ===&lt;br /&gt;
&lt;br /&gt;
This header is present at the beginning of every plan.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;ph_flags&amp;quot;&amp;gt;ph_flags&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;plan_size&amp;quot;&amp;gt;plan_size&amp;lt;/span&amp;gt; || [[#mh_flags|mh_flags]] &amp;amp; 0x80 || || tolal size of plan data&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter3&amp;quot;&amp;gt;counter3&amp;lt;/span&amp;gt; || rowspan=&amp;quot;3&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x10 || || must be &amp;lt; 0x3E&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value16&amp;quot;&amp;gt;value16&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#counter3|counter3]] ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value17&amp;quot;&amp;gt;value17&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;value18&amp;quot;&amp;gt;value18&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x40 || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  3 || &amp;lt;span id=&amp;quot;table1_id&amp;quot;&amp;gt;table1_id&amp;lt;/span&amp;gt; || [[#ph_flags|ph_flags]] &amp;amp; 0x80 || || see [[#Table_1|Table 1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;counter4&amp;quot;&amp;gt;counter4&amp;lt;/span&amp;gt; || rowspan=&amp;quot;2&amp;quot; | [[#table1_id|table1_id]] == 7 || || rowspan=&amp;quot;2&amp;quot; | used instead of [[#Table1|Table1]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  4 || &amp;lt;span id=&amp;quot;value19&amp;quot;&amp;gt;value19&amp;lt;/span&amp;gt; || [[#counter4|counter4]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value20&amp;quot;&amp;gt;value20&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 16 || &amp;lt;span id=&amp;quot;value21&amp;quot;&amp;gt;value21&amp;lt;/span&amp;gt; || [[#value20|value20]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  5 || &amp;lt;span id=&amp;quot;value22&amp;quot;&amp;gt;value22&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment3&amp;quot;&amp;gt;alignment3&amp;lt;/span&amp;gt; || || || align bits reader on next byte&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;counter5&amp;quot;&amp;gt;counter5&amp;lt;/span&amp;gt; || rowspan=&amp;quot;4&amp;quot; | [[#ph_flags|ph_flags]] &amp;amp; 0x20 || || rowspan=&amp;quot;3&amp;quot; | all of this is repeated as long as [[#value23|value23]] is true&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;skip1&amp;quot;&amp;gt;skip1&amp;lt;/span&amp;gt; || [[#counter5|counter5]]&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value23&amp;quot;&amp;gt;value23&amp;lt;/span&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || &amp;lt;span id=&amp;quot;alignment4&amp;quot;&amp;gt;alignment4&amp;lt;/span&amp;gt; || || align bits reader on next byte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Plan data ==&lt;br /&gt;
&lt;br /&gt;
This is where the actual data is, but this still need to be reverse engineered :-(&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
|- bgcolor=&amp;quot;#f0f0f0&amp;quot; |&lt;br /&gt;
! size !! name !! condition !! nb times !! comments&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value24&amp;quot;&amp;gt;value24&amp;lt;/span&amp;gt; || || ||&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  1 || &amp;lt;span id=&amp;quot;value25&amp;quot;&amp;gt;value25&amp;lt;/span&amp;gt; || ! [[#value24|value24]] || || plan_data_size = value25&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; |  8 || &amp;lt;span id=&amp;quot;value26&amp;quot;&amp;gt;value26&amp;lt;/span&amp;gt; || [[#value25|value25]] == 1 || || plan_data_size = value26&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | 24 || &amp;lt;span id=&amp;quot;value27&amp;quot;&amp;gt;value27&amp;lt;/span&amp;gt; || [[#value26|value26]] == 0xFF || || plan_data_size = value27&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;right&amp;quot; | ?? || ... || || || more data to analyze&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Annexes ==&lt;br /&gt;
&lt;br /&gt;
=== Resolution table ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | res_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | width&lt;br /&gt;
| 640 || 320 || 160 || 704 || 352 || 352 || 176 || 240 || 640 || 704 || 80 || 88&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | height&lt;br /&gt;
| 480 || 240 || 120 || 224 || 240 || 288 || 144 || 180 || 240 || 240 || 60 || 72&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Table 1 ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; style=&amp;quot;border-collapse: collapse; border-style: dashed; border-color: #2f6fab;&amp;quot;&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | table1_id&lt;br /&gt;
| 0 || 1 || 2 || 3 || 4 || 5 || 6 || default&lt;br /&gt;
|-&lt;br /&gt;
! bgcolor=&amp;quot;#f0f0f0&amp;quot; | counter4&lt;br /&gt;
| 10 || 11 || 12 || 13 || 11 || 13 || 13 || 9&lt;br /&gt;
|-&lt;br /&gt;
! valign=&amp;quot;top&amp;quot; bgcolor=&amp;quot;#f0f0f0&amp;quot; | value19&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
default is used when !([[#ph_flags|ph_flags]] &amp;amp; 0x80)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>FyKnight</name></author>
	</entry>
</feed>