Recent from talks
Contribute something
Nothing was collected or created yet.
| VP8 | |
|---|---|
| Internet media type | video/VP8 |
| Developed by | On2 Technologies, Google |
| Initial release | September 13, 2008 |
| Type of format | Video coding format |
| Contained by | WebM, Matroska |
| Extended from | VP7 |
| Extended to | VP9 |
| Standard | RFC 6386 |
| Open format? | Yes (specification under CC-by)[1] |
| Free format? | See § History |
VP8 is an open and royalty-free video compression format released by On2 Technologies in 2008.
Initially released as a proprietary successor to On2's previous VP7 format, VP8 was released as an open and royalty-free format in May 2010 after Google acquired On2 Technologies. Google provided an irrevocable patent promise on its patents for implementing the VP8 format, and released a specification of the format under the Creative Commons Attribution 3.0 license.[1] That same year, Google also released libvpx, the reference implementation of VP8, under the revised BSD license.[2]
Opera, Firefox, Chrome, Pale Moon, and Chromium support playing VP8 video in HTML video tag.[3] Internet Explorer officially supports VP8 if the user has the DirectShow filter installed.[4][5] According to Google, VP8 is mainly used in connection with WebRTC and as a format for short looped animations, as a replacement for the Graphics Interchange Format (GIF).[6]
VP8 can be multiplexed into the Matroska-based container format WebM along with Vorbis and Opus audio. The image format WebP is based on VP8's intra-frame coding. VP8's direct successor, VP9, and the royalty-free AV1 codec from the Alliance for Open Media are based on VP8.[7]
Features
[edit]VP8 only supports progressive scan video signals with 4:2:0 chroma subsampling and 8 bits per sample. In its first public version, On2's VP8 implementation supports multi-core processors with up to 64 cores simultaneously. At least in the implementation (from August 2011), VP8 is comparatively badly adapted to high resolutions (HD). With only three reference frame buffers needed, VP8 enables decoder implementations with a relatively small memory footprint. The format features a pure intra mode, i.e. using only independently coded frames without temporal prediction, to enable random access in applications like video editing.
Technology
[edit]VP8 is a traditional block-based transform coding format. It has much in common with H.264, e.g. some prediction modes.[8] At the time of first presentation of VP8, according to On2 the in-loop filter[9] and the Golden Frames[10] were among the novelties of this iteration. The first definition of such a filter is already found in the H.263 standard, though, and Golden Frames were already in use in VP5[11] and VP7.[12]
The discrete cosine transform (DCT) on 4×4 blocks and the Walsh–Hadamard transform (WHT) serve as basic frequency transforms. A maximum of three frames can be referenced for temporal prediction: the last Golden Frame (may be an intra frame), alternate reference frame, and the directly preceding frame. The so-called alternate reference frames (altref) can serve as reference-only frames for displaying them can be deactivated. In this case, the encoder can fill them with arbitrary useful image data, even from future frames, and thereby serve the same purpose as the b-frames of the MPEG formats.[13] Similar macroblocks can be assigned to one of up to four (even spatially disjoint) segments and thereby share parameters like the reference frame used, quantizer step size, or filter settings. VP8 offers two different adjustable deblocking filters that are integrated into the codec loops (in-loop filtering). Many coding tools use probabilities that are calculated continuously from recent context, starting at each intra frames. Macro blocks can comprise 4×4, 8×8, or 16×16 samples. Motion vectors have quarter-pixel precision.
History
[edit]VP8 was first released by On2 Technologies on September 13, 2008, as On2 TrueMotion VP8, replacing its predecessor, VP7.[14][15]
After Google acquired On2 in February 2010,[16] calls for Google to release the VP8 source code were made. Most notably, the Free Software Foundation issued an open letter on March 12, 2010, asking Google to gradually replace the usage of Adobe Flash Player and H.264 on YouTube with a mixture of HTML5 and a freed VP8.[17]
Word of an impending open-source release announcement got out on April 12, 2010.[18] On May 19, at its Google I/O conference, Google released the VP8 codec software under a BSD-like license and the VP8 bitstream format specification under an irrevocable free patent license.[19][20][21] This made VP8 the second product from On2 Technologies to be opened, following their donation of the VP3 codec in 2002 to the Xiph.Org Foundation,[22] from which they derived the Theora codec.
In February 2011, MPEG LA invited patent holders to identify patents that may be essential to VP8 in order to form a joint VP8 patent pool. As a result, in March the United States Department of Justice (DoJ) started an investigation into MPEG LA for its role in possibly attempting to stifle competition.[23][24] In July 2011, MPEG LA announced that 12 patent holders had responded to its call to form a VP8 patent pool, without revealing the patents in question,[25] and despite On2 having gone to great lengths to avoid such patents.[26]
In November 2011, the Internet Engineering Task Force published the informational RFC 6386, VP8 Data Format and Decoding Guide.
In March 2013, MPEG LA announced that it had dropped its effort to form a VP8 patent pool after reaching an agreement with Google to license the patents that it alleges "may be essential" for VP8 implementation, and granted Google the right to sub-license these patents to any third-party user of VP8 or VP9.[27][28] This deal has cleared the way for possible MPEG standardisation as its royalty-free internet video codec, after Google submitted VP8 to the MPEG committee in January 2013.[29]
In March 2013, Nokia asserted a patent claim against HTC and Google for the use of VP8 in Android in a German court;[30] however, on August 5, 2013, the webm project announced that the German court has ruled that VP8 does not infringe Nokia's patent.[31]
Nokia has made an official intellectual property rights (IPR) declaration to the IETF with respect to the VP8 Data Format and Decoding Guide listing 64 granted patents and 22 pending patent applications.[32]
Implementations
[edit]libvpx
[edit]The reference implementation of a VP8 (and VP9) codec is found in the programming library libvpx which is released as free software. It has a mode for one-pass and two-pass encoding, respectively, while the one-pass mode is known as being broken and not offering effective control over the target bitrate.[33][failed verification][34][failed verification]
Currently, libvpx is primary software library capable of encoding VP8 video streams,[35] but at least one independent implementation exists in ffvp8enc.
Encoding
[edit]A Video for Windows wrapper of the VP8 codec based on the Google VP8 library (FourCC: VP80) is available.[36]
The WebM Project hardware team in Finland released an RTL hardware encoder for VP8 that is available at no cost for semiconductor manufacturers.[37][38]
The Nvidia Tegra mobile chipsets have full VP8 hardware encoding and decoding (since Tegra 4).[39]
Nexus 5 could use hardware encoding[40].
Decoding
[edit]libvpx is capable of decoding VP8 video streams.[41]
On July 23, 2010, Fiona Glaser, Ronald Bultje, and David Conrad of the FFmpeg Team announced the ffvp8 decoder. Through testing, they determined that ffvp8 was faster than Google's own libvpx decoder.[42] The WebM Project hardware team released an RTL hardware decoder for VP8, that is releasable to semiconductor companies at zero cost.[38][43] TATVIK Technologies announced a VP8 decoder that is optimized for the ARM Cortex-A8 processor.[44] Marvell's ARMADA 1500-mini chipset has VP8 SD and HD hardware decoding support (used in Chromecast).[45] Intel has full VP8 decoding support built into their Bay Trail chipsets.[46] Intel Broadwell also adds VP8 hardware decoding support.[47]
Operating system support
[edit]| Microsoft Windows | macOS | BSD / Linux | Android OS | iOS | |
|---|---|---|---|---|---|
| Codec support | Yes | Yes | Yes | Yes | Yes |
| Container support | On Windows 10 Anniversary Update (1607): WebM (.webm is not recognised; requires pseudo extension) Matroska (.mkv) On Windows 10 October 2018 Update (1809): WebM (.webm is recognised officially) |
WebM (.webm) - Introduced in macOS 11.3 |
WebM (.webm) Matroska (.mkv) |
WebM (.webm) Matroska (.mkv) |
WebM (.webm) - Introduced in iOS 17.4 |
| Notes | On Windows 10: - On Anniversary Update (1607), limited support is available in Microsoft Edge (via MSE only) and Universal Windows Platform apps. - On April 2018 Update (1803) with Web Media Extensions preinstalled, Microsoft Edge (EdgeHTML 17) supports VP8 videos embedded in <video> tags. - On October 2018 Update (1809), VP9 Video Extensions is preinstalled. It enables encoding of VP8 and VP9 content on devices that don't have a hardware-based video encoder.[48] |
- | - Support introduced in Android 2.3.3+ - Streamable in Android 4.0+ |
Related formats
[edit]WebM
[edit]Also on May 19, 2010, the WebM Project was launched, featuring contributions from "Mozilla,[49] Opera,[50][51] Google[52] and more than forty other publishers, software and hardware vendors" in a major effort to use VP8 as the video format for HTML5.[53] In the WebM container format, the VP8 video is used with Vorbis or Opus audio.[54][55] Internet Explorer 9 will support VP8 video playback if the proper codec is installed.[5] Android is WebM-enabled from version 2.3 - Gingerbread.[56] Since Android 4.0, VP8 could be read inside mkv[57] and WebM could be streamed.[58] Adobe also announced that the Flash Player will support VP8 playback in a future release.[59]
WebP
[edit]On September 30, 2010, Google announced WebP, their new image format, on the Chromium blog.[60] WebP is based on VP8's intra-frame coding and uses a container based on Resource Interchange File Format (RIFF).
Comparison with H.264
[edit]While H.264/MPEG-4 AVC contains patented technology and requires licenses from patent holders and limited royalties for hardware, Google has irrevocably released the VP8 patents it owns under a royalty-free public license.[19][61]
According to a comparison of VP8 (encoded with the initial release of libvpx) and H.264 conducted by StreamingMedia, it was concluded that "H.264 may have a slight quality advantage, but it's not commercially relevant" and that "Even watching side-by-side (which no viewer ever does), very few viewers could tell the difference". They also stated that "H.264 has an implementation advantage, not a technology advantage."[62]
Google claims that VP8 offers the "highest quality real-time video delivery"[63] and Libvpx includes a mode where the maximum CPU resources possible will be used while still keeping the encoding speed almost exactly equivalent to the playback speed (realtime), keeping the quality as high as possible without lag. On the other hand, a review conducted by streamingmedia.com in May 2010 concluded that H.264 offers slightly better quality than VP8.[64]
In September 2010 Fiona Glaser, a developer of the x264 encoder, gave several points of criticism for VP8, claiming that its specification was incomplete, and the performance of the encoder's deblocking filter was inferior to x264 in some areas.[65] In its specification, VP8 should be a bit better than H.264 Baseline Profile and Microsoft's VC-1. Encoding is somewhere between Xvid and VC-1. Decoding is slower than FFmpeg's H.264, but this aspect can hardly be improved due to the similarities to H.264. Compression-wise, VP8 offers better performance than Theora and Dirac. According to Glaser, the VP8 interface lacks features and is buggy, and the specification is not fully defined and could be considered incomplete. Much of the VP8 code is copy-pasted C code, and since the source constitutes the actual specification, any bugs will also be defined as something that has to be implemented to be in compliance.
In 2010, it was announced that the WebM audio/video format would be based on a profile of the Matroska container format together with VP8 video and Vorbis audio.[55]
See also
[edit]References
[edit]- ^ a b "VP8 Bitstream Specification License". WebM Project. Retrieved 30 January 2012.
- ^ "Changes to the WebM Open Source License". Retrieved 2010-06-04.
- ^ "Nokia lines up patents against VP8 video codec". Archived from the original on 28 May 2013. Retrieved 2013-03-25.
- ^ kragil (2010-05-19). "Microsoft: Internet Explorer 9 To Support VP8 – OSnews". www.osnews.com. Retrieved 2022-10-22.
- ^ a b Dean Hachamovitch (Microsoft) on March 16, 2011 on IEBlog: HTML5 Video Update—WebM for IE9
- ^ Alex Converse (Google), September 19, 2015: New video compression techniques under consideration for VP10 – presentation at the VideoLAN Dev Days 2015 in Paris
- ^ Zimmerman, Steven (15 May 2017). "Google's Royalty-Free Answer to HEVC: A Look at AV1 and the Future of Video Codecs". XDA Developers. Archived from the original on 14 June 2017. Retrieved 10 June 2017.
- ^ "On2 VP8 - MultimediaWiki". wiki.multimedia.cx.
- ^ "Loop Filter". Archived from the original on September 18, 2008. Retrieved February 22, 2010.
- ^ "Golden Frames". Archived from the original on October 22, 2008. Retrieved February 22, 2010.
- ^ description of VP5 on MultimediaWiki
- ^ "On2's TrueMotion VP7 Video Codec". July 11, 2008. Archived from the original on March 23, 2010. Retrieved May 29, 2010.
- ^ Yaowu Xu, 27. Mai 2010: Inside WebM Technology: The VP8 Alternate Reference Frame
- ^ Glen Dickson (2008-09-16). "IBC2008: On2 Touts New Codec for Web Video". Broadcasting & Cable. Retrieved 2009-09-11.
- ^ "On2 Technologies Unveils New Advanced Video Compression Format". Digital TV News. 2008-09-13. Retrieved 2012-01-30.
- ^ "Google Closes On2 Technologies Acquisition" (Press release). Mountain View, California, USA: Google Inc. 2010-02-19. Retrieved 2013-03-22.
- ^ Wilson, Holmes (2010-03-12). "Open letter to Google: free VP8, and use it on YouTube". Free Software Foundation.
- ^ Lawler, Ryan (2010-04-12). "Google to Open-source VP8 for HTML5 Video". NewTeeVee.com. Archived from the original on 2010-04-16.
- ^ a b "Additional IP Rights Grant (Patents)". Retrieved 2010-06-04.
- ^ "The WebM Project - Licenses". www.webmproject.org.
- ^ Parr, Ben (2010-05-19), Google Makes Major Announcements at Google I/O, mashable.com
- ^ The Free Library (2002-08-01) On2 Signs Pact With Xiph.org to Develop/Support VP3, Retrieved on 2009-08-16
- ^ Catan, Thomas (4 March 2011), Web Video Rivalry Sparks U.S. Probe, The Wall Street Journal
- ^ Cheng, Jacqui (4 March 2011). "Report: DoJ looking into possible anti-WebM moves by MPEG LA". Ars Technica. Condé Nast Digital. Retrieved 8 March 2011.
- ^ Jan Ozer (2011-07-26). "WebM Patent Fight Ahead for Google?". StreamingMedia.com.
- ^ Daffara, Carlo (25 May 2010), An analysis of WebM and its patent risk – updated, carlodaffara.conecta.it
- ^ "Google and MPEG LA make a deal over VP8 codec - Update". The H. Archived from the original on 8 December 2013. Retrieved 10 March 2013.
- ^ "Google and MPEG LA Announce Agreement Covering VP8 Video Format" (PDF). 7 March 2013. Archived from the original (PDF) on 5 March 2016. Retrieved 10 March 2013.
- ^ "VP8 could become MPEG standard". The H. Archived from the original on 8 December 2013. Retrieved 10 March 2013.
- ^ "Patent clouds remain over VP8: Google points to FRAND option, Nokia alleges infringement in court". 2013-03-08.
- ^ "Good News from Germany". 2013-08-05. Retrieved 2013-08-19.
- ^ "Setback for Google's VP8: Nokia refuses to commit patents to royalty-free or FRAND licensing". www.fosspatents.com.
- ^ Grois, Dan; Marpe, Detlev; Nguyen, Tung; Hadar, Ofer (2014), Tescher, Andrew G (ed.), "Comparative assessment of H.265/MPEG-HEVC, VP9, and H.264/MPEG-AVC encoders for low-delay video applications", Proceedings of SPIE – Applications of Digital Image Processing XXXVII, Applications of Digital Image Processing XXXVII (in German), vol. 9217, San Diego, California, pp. 92170Q, Bibcode:2014SPIE.9217E..0QG, doi:10.1117/12.2073323, S2CID 16598590
- ^ Jan Ozer, June 2016: VP9 Finally Comes of Age, But Is it Right for Everyone?
- ^ WebM VP8 Encoder [VP8 SDK], The WebM Project[dead link]
- ^ "Google VP8 Video For Windows codec". Optima SC Inc. Retrieved 2 September 2011.
- ^ Introducing "Anthill," the First VP8 Hardware Encoder IP Release, WebM Project
- ^ a b WebM Video Hardware RTLs, WebM Project[dead link]
- ^ NVIDIA Tegra 4 Family GPU Architecture (PDF)
- ^ "Sign in - Google Accounts". accounts.google.com.
- ^ VP8 SDK - WebM VP8 Decoder, WebM Project, archived from the original on 2012-08-31, retrieved 2016-08-11
- ^ Glaser, Fiona (2010-07-23), Diary Of An x264 Developer: Announcing the world's fastest VP8 decoder, archived from the original on 2010-09-30, retrieved 2012-01-04
- ^ Availability of WebM (VP8) Video Hardware IP Designs, WebM Project
- ^ Tatvik Announces High Performance VP8 Video Decoder Optimized For Cortex-A8 Using ARM NEON Technology, tatvik.com, 2011-03-09[dead link]
- ^ "Marvell flaunts its Armada 1500-mini CPU powering Chromecast, lists codecs". 31 July 2013.
- ^ Lal Shimpi, Anand; Klug, Brian. "The Bay Trail Preview: Intel Atom Z3770 Tested". Archived from the original on September 14, 2013.
- ^ "VA-API 1.3 Readies Broadwell Support, Adds VP8 Decoding - Phoronix". www.phoronix.com.
- ^ "HTML5 + <audio> & <video>". alltomwindows.se (in Swedish). 11 June 2010.
- ^ Blizzard, Christopher (2010-05-19), Firefox, YouTube and WebM, Mozilla
- ^ Lie, Håkon Wium (2010-05-19), Welcome, WebM <video>!, Opera, archived from the original on 2011-03-21, retrieved 2014-10-30
- ^ Mills, Chris (2010-05-19), Opera supports the WebM video format, Opera
- ^ Bankoski, Jim (2010-05-19), WebM and VP8 land in Chromium
- ^ "WebM Code - Build Prerequisites". Retrieved 2010-06-02.
- ^ Xiph.Org (2010-05-19). "Xiph.Org announces support for the WebM open media project". Retrieved 2010-05-20.
- ^ a b WebM Project (2015-09-01). "WebM FAQ". Retrieved 2016-08-07.
- ^ "The platform now offers built-in support for the VP8 open video compression format and the WebM open container format". Android Developers. Archived from the original on 27 January 2012. Retrieved 16 January 2011.
- ^ "Ice Cream Sandwich - Android Developers". Android Developers.
- ^ "Supported media formats - Android Developers". Android Developers.
- ^ Perkins, Michelle (2010-05-19), Flash Player Will Support VP8, Adobe
- ^ Rabbat, Richard (2010-09-30). "WebP, a new image format for the Web". Chromium Blog. Retrieved 2010-10-01.
- ^ Metz, Cade (20 May 2010), Google backs open codec against patent trolls, The Register
- ^ Ozer, Jan (2010). "VP8 vs. H.264" (PDF). streamingmedia.com. Retrieved 2011-03-08.
- ^ "Benefits of WebM". Retrieved 2011-02-13.
- ^ "First Look: H.264 and VP8 Compared". streamingmedia.com. 20 May 2010. Retrieved 2011-02-13.
- ^ Glaser, Fiona (2010-07-13). "First Look: H.264 and VP8 Compared". Diary Of An x264 Developer. Archived from the original on 2015-03-01. Retrieved 2013-07-01.
I expect a spec will eventually be written, but it was a bit obnoxious of Google — both to the community and to their own developers — to release so early that they didn't even have their own documentation ready.
Further reading
[edit]- Daniel Wolf, RWTH Aachen (ed.), WebM / VP8 (PDF) (in German), Aachen
- Cassidy, Sean A. (2011-11-01). An Analysis of VP8, a new video codec for the web (M.S.). Rochester Institute of Technology. OCLC 768998565. Retrieved 2016-08-07.
- Feller, Christian; Wuenschmann, Juergen; Roll, Thorsten; Rothermel, Albrecht (2016-09-06). "The VP8 video codec - overview and comparison to H.264/AVC". Written at University of Ulm. 2011 IEEE International Conference on Consumer Electronics. Berlin: IEEE. pp. 57–61. doi:10.1109/ICCE-Berlin.2011.6031852. ISBN 978-1-4577-0233-4. ISSN 2166-6814. OCLC 759377866. S2CID 37800094.
External links
[edit]- RFC 6386: VP8 Data Format and Decoding Guide (specification)
- RFC 6386: VP8 Data Format and Decoding Guide (November 2011)
- The WebM Project
- Technical Overview Of VP8, An Open Source Video CODEC for the Web – Paper written by Google developers.
- Fiona Glaser's technical analysis of VP8 esp. as compared to H.264.
- The VP8 video codec: High compression+low complexity[dead link]
- Diary Of An x264 Developer: Announcing the world's fastest VP8 decoder
History
Development and Initial Release
On2 Technologies, a pioneer in video compression software, built upon its earlier successes with the VPx family of codecs, which evolved significantly for web-based applications. The company's VP6 codec, introduced in 2005, became a cornerstone for Flash Video delivery, enabling efficient streaming within Adobe Flash Player starting from version 8, due to its balance of compression efficiency and compatibility with limited bandwidth environments.[3] VP7 followed as an enhancement, offering improved quality, though its adoption remained more niche compared to VP6, primarily in professional encoding tools and select embedded applications.[4] These predecessors addressed key limitations in earlier codecs like VP3, focusing on higher fidelity for internet video while maintaining low computational demands. In response to growing demands for superior web video compression amid rising online streaming, On2 announced VP8 on September 13, 2008, positioning it as a proprietary successor to VP7 with claims of surpassing H.264, VC-1, and RealVideo in quality and performance.[5] The initial release occurred simultaneously, introducing On2 TrueMotion VP8 as a royalty-bearing licensed technology available to developers and platform providers.[6] Design goals centered on delivering high-quality compression optimized for web video, targeting peak signal-to-noise ratios (PSNR) of 30-45 dB under bandwidth constraints typical of internet delivery.[1] VP8 supported resolutions up to 16383×16383 pixels, 4:2:0 chroma subsampling, 8-bit color depth, and progressive scan to align with prevalent web video formats and diverse hardware capabilities.[1] Technically, it drew inspiration from block-based hybrid coding paradigms akin to H.264, employing motion-compensated prediction and discrete cosine transform (DCT) for intra- and inter-frame compression, but differentiated through a custom, simpler entropy coding scheme using boolean arithmetic to enhance efficiency without the complexity of context-adaptive models.[1] Under its early proprietary model, VP8 saw limited but targeted adoption, with Adobe announcing support for VP8 in an upcoming release of Flash Player.[7] This licensing approach allowed On2 to monetize the technology while fostering initial ecosystem development for high-definition web content. Subsequently, following Google's acquisition of On2, VP8 was open-sourced in 2010, broadening its accessibility.Google Acquisition and Open-Sourcing
In August 2009, Google announced its agreement to acquire On2 Technologies, the developer of the VP8 video codec, for approximately $106.5 million in an all-stock transaction aimed at advancing high-quality video compression for the web.[8] The acquisition was completed on February 19, 2010, following shareholder approval, with the final value reaching $124.6 million.[9] This move integrated On2's video expertise, including VP8—which built on the company's earlier proprietary codecs like VP7—into Google's ecosystem to support broader online video adoption.[10] On May 19, 2010, Google open-sourced the VP8 codec under a BSD-style license as part of the newly launched WebM Project, which bundled VP8 for video compression with the Vorbis audio codec in a royalty-free format designed for HTML5 web video.[11] The WebM Project aimed to provide an open alternative to proprietary video standards, enabling free use and distribution without licensing fees.[12] The initiative quickly garnered support from key industry players, including Mozilla and Opera, which integrated VP8 support into their browsers shortly after the announcement, while Adobe committed to adding compatibility in an upcoming Flash release.[13] Google further reinforced VP8's accessibility by offering a royalty-free patent cross-license to essential VP8 patents, distinguishing it from H.264, which requires royalty payments to patent pools like MPEG LA.[14] This commitment helped mitigate potential patent encumbrances and promoted VP8 as a viable open standard for web interoperability.[15]Technical Specifications
Encoding Mechanism
VP8 employs a block-based hybrid coding structure to compress video data, dividing each frame into 16x16 macroblocks for luma components and corresponding 8x8 blocks for chroma, which are further subdivided into 4x4 blocks for processing residuals and prediction.[1][2] This approach allows for efficient handling of spatial and temporal redundancies by processing macroblocks in raster-scan order, with optional segmentation into up to four regions for adaptive parameter tuning.[1] Intra-frame prediction in VP8 leverages spatial correlations within a frame, using modes such as DC (average of neighbors), vertical, horizontal, and true-motion (TM) for 16x16 luma and 8x8 chroma blocks, while 4x4 luma blocks support ten directional modes including DC, vertical, horizontal, and diagonal variants.[2] Inter-frame prediction exploits temporal redundancies by referencing one of three frames—last, golden, or alternate—with motion estimation achieving up to 1/4-pixel accuracy for luma and 1/8-pixel for chroma via six-tap interpolation filters, and flexible partitioning via split motion vectors for sub-blocks.[1][2] After prediction, residual errors are computed and transformed using a 4x4 integer discrete cosine transform (DCT) for individual 4x4 blocks, with a 4x4 Walsh-Hadamard transform applied to the DC coefficients of luma blocks in larger intra modes to capture low-frequency energy efficiently.[1][2] These transform coefficients undergo scalar quantization with 128 levels adjustable across six bands (Y AC/DC, Y2 DC/AC, UV DC/AC), enabling coarse-to-fine control over compression quality.[1][2] Entropy coding in VP8 utilizes a custom boolean arithmetic coder, which encodes symbols like coefficients, motion vectors, and modes using adaptive probability tables updated per frame, with a 12-token alphabet for DCT coefficients (e.g., zero runs, end-of-block, and category values) to achieve probability-based compression without the context-adaptive binary arithmetic coding (CABAC) of H.264.[1][2] The coder supports up to eight token partitions for parallelism, encoding coefficients in a tree structure that prioritizes significant values.[1] To mitigate blocking artifacts, an in-loop deblocking filter is applied post-reconstruction, classifying edges as interior or boundary types and adjusting filter strengths (0-63 levels) based on macroblock mode, quantization index, and sharpness parameters, with simple (2-tap) or normal (6-tap) modes for different edge variances.[1][2] Rate control in VP8 implementations supports single-pass encoding for real-time scenarios, targeting constant bitrate (CBR) or constant quality (CQ) via fixed quantization parameters, and two-pass modes for offline processing that analyze the video first to allocate bits optimally for variable bitrate (VBR) or targeted quality, improving efficiency over single-pass.[16] These mechanisms, inspired by prior On2 codecs like VP7, enable VP8 to balance compression ratio and visual fidelity across diverse content.[1]Decoding Process and Key Features
The VP8 decoding process begins with bitstream parsing, where the decoder extracts frame headers, macroblock data, motion vectors, and quantized transform coefficients using a boolean entropy decoder based on a range coder. This stage identifies key elements such as frame type (intra or inter), segmentation parameters, and reference frame indices, enabling the decoder to process uncompressed header chunks (10 bytes for key frames, 3 bytes for inter frames) before delving into compressed macroblock partitions.[17][18][19] Following parsing, inverse quantization is applied to the decoded coefficients, multiplying them by segment-specific dequantization factors derived from quantization indices (7-bit for base values, adjustable by 16-bit signed deltas). These factors vary by color plane (Y, U, V, or Y2 for luma in key frames) and coefficient position (DC or AC), using predefined lookup tables to restore approximate transform domain values. The process then proceeds to the inverse discrete cosine transform (IDCT), employing a 4x4 integer IDCT for Y, U, and V subblocks with fixed-point approximations of trigonometric constants, while a Walsh-Hadamard transform (WHT) handles the Y2 subblock in key frames.[20][21][22][23] Motion compensation follows for inter frames, utilizing motion vectors with quarter-pixel precision to predict macroblocks from reference frames (last, golden, or alternate reference). Sub-pixel interpolation employs a 6-tap FIR filter kernel for luma and 4-tap bicubic for chroma, ensuring smooth reconstruction without bidirectional prediction in the baseline profile, which relies solely on P-frames and forward-referencing mechanisms. Finally, frame reconstruction adds the inverse-transformed residue to the motion-compensated prediction, clips values to the 0-255 range, and applies a loop filter (2-tap simple or 6-tap normal) across block boundaries to mitigate artifacts, yielding the output frame in presentation timestamp order.[24][25][26][27] VP8 decoding supports frame rates up to 60 fps through its profile levels, with the baseline profile optimized for web playback and defining constraints on resolution and processing speed via maximum macroblocks per second. For instance, Level 3.2 supports resolutions up to 2048×1152 and accommodates 1080p at 30 fps within its macroblock processing constraints, while higher levels like 3.3 support increased rates or resolutions. Alpha channel support for transparency is available in extensions, such as those integrated into the WebM container, where a separate VP8-encoded alpha plane is decoded alongside the primary video using compatible formats like YUVA 4:2:0.[28][29][30] Spatial and temporal scalability modes enhance adaptability, with temporal layers achieved through hierarchical reference frame usage (e.g., base and enhancement layers via golden frame updates) and spatial scalability via post-decoding upsampling factors like 5/4 or 2x, or segmentation for region-specific processing. Error resilience is bolstered by frame-level synchronization through periodic key frames for random access and recovery, alongside golden and alternate reference frames that facilitate partial reconstruction after packet loss; in cases of corruption, the decoder may employ concealed frame copying from prior valid references. A distinctive aspect of VP8 decoding is the absence of B-frames and bi-directional prediction in the baseline, emphasizing single-directional P-frame reliance augmented by golden frame referencing for long-term temporal prediction, which updates selectable past frames to improve efficiency without backward dependencies.[31][32][33][34]Implementations and Support
Reference Software Implementation
The reference software implementation for VP8 is libvpx, an open-source library developed by Google and released on May 19, 2010, under a BSD license. This library serves as the official codec SDK for VP8, providing both encoding and decoding capabilities essential for integrating VP8 into applications and tools. It includes the vp8.h header file, which defines the core API for VP8 controls shared between the encoder and decoder, enabling developers to access frame data structures and codec interfaces programmatically.[35] libvpx incorporates command-line tools for practical usage, including vpxenc for encoding VP8 bitstreams and vpxdec for decoding them. The vpxenc encoder supports key options such as --cpu-used, which adjusts the speed-quality tradeoff (values from 0 for slowest/highest quality to 5 for fastest/lowest quality), and deadline modes including "realtime" for low-latency live encoding and "good" for balanced offline encoding. These parameters allow users to tailor performance for specific scenarios, such as web streaming or archival compression. Meanwhile, vpxdec facilitates playback of VP8 streams and leverages multi-threaded decoding on multi-core systems, utilizing frame-based threading to distribute workload across CPU cores for improved efficiency during video rendering.[16] Since its inception, libvpx has been integrated into major multimedia frameworks, notably FFmpeg, which added VP8 support in version 0.6 in 2010 using libvpx as the backend for both encoding and decoding operations. Subsequent FFmpeg updates post-2020 have incorporated libvpx enhancements, such as improved SIMD optimizations and threading improvements from libvpx releases like version 1.13 in 2023. As of 2025, libvpx is actively maintained under the WebM Project by Google in collaboration with the Alliance for Open Media, with version 1.15.2 released in July 2025 featuring security fixes (including CVE-2025-5283 for VP8) and ongoing speed optimizations for both VP8 and VP9 processing.[35][36][37]Hardware and Platform Support
VP8 hardware acceleration has been implemented on various platforms, primarily through SIMD instructions and dedicated video processing units. On ARM-based mobile devices, such as those running Android, VP8 decoding and encoding leverage NEON intrinsics, an extension to the ARMv7 and ARMv8 architectures that enables efficient vector processing for video tasks.[38] This support became available with Android 4.0 (Ice Cream Sandwich) in 2011, allowing real-time VP8 processing on single-core ARM Cortex-A9 processors and later models.[39][40] Intel's Quick Sync Video provides partial hardware acceleration for VP8, focusing on decoding (from 5th Generation Core processors) and encoding (from the Skylake 6th Generation Core onward), including support in integrated graphics for up to 4K resolutions.[41] NVIDIA's NVDEC for decoding has supported VP8 since the Pascal architecture in 2016, enabling hardware-accelerated processing on GeForce, Quadro, and Tesla GPUs across Windows and Linux; NVENC does not support VP8 encoding.[42][43] These implementations often fall back to software decoding using the libvpx library when hardware is unavailable or insufficient. At the operating system level, VP8 is natively integrated into Android since version 4.0 in 2011, supporting playback and streaming within the media framework.[40] On Windows, integration occurs through Media Foundation via third-party plugins, such as the WebM Media Foundation Components, which enable VP8 playback in applications like Windows Media Player.[44] In Linux environments, VP8 is handled natively through the GStreamer multimedia framework, which includes dedicated elements like vp8dec for decoding and vp8enc for encoding.[45][46] Browser support for VP8 has been robust since its early adoption. Google Chrome introduced VP8 support in version 6 in 2010 as part of WebM integration.[47] Mozilla Firefox followed in March 2011 with partial WebM/VP8 capabilities, expanding to full support in subsequent releases.[48] Microsoft Edge supports VP8 via WebM containers natively, while Apple's Safari offers partial support starting from version 12.1 in 2019, limited primarily to WebRTC scenarios rather than general HTML5 video.[48] As of 2025, VP8 remains widespread for legacy web video content and certain streaming applications but is declining in favor of newer codecs like AV1, which offers superior compression efficiency and growing hardware support.[49] It continues as a default option in some WebRTC implementations across browsers, ensuring compatibility for real-time communication where AV1 adoption is still maturing.[50] A key challenge for VP8 deployment is its limited dedicated ASIC (Application-Specific Integrated Circuit) support compared to H.264, which has been embedded in hardware decoders since the early 2010s across a broader range of devices.[41] This results in greater reliance on software fallbacks for VP8 on older or budget hardware, potentially increasing power consumption and processing demands.[42]Associated Standards
WebM Container Format
WebM was introduced by Google on May 19, 2010, as an output of the open-source WebM Project, aimed at delivering a high-quality, royalty-free audiovisual media format optimized for web delivery.[51] This initiative sought to address the limitations of proprietary formats by providing an accessible alternative for embedding multimedia content directly in web pages. VP8 serves as the default video codec in WebM files.[52] The WebM container format is a profile of the Matroska multimedia container, employing the .webm file extension for its files.[52] It encapsulates VP8 video streams alongside Vorbis or Opus audio streams, structured using the Extensible Binary Meta Language (EBML) for the header and metadata organization.[53] EBML enables a hierarchical, binary representation of data, facilitating efficient parsing and extension while maintaining compatibility with Matroska's core framework.[53] Central to WebM's structure is the Segment element, which houses the primary audiovisual data clusters and supports random access seeking within the file.[54] The Cues element provides an index of timestamps and byte positions, primarily referencing video keyframes to enable quick navigation and playback control.[54] Additionally, the Attachments element allows embedding of supplementary files, such as subtitles or fonts, enhancing multimedia presentation without external dependencies.[54] The format accommodates a maximum file size of 2^{63} bytes, leveraging EBML's variable-length integer encoding for large-scale media.[53] The underlying Matroska container format, on which WebM is based, has been under IETF standardization since 2016 and was published as RFC 9559 in October 2024.[55][56] The container is distributed royalty-free under the Creative Commons Attribution 3.0 Unported license, ensuring broad accessibility for developers and users.[55] It is predominantly utilized with the HTML5<video> element to support seamless, patent-unencumbered streaming of web video content across browsers.