<?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=Temporance</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=Temporance"/>
	<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php/Special:Contributions/Temporance"/>
	<updated>2026-06-09T20:59:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=6397</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=6397"/>
		<updated>2006-11-01T15:27:40Z</updated>

		<summary type="html">&lt;p&gt;Temporance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://samples.mplayerhq.hu/V-codecs/VP6/ http://samples.mplayerhq.hu/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
&lt;br /&gt;
An early open source implementation could be found at http://libvp62.sourceforge.net/, but&lt;br /&gt;
was driven underground by On2 on copyright infringement claims.&lt;br /&gt;
&lt;br /&gt;
The [[FFmpeg]] implementation supports VP62 to the extent necessary to play all known samples, but not VP61 and VP60.&lt;br /&gt;
&lt;br /&gt;
A decoder implementation may be found in the FFMPEG source file [http://svn.mplayerhq.hu/ffmpeg/trunk/libavcodec/vp6.c?view=markup vp6.c]&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding and an 8x8 iDCT is used.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like [[MPEG-2]], [[MPEG-4]] parts 2 and 10.  Each [[MB]] (macroblock) takes one of the following modes (&amp;quot;[[MV]]&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmarked frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x0 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0) { || || ||0 equals to INTRA_FRAME&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have values different from the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit [http://en.wikipedia.org/wiki/Range_encoding range coding] scheme to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two bytes of the AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.&lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 ) )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; ( (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated while (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode an n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or a small variation) of the one used for the [[On2 VP3|VP3]] decoder in [[FFmpeg]] [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg], the original vp3 iDCT code is here [http://svn.xiph.org/trunk/vp32/CoreLibs/CDXV/Vp31/dx/generic/IDctPart.c].&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Codecs]]&lt;br /&gt;
[[Category:Incomplete Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4841</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4841"/>
		<updated>2006-05-05T07:17:23Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Decoding a Binary Value */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding and an 8x8 iDCT is used.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like [[MPEG-2]], [[MPEG-4]] parts 2 and 10.  Each [[MB]] (macroblock) takes one of the following modes (&amp;quot;[[MV]]&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmarked frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have values different from the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit [http://en.wikipedia.org/wiki/Range_encoding range coding] scheme to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two bytes of the AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.&lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 ) )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; ( (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated while (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode an n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or a small variation) of the one used for the [[On2 VP3|VP3]] decoder in [[FFmpeg]] [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg], the original vp3 iDCT code is here [http://svn.xiph.org/trunk/vp32/CoreLibs/CDXV/Vp31/dx/generic/IDctPart.c].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4825</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4825"/>
		<updated>2006-05-04T20:43:33Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding and an 8x8 iDCT is used.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like [[MPEG-2]], [[MPEG-4]] parts 2 and 10.  Each [[MB]] (macroblock) takes one of the following modes (&amp;quot;[[MV]]&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmarked frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have values different from the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit [http://en.wikipedia.org/wiki/Range_encoding range coding] scheme to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two bytes of the AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.&lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated while (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode an n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or a small variation) of the one used for the [[On2 VP3|VP3]] decoder in [[FFmpeg]] [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4813</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4813"/>
		<updated>2006-05-04T14:10:25Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Initialization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit [http://en.wikipedia.org/wiki/Range_encoding range coding] scheme to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two bytes of AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.&lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated while (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode a n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or small variation) as the one used for the VP3 decoder in ffmpeg [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4812</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4812"/>
		<updated>2006-05-04T14:09:47Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Decoding a Binary Value */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit [http://en.wikipedia.org/wiki/Range_encoding range coding] scheme to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two byte of AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.  &lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated while (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode a n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or small variation) as the one used for the VP3 decoder in ffmpeg [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4811</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4811"/>
		<updated>2006-05-04T14:08:03Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Entropy Coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit [http://en.wikipedia.org/wiki/Range_encoding range coding] scheme to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two byte of AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.  &lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated until (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode a n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or small variation) as the one used for the VP3 decoder in ffmpeg [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4810</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4810"/>
		<updated>2006-05-04T14:07:38Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Entropy Coding */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit scheme [http://en.wikipedia.org/wiki/Range_encoding range coding scheme] to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two byte of AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.  &lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated until (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode a n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or small variation) as the one used for the VP3 decoder in ffmpeg [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4809</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4809"/>
		<updated>2006-05-04T14:06:08Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic  (range?) coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Entropy Coding ===&lt;br /&gt;
&lt;br /&gt;
Described here is the decoding process for the arithmetically-coded (AC) parts of the bitstream.  VP6 uses a 16-bit scheme [http://en.wikipedia.org/wiki/Range_encoding range coding scheme] to code binary symbols.&lt;br /&gt;
&lt;br /&gt;
The AC decoder maintains three state variables:  ''code'', ''mask'' and ''high''.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Initialization====&lt;br /&gt;
&lt;br /&gt;
At initialization, the first two byte of AC bitstream are shifted into ''code''.  The variable ''high'' is set to 0xff00.  The variable ''mask'' is set to 0xffff.  &lt;br /&gt;
&lt;br /&gt;
====Decoding a Binary Value====&lt;br /&gt;
&lt;br /&gt;
Each binary symbol has an associated probability ''p'' in the range 0 to 0xff.  &lt;br /&gt;
&lt;br /&gt;
A threshold, ''t'', is computed thus:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0x100 + ( 0xff00 &amp;amp; ( ( (''high''-0x100) * ''p'' ) &amp;gt;&amp;gt; 8 )&lt;br /&gt;
&lt;br /&gt;
Equiprobable binary symbols are treated somewhat differently:&lt;br /&gt;
&lt;br /&gt;
: ''t'' = 0xff00 &amp;amp; (''high''+0x100) &amp;gt;&amp;gt; 1 )&lt;br /&gt;
&lt;br /&gt;
The binary value may then be decoded by comparing ''code'' and ''t''.  If ''code'' is less than ''t'', the binary value is decoded as 0.  If ''code'' is equal to or greater than ''t'', the binary value is decoded as 1.&lt;br /&gt;
&lt;br /&gt;
If a 1 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''high'' - ''t''&lt;br /&gt;
: ''code'' = ''code'' - ''t''&lt;br /&gt;
&lt;br /&gt;
If a 0 was decoded, then&lt;br /&gt;
&lt;br /&gt;
: ''high'' = ''t''&lt;br /&gt;
&lt;br /&gt;
The following renormalization is now repeated until (''high'' &amp;amp; 0x8000) is non-zero.&lt;br /&gt;
&lt;br /&gt;
: ''high'' = 2 * ''high''&lt;br /&gt;
: ''code'' = 2 * ''code''&lt;br /&gt;
: ''mask'' = 2 * ''mask''&lt;br /&gt;
: if ((''mask'' &amp;amp; 0xff) == 0x00) {&lt;br /&gt;
:: ''code'' = ''code'' | &amp;lt;i&amp;gt;next byte from bitstream&amp;lt;/i&amp;gt;&lt;br /&gt;
:: ''mask'' = ''mask'' | 0xff&lt;br /&gt;
:}&lt;br /&gt;
&lt;br /&gt;
====Decoding an Equiprobable n-bit Integer Value====&lt;br /&gt;
&lt;br /&gt;
Integer values are coded as a big-endian sequence of equiprobable binary values.  To decode a n-bit equiprobable integer value, n equiprobable binary values should be decoded using the sequence above and left-shifted into an integral result variable.&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or small variation) as the one used for the VP3 decoder in ffmpeg [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4808</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4808"/>
		<updated>2006-05-04T11:36:53Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is anticipated that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Inverse DCT ===&lt;br /&gt;
&lt;br /&gt;
Inverse DCT is performed on 8x8 blocks of pixels. The algorithm used is the same (or small variation) as the one used for the VP3 decoder in ffmpeg [http://www1.mplayerhq.hu/cgi-bin/cvsweb.cgi/ffmpeg/libavcodec/vp3dsp.c?rev=1.9&amp;amp;content-type=text/x-cvsweb-markup&amp;amp;cvsroot=FFMpeg].&lt;br /&gt;
&lt;br /&gt;
[[Category:Undiscovered Video Codecs]]&lt;br /&gt;
[[Category:Video Codecs]]&lt;/div&gt;</summary>
		<author><name>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4806</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4806"/>
		<updated>2006-05-04T10:59:52Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is hoped that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobable 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4805</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4805"/>
		<updated>2006-05-04T10:58:58Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is hoped that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || bookmark == 0x1 means this frame will be the next bookmark frame&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobably 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit || Ignored&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4804</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4804"/>
		<updated>2006-05-04T10:57:30Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is hoped that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.  &lt;br /&gt;
&lt;br /&gt;
Please do not submit any copyrighted text or code here.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || Bookmark this frame for use as a future reference&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobably 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit ||&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4803</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4803"/>
		<updated>2006-05-04T10:53:45Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker1 || Equiprobable 2-bit || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable 1-bit || Bookmark this frame for use as a future reference&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable 1-bit || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; filter_info == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode1 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| if (filter_mode1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter_threshold1 || Equiprobably 5-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| filter_motion_param || Equiprobable 3-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode2 || Equiprobable 1-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| }&lt;br /&gt;
|-&lt;br /&gt;
| filter_mode3 || Equiprobable 4-bit ||&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| marker2 || Equiprobable 1-bit ||&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4802</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4802"/>
		<updated>2006-05-04T10:43:44Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) {&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next bit (which should be on a byte boundary):&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Type !! Number of bits !! Semantics&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| marker || Equiprobable || 2 || Ignored&lt;br /&gt;
|-&lt;br /&gt;
| } else {&lt;br /&gt;
|-&lt;br /&gt;
| bookmark || Equiprobable || 1 || Bookmark this frame for use as a future reference&lt;br /&gt;
|-&lt;br /&gt;
| filter1 || Equiprobable || 1 || &lt;br /&gt;
|-&lt;br /&gt;
| if (filter1 == 0x1) {&lt;br /&gt;
|-&lt;br /&gt;
| filter2 || Equiprobable || 1 || &lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|-&lt;br /&gt;
| filter_info || Equiprobable || 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| }&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4801</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4801"/>
		<updated>2006-05-04T10:35:32Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0x1 signifies an intra frame&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| if (frame_mode == 0x01) &lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|-&lt;br /&gt;
| } &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
Arithmetic coding commences at the next byte:&lt;br /&gt;
&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4800</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4800"/>
		<updated>2006-05-04T10:29:41Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Inter Frame (P-frame) Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Intra Frame (I-frame) Header ===&lt;br /&gt;
&lt;br /&gt;
The intra frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Constant || Must be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Inter Frame (P-frame) Header ===&lt;br /&gt;
&lt;br /&gt;
The inter frame header is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Constant || Must be 0x0&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|}&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4799</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4799"/>
		<updated>2006-05-04T10:28:51Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Intra Frame (I-frame) Header ===&lt;br /&gt;
&lt;br /&gt;
The intra frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Constant || Must be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means interlace will be used&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Inter Frame (P-frame) Header ===&lt;br /&gt;
&lt;br /&gt;
The inter frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Constant || Must be 0x0&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|}&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4796</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4796"/>
		<updated>2006-05-04T10:26:35Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Intra Frame Header ===&lt;br /&gt;
&lt;br /&gt;
The intra frame header commences with a section that is encoded using conventional big-endian bit packing.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Constant || Must be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means frame is interlaced&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous intra frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic Coding ===&lt;br /&gt;
&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4795</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4795"/>
		<updated>2006-05-04T10:09:41Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
This is the only part of the bitstream that is not encoded using arithmetic compression.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0=intra 1=inter&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (1) means frame is interlaced&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic Coding ===&lt;br /&gt;
&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4794</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4794"/>
		<updated>2006-05-04T10:08:39Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
This is the only part of the bitstream that is not encoded using arithmetic compression.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0=intra 1=inter&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (0x1) means frame is interlaced&lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic Coding ===&lt;br /&gt;
&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4793</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4793"/>
		<updated>2006-05-04T10:06:53Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Frame Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
This is the only part of the bitstream that is not encoded using arithmetic compression.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0=intra 1=inter&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter valid range 0..63&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 0x1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || true (0x1) means frame is interlaced&lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic Coding ===&lt;br /&gt;
&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4792</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4792"/>
		<updated>2006-05-04T10:03:36Z</updated>

		<summary type="html">&lt;p&gt;Temporance: /* Macroblocks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame reference&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
This is the only part of the bitstream that is not encoded using arithmetic compression.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0=intra 1=inter&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic Coding ===&lt;br /&gt;
&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>Temporance</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4791</id>
		<title>On2 VP6</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=On2_VP6&amp;diff=4791"/>
		<updated>2006-05-04T10:02:40Z</updated>

		<summary type="html">&lt;p&gt;Temporance: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* FOURCCs: VP60, VP61, VP62&lt;br /&gt;
* Company: [[On2]]&lt;br /&gt;
* Whitepaper: [http://www.on2.com/cms-data/pdf/1125607149174329.pdf http://www.on2.com/cms-data/pdf/1125607149174329.pdf]&lt;br /&gt;
* Samples: [http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/ http://www.mplayerhq.hu/MPlayer/samples/V-codecs/VP6/]&lt;br /&gt;
&lt;br /&gt;
== Other Implementations ==&lt;br /&gt;
&lt;br /&gt;
Early Open source implementation could be found here http://libvp62.sourceforge.net/.&lt;br /&gt;
(broken link, project removed)&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The aim here is to open this standard with a full description of the bitstream format and decoding process.  Contributors from On2 especially encouraged here, but it is suspected that this section will be completed through reverse engineering and by people who saw libvp62 source code before it was censored.&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
VP6 uses unidirectional (&amp;quot;P-frame&amp;quot;) and intra-frame (within the current frame) prediction. Entropy coding is performed using arithmetic coding.  The format supports dynamic adjustment of encoded video resolution.&lt;br /&gt;
&lt;br /&gt;
=== Macroblocks ===&lt;br /&gt;
&lt;br /&gt;
Each video frame is composed of an array of 16x16 macroblocks, just like MPEG-2, MPEG-4 parts 2 and 10.  Each MB (macroblock) takes one of the following modes (&amp;quot;MV&amp;quot; means &amp;quot;motion vector&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
* Intra MB&lt;br /&gt;
* Inter MB, null MV, previous frame reference&lt;br /&gt;
* Inter MB, differential MV, previous frame reference&lt;br /&gt;
* Inter MB, four MVs, previous frame reference&lt;br /&gt;
* Inter MB, MV 1, previous frame reference&lt;br /&gt;
* Inter MB, MV 2, previous frame reference&lt;br /&gt;
* Inter MB, null MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, differential MV, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 1, bookmarked frame reference&lt;br /&gt;
* Inter MB, MV 2, bookmared frame referenc&lt;br /&gt;
&lt;br /&gt;
=== Frame Header ===&lt;br /&gt;
&lt;br /&gt;
This is the only part of the bitstream that is not encoded using arithmetic compression.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Syntax !! Number of bits !! Type !! Semantics&lt;br /&gt;
|- &lt;br /&gt;
| frame_mode || 1 || Enum || 0=intra 1=inter&lt;br /&gt;
|-&lt;br /&gt;
| qp || 6 || Unsigned || Quantization parameter&lt;br /&gt;
|-&lt;br /&gt;
| marker_bit || 1 || Constant || Value should be 1&lt;br /&gt;
|-&lt;br /&gt;
| version || 7 || Constant || Value should be 0x23&lt;br /&gt;
|-&lt;br /&gt;
| interlace || 1 || Boolean || &lt;br /&gt;
|-&lt;br /&gt;
| dim_x || 8 || Unsigned || Macroblock height of video &lt;br /&gt;
|-&lt;br /&gt;
| dim_y || 8 || Unsigned || Macroblock width of video &lt;br /&gt;
|-&lt;br /&gt;
| render_x || 8 || Unsigned || Display height of video &lt;br /&gt;
|-&lt;br /&gt;
| render_y || 8 || Unsigned || Display width of video&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If dim_x or dim_y have different values to the previous frame, then the resolution of the encoded image has changed.&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic Coding ===&lt;br /&gt;
&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>Temporance</name></author>
	</entry>
</feed>