Slide 1

Slide 1 text

The VP8 Video Codec Multimedia Codecs SS 2011 Thomas Maier Dominik Hübner Sven Pfleiderer

Slide 2

Slide 2 text

Problem Definition ● No standardized codec for web video ● Currently used: ● H264: patent licensing royalties needed ● Theora: royalty free, outdated technology ● Heterogenous client hardware ● Bandwidth constraints

Slide 3

Slide 3 text

30.06.2011 The VP8 Video Codec 3 History ● On2 Technologies developed VP8 ● Announced September 2008 to replace VP7 ● Acquisition of On2 by Google early 2010 ● Open letter from the Free Software Foundation to Google demanding open sourcing of VP8

Slide 4

Slide 4 text

30.06.2011 The VP8 Video Codec 4 History ● Release of VP8 under a BSD-like license ● Launch of the WebM and WebP projects ● Faster VP8 decoder written by x264 developers in July 2010 ● RFC draft of bitstream guide submitted to IETF (not as a standard) in January 2011

Slide 5

Slide 5 text

30.06.2011 The VP8 Video Codec 5 Patent Situation ● Patent situation unclear ● VP8 affects patents of h264 ● Possible prior art by Nokia in ~2000 ● MPEG LA announced a call for patents against VP8

Slide 6

Slide 6 text

30.06.2011 The VP8 Video Codec 6 The WebM-Project ● Founded by Google in May 2010 ● Royalty free media file format ● Open-sourced under a BSD-style license ● Optimized for the web ● Low computational complexity ● Simple container format ● Click and encode

Slide 7

Slide 7 text

30.06.2011 The VP8 Video Codec 7 The WebM-Project ● Container is a subset of Matroska ● VP8 for video ● Vorbis for audio ● *.webm extension ● Internet media types ● video/webm ● audio/webm

Slide 8

Slide 8 text

30.06.2011 The VP8 Video Codec 8 Web Video ● HTML5 video tag < video > ● Replacement for Flash and Silverlight ● Customizable video controls with CSS ● Scriptable with standardized JavaScript APIs ● No standardized video format ● h264 ● VP8 ● Theora

Slide 9

Slide 9 text

30.06.2011 The VP8 Video Codec 9 Application http://en.wikipedia.org/wiki/HTML5_video#Table Browser Theora H.264 VP8 WebM Internet Explorer Manual Install 9.0 Manual Install Mozilla Firefox 3.5 No 4.0 Google Chrome 3.0 Yes (removed in future) 6.0 Safari Manual Install 3.1 Manual Install Opera 10.50 No 10.60 Konquerer 4.4 Depends on QT Yes Epiphany 2.28 Depends on GStreamer Depends on GStreamer

Slide 10

Slide 10 text

30.06.2011 The VP8 Video Codec 10 Application ● Youtube successively converts to VP8 ● Flash support announced ● Important for DRM ● Skype 5.0 ● Nvidia announced 3D support

Slide 11

Slide 11 text

30.06.2011 The VP8 Video Codec 11 Application Tools and libraries ● GStreamer ● FFmpeg ● libvpx ● ffvp8

Slide 12

Slide 12 text

30.06.2011 The VP8 Video Codec 12 Application Hardware support ● AMD ● ARM ● Broadcom ● MIPS ● Nvidia ● Texas Instruments ● Open IP for hardware decoders

Slide 13

Slide 13 text

VP8 in-depth

Slide 14

Slide 14 text

30.06.2011 The VP8 Video Codec 14 Color Space ● YUV 4:2:0 sub-sampling R G B Y U V

Slide 15

Slide 15 text

30.06.2011 The VP8 Video Codec 15 VP8 Encoding Overview

Slide 16

Slide 16 text

30.06.2011 The VP8 Video Codec 16 Block Generation

Slide 17

Slide 17 text

30.06.2011 The VP8 Video Codec 17 Block Generation Y U V 16x16 8x8 8x8 Macroblock

Slide 18

Slide 18 text

Prediction

Slide 19

Slide 19 text

30.06.2011 The VP8 Video Codec 19 Intra Frame Prediction

Slide 20

Slide 20 text

30.06.2011 The VP8 Video Codec 20 Intra Frame Prediction ● Exploits spacial coherence of frames ● Uses already coded blocks within current frame ● Applies to macroblocks in an interframe as well as to macroblocks in a key frame ● 16x16 luma and 8x8 chroma components are predicted independently

Slide 21

Slide 21 text

30.06.2011 The VP8 Video Codec 21 Chroma Prediction Modes ● H_PRED ● V_PRED ● DC_PRED ● TM_PRED

Slide 22

Slide 22 text

30.06.2011 The VP8 Video Codec 22 H_PRED ● Horizontal Prediction ● Fills each pixel column with a copy of left neighboring column (L) ● If current macroblock is on the left column, a default value of 129 is assigned

Slide 23

Slide 23 text

30.06.2011 The VP8 Video Codec 23 H_PRED L0 L1 L2 L3 L

Slide 24

Slide 24 text

30.06.2011 The VP8 Video Codec 24 V_PRED ● Vertical Prediction ● Fills each pixel row with a copy of the row above (A) ● If current macroblock is on the top column, a default value of 127 is assigned

Slide 25

Slide 25 text

30.06.2011 The VP8 Video Codec 25 V_PRED A0 A1 A2 A3 A

Slide 26

Slide 26 text

30.06.2011 The VP8 Video Codec 26 DC_PRED ● Fills each block with a single value ● This value is the average of the pixels left and above of the block ● If block is on the top: The average of the left pixels is used ● If block is on the left: The average of the above pixels is used ● If block is on the left top corner: A constant value of 128 is used

Slide 27

Slide 27 text

30.06.2011 The VP8 Video Codec 27 DC_PRED A0 A1 A2 A3 L0 L1 L2 L3 AVG L A

Slide 28

Slide 28 text

30.06.2011 The VP8 Video Codec 28 TM_PRED ● TrueMotion Prediction ● Uses above row A, left column L and a pixel P which is above and left of the block ● Most used intra prediction mode ● X ij =L i A j −P

Slide 29

Slide 29 text

30.06.2011 The VP8 Video Codec 29 TM_PRED X21 A0 A1 A2 A3 P L0 L1 L2 L3 L A X21 = L2 + A1 - P

Slide 30

Slide 30 text

30.06.2011 The VP8 Video Codec 30 TM_PRED Code

Slide 31

Slide 31 text

30.06.2011 The VP8 Video Codec 31 Luma Prediction Modes ● Basically all chroma prediction modes ● With 16x16 macroblocks ● Additional B_PRED mode

Slide 32

Slide 32 text

30.06.2011 The VP8 Video Codec 32 B_PRED ● Splits 16x16 macroblock into 16 4x4 sub-blocks ● Each sub-block is independently predicted ● Ten available prediction modes for sub-blocks

Slide 33

Slide 33 text

30.06.2011 The VP8 Video Codec 33 B_PRED Modes ● B_DC_PRED: predict DC using row above and column ● B_TM_PRED: propagate second differences a la TM ● B_VE_PRED: predict rows using row above ● B_HE_PRED: predict columns using column to the left ● B_LD_PRED: southwest (left and down) 45 degree diagonal prediction

Slide 34

Slide 34 text

30.06.2011 The VP8 Video Codec 34 B_PRED Modes ● B_RD_PRED: southeast (right and down) ● B_VR_PRED: SSE (vertical right) diagonal ● B_VL_PRED: SSW (vertical left) ● B_HD_PRED: ESE (horizontal down) ● B_HU_PRED: ENE (horizontal up)

Slide 35

Slide 35 text

30.06.2011 The VP8 Video Codec 35 Motion Estimation

Slide 36

Slide 36 text

30.06.2011 The VP8 Video Codec 36 Motion Estimation ● Determine motion vectors which transform one frame to another ● Uses motion vectors for 16x16, 16x8, 8x16, 8x8 and 4x4 blocks ● Motion vectors from neighboring blocks can be referenced

Slide 37

Slide 37 text

30.06.2011 The VP8 Video Codec 37 Motion Estimation ● Motion vector: Horizontal and vertical displacement ● Only luma blocks are predicted, chroma blocks are calculated from luma ● Resolution: 1/4 pixel for luma, 1/8 pixel for chroma ● Chroma vectors are calculated by averaging vectors from luma blocks

Slide 38

Slide 38 text

30.06.2011 The VP8 Video Codec 38 Motion Vector Types ● MV_NEAREST ● MV_NEAR ● MV_ZERO ● MV_NEW ● MV_SPLIT

Slide 39

Slide 39 text

30.06.2011 The VP8 Video Codec 39 MV_NEAREST ● Re-use non-zero motion vector of last decoded block

Slide 40

Slide 40 text

30.06.2011 The VP8 Video Codec 40 MV_NEAR ● Re-use non-zero motion vector of second-to- last decoded block

Slide 41

Slide 41 text

30.06.2011 The VP8 Video Codec 41 MV_ZERO ● Block has not moved ● Block is at the same position as in preceding frame

Slide 42

Slide 42 text

30.06.2011 The VP8 Video Codec 42 MV_NEW ● New motion vector ● Mode followed by motion vector data ● Data is added to buffer of last encoded blocks

Slide 43

Slide 43 text

30.06.2011 The VP8 Video Codec 43 MV_SPLIT ● Use multiple motion vectors for a macroblock ● Macroblock can be split up into sub-blocks ● Each sub-block can have its own motion vector ● Useful when objects within a macroblock have different motion characteristics

Slide 44

Slide 44 text

30.06.2011 The VP8 Video Codec 44 Motion Compensation

Slide 45

Slide 45 text

30.06.2011 The VP8 Video Codec 45 Motion Compensation ● Apply motion vectors to previous frame ● Generate a predicted frame ● Only difference between predicted and actual frame needs to be transmitted

Slide 46

Slide 46 text

30.06.2011 The VP8 Video Codec 46 Sub-pixel Interpolation ● If “full pixel” motion vector, block is copied to corresponding piece of the prediction buffer ● If at least one of the displacements affects sub- pixels, missing pixels are synthesized by horizontal and vertical interpolation

Slide 47

Slide 47 text

30.06.2011 The VP8 Video Codec 47 Inter Frame Prediction

Slide 48

Slide 48 text

30.06.2011 The VP8 Video Codec 48 Inter Frame Prediction Exploits the temporal coherence between nearby frames Components: ● Reference Frames ● Motion Vectors

Slide 49

Slide 49 text

30.06.2011 The VP8 Video Codec 49 Inter-Frame Types ● Key Frames ● Decoded without reference to other frames ● Provide seeking points ● Predicted Frames ● Decoding depends on all prior frames up to last Key-Frame ● No usage of B-Frames

Slide 50

Slide 50 text

30.06.2011 The VP8 Video Codec 50 Prediction Frame Types ● Previous Frame ● Alternate Reference Frame ● Golden Reference Frame ● Each of these three types can be used for prediction

Slide 51

Slide 51 text

30.06.2011 The VP8 Video Codec 51 Previous Frame ● Last fully decoded frame ● Updated with every shown frame

Slide 52

Slide 52 text

30.06.2011 The VP8 Video Codec 52 Alternate Reference Frame ● Fully decoded frame buffer ● Can be used for noise reduced prediction ● In combination with golden frames: Compensate lack of B-frames

Slide 53

Slide 53 text

30.06.2011 The VP8 Video Codec 53 Golden Reference Frame ● Fully decoded image buffer ● Can be partially updated ● Can be used for error recovery ● Can be used to encode a cut between scenes

Slide 54

Slide 54 text

30.06.2011 The VP8 Video Codec 54 Updating Frame Buffers ● Key frame: Updates all three buffers ● Predicted frame: Flag for updating alternate or golden frame buffer

Slide 55

Slide 55 text

30.06.2011 The VP8 Video Codec 55 Error Recovery Source: http://webm.googlecode.com/files/Realtime_VP8_2-9-2011.pdf

Slide 56

Slide 56 text

Transformation

Slide 57

Slide 57 text

30.06.2011 The VP8 Video Codec 57 Transformation

Slide 58

Slide 58 text

30.06.2011 The VP8 Video Codec 58 Decorrelation ● Necessary for efficient entropy encoding ● Achieved with hybrid transformation ● Discrete Cosine Transformation ● Walsh-Hadamard Transformation

Slide 59

Slide 59 text

30.06.2011 The VP8 Video Codec 59 8 8 16 16 Y U/V 4 4 Y 4 4 U 4 * 16 * 4 4 V 4 * Transformation Preparation for transfomation process: Divide Macroblocks into Subblocks Frame Subblock Macroblock

Slide 60

Slide 60 text

30.06.2011 The VP8 Video Codec 60 Discrete Cosine Transformation ● 16 luma blocks / 4 + 4 chroma blocks ● Transform each block into spectral components using the 2D - DCT ∣255 0 255 0 255 0 255 0 255 0 255 0 255 0 255 0 ∣ ∣510 195.1686 0 471.1786 0 0 0 0 0 0 0 0 0 0 0 0 ∣ DCT Values based on dct2() function of Matlab

Slide 61

Slide 61 text

30.06.2011 The VP8 Video Codec 61 Transformation The DC components of all subblocks are often correlated among each other ∣85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 85 ∣ ∣145 145 145 145 145 145 145 145 145 145 145 145 145 145 145 145 ∣ DCT ∣340 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ∣ ∣580 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ∣ DCT Values based on dct2() function of Matlab Macroblocks

Slide 62

Slide 62 text

30.06.2011 The VP8 Video Codec 62 Walsh-Hadamard Transformation ● Use the correlation of the DC components with a 2nd order transformation ● The WHT works with a simple transformation matrix → Transformation is a matrix multiplication H = ∣1 1 1 1 1 1 −1 −1 1 −1 1 −1 1 −1 −1 1 ∣ H = 1 4 ∣1 1 1 1 1 1 −1 −1 1 −1 1 −1 1 −1 −1 1 ∣ Normalized Walsh-Hadamard matrix

Slide 63

Slide 63 text

30.06.2011 The VP8 Video Codec 63 Walsh-Hadamard Transformation Example A= ∣340 340 340 340 340 340 340 340 580 580 580 580 580 580 580 580 ∣ 1st order transformation DC components H∗A∗H (Re) Transformation B=H∗A= ∣1840 1840 1840 1840 −480 −480 −480 −480 0 0 0 0 0 0 0 0 ∣ C=B∗H = ∣1840 0 0 0 −480 0 0 0 0 0 0 0 0 0 0 0 ∣ H= ∣1/2 1/2 1/2 1/2 1/2 1/2 −1/2 −1/2 1/2 −1/2 1/2 −1/2 1/2 −1/2 −1/2 1/2 ∣ Normalized transformation matrix

Slide 64

Slide 64 text

Quantization

Slide 65

Slide 65 text

30.06.2011 The VP8 Video Codec 65 Quantization

Slide 66

Slide 66 text

30.06.2011 The VP8 Video Codec 66 Quantization ● Quantization of the transformation coefficients: ● Less data per coefficient ● More zeros! ● Scalar quantization ● Designed for quality range of ~30dB to ~45dB SNR

Slide 67

Slide 67 text

30.06.2011 The VP8 Video Codec 67 Quantization For each frame different factors for: ● 1st order luma DC ● 1st order luma AC ● 2nd order luma DC ● 2nd order luma AC ● Chroma DC ● Chroma AC AC AC AC DC DC DC 1st order luma (DCT) 2nd order luma (WHT) Chroma (DCT)

Slide 68

Slide 68 text

30.06.2011 The VP8 Video Codec 68 Quantization ● 128 quantization levels with given factors ● Quantization table for DC coefficients in Y1 planes

Slide 69

Slide 69 text

30.06.2011 The VP8 Video Codec 69 Quantization Example: 1st order luma AC coefficients ● Quantization level: 3 → Quantization factor from table: 6 ● DC coefficient is ignored here A= ∣−312 7 1 0 1 12 −5 2 2 −3 3 −1 1 0 −2 1 ∣ Q=round 1 6 ∗A= ∣0 1 0 0 0 2 −1 0 0 −1 1 0 0 0 0 0 ∣

Slide 70

Slide 70 text

30.06.2011 The VP8 Video Codec 70 Quantization Adaptive Quantization ● Up to 4 different segments (q0-q3) ● Each segment with n macroblocks and its own quantization parameter set

Slide 71

Slide 71 text

30.06.2011 The VP8 Video Codec 71 Quantization The quantized coefficients are read in zig-zag order 0 -19 1 0 0 2 -1 0 -1 0 0 0 0 0 0 0 vals=[−19,1,0,−1, 2,0,0 ,−1,0 ,0,0,0,0,0, 0,0]

Slide 72

Slide 72 text

Adaptive Loop Filtering

Slide 73

Slide 73 text

30.06.2011 The VP8 Video Codec 73 Adaptive Loop Filtering

Slide 74

Slide 74 text

30.06.2011 The VP8 Video Codec 74 Adaptive Loop Filtering Problem ● Strong quantization (“worst” case: only DC) ● Many pixels with same values ● Blocking artifacts A= ∣128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128 ∣ 64 128 4 4 4 B= ∣64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 ∣ Subblocks

Slide 75

Slide 75 text

30.06.2011 The VP8 Video Codec 75 Adaptive Loop Filtering ● VP8 has two filter modes – Simple – Normal ● Configuration in frame-header ● Two parameters – loop_filter_level – sharpness_level

Slide 76

Slide 76 text

30.06.2011 The VP8 Video Codec 76 Adaptive Loop Filtering ● Filter order per macroblock 1. Left macroblock edge 2. Vertical subblock edges 3. Macroblock edge at the top 4. Horizontal subblock edges 3 2 1 4 ● Macroblock processing in scan line order

Slide 77

Slide 77 text

30.06.2011 The VP8 Video Codec 77 2 4 6 8 Adaptive Loop Filtering Filter segments ● n segments per edge n = blocklength ● 2,4,6 or 8 taps wide ● Pixels before edge: px ● Pixels after edge: qx p2 p1 p0 q1 q2 q0

Slide 78

Slide 78 text

30.06.2011 The VP8 Video Codec 78 Adaptive Loop Filtering Simple Mode ● Segments 4 or 6 taps wide ● sharpness_level ignored ● Filter edge if total difference > threshold ● Threshold derived from loop_filter_level, quantization level and other factors

Slide 79

Slide 79 text

30.06.2011 The VP8 Video Codec 79 4 4 4 Adaptive Loop Filtering Simple Mode – Example p1 p0 q0 q1 p1: 128 p0: 128 q0: 64 q1: 64 q= 3∗6464 4 =64 p= 3∗128128 4 =128 a=q−p 4 =64−128 4 =−16 p0=p0a=128−16=122 q0=q0−a=128−−16=80

Slide 80

Slide 80 text

30.06.2011 The VP8 Video Codec 80 Adaptive Loop Filtering Normal Mode ● Segments 2,4,6 or 8 taps wide ● Different adjustments for different positions ● Different weightings for inner positions

Slide 81

Slide 81 text

30.06.2011 The VP8 Video Codec 81 Adaptive Loop Filtering Adaptive? Heavy Motion → Strong Filtering Low Motion → Slight Filtering No Motion → No Filtering

Slide 82

Slide 82 text

30.06.2011 The VP8 Video Codec 82 Adaptive Loop Filtering SIMD processors aka Vector CPUs ● Loop filter optimized for SIMD operations ● Sources already implemented

Slide 83

Slide 83 text

30.06.2011 The VP8 Video Codec 83 Adaptive Loop Filtering Problem: Dependencies between macroblocks 0 1 m m Macroblocks

Slide 84

Slide 84 text

Entropy Coding

Slide 85

Slide 85 text

30.06.2011 The VP8 Video Codec 85 Entropy Coding

Slide 86

Slide 86 text

30.06.2011 The VP8 Video Codec 86 Frame Format ● Frames are divided in 3 partitions ● Uncompressed header chunk ● Macroblock coding modes and motion vectors ● Quantized transform coefficients Frame Header Partition 1 Partition 2

Slide 87

Slide 87 text

30.06.2011 The VP8 Video Codec 87 Entropy Encoding ● Entropy coding minifies redundancy ● 2 steps ● Huffman Tree with a small alphabet ● Binary arithmetic coding

Slide 88

Slide 88 text

30.06.2011 The VP8 Video Codec 88 Entropy Encoding ● DCT and WHT coefficients are precoded to tokens using a predefined tree structure ● Goal ● Reduce number of reads from raw binary stream ● Solution ● Create tokens for symbol values ● Minimize necessary reads for most frequent symbols

Slide 89

Slide 89 text

30.06.2011 The VP8 Video Codec 89 Entropy Encoding ● Token types ● Single numbers – Coefficient value ● 0, 1, 2, 3, 4 ● Number ranges – 6 ranges of coefficient values ● 5-6, 7-10, 11-18, 19-34, 35-66, 67-2048 ● EOB (End Of Block) – No more non-zeros values remaining in macroblock

Slide 90

Slide 90 text

30.06.2011 The VP8 Video Codec 90 Entropy Encoding ● How are these tokens created? ● Step 1: Read quantized DCT/WHT coefficients from 4x4 sub-blocks ∣187 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 ∣ 187, 0, 2, 1, 0, 0, 0, 0, 0, ...

Slide 91

Slide 91 text

30.06.2011 The VP8 Video Codec 91 Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output:

Slide 92

Slide 92 text

30.06.2011 The VP8 Video Codec 92 Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output: 11111111

Slide 93

Slide 93 text

30.06.2011 The VP8 Video Codec 93 Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output: 11111111 10

Slide 94

Slide 94 text

30.06.2011 The VP8 Video Codec 94 Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output: 11111111 10 1100 Why not 11100? We can save 1 bit!

Slide 95

Slide 95 text

30.06.2011 The VP8 Video Codec 95 Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output: 11111111 10 1100 110

Slide 96

Slide 96 text

30.06.2011 The VP8 Video Codec 96 Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output: 11111111 10 1100 110 0

Slide 97

Slide 97 text

30.06.2011 The VP8 Video Codec 97 Entropy Encoding ● Restoring coefficients from value ranges ● Add some extra bits as offset from base of the current range Output: 11111111 10 1100 110 0 Range: 67 – 2048 Number: 187 Offset: 187 – 67 = 120 Extra Bits: 11 Binary Offset: 0000 0111 1000 New Output: 11111111 0000 0111 1000 10 1100 110 0

Slide 98

Slide 98 text

30.06.2011 The VP8 Video Codec 98 Entropy Encoding ● Binary arithmetic encoding ● Extra bits are encoded with pre-set, constant probabilities ● Token probabilities reside in 96 probability tables ● Token bits are encoded with – Default probabilities whenever keyframes are updated – Regarding probability tables can be updated with each new frame

Slide 99

Slide 99 text

30.06.2011 The VP8 Video Codec 99 Entropy Encoding ● Binary arithmetic encoding ● Token probability tables are chosen according to 3 contexts – Plane (Y, U, V) – Band (position of the coefficient) – Local complexity (value of the preceding coefficient)

Slide 100

Slide 100 text

30.06.2011 The VP8 Video Codec 100 Entropy Encoding ● Binary arithmetic encoding

Slide 101

Slide 101 text

Parallel Processing

Slide 102

Slide 102 text

30.06.2011 The VP8 Video Codec 102 Parallel Processing ● Partition 2 (DCT/WHT coefficients) can be divided in 8 sub-partitions Frame Header Partition 1 Partition 2 Sub- Partition ... Sub- Partition 3 Sub- Partition 2 Sub- Partition 1 Sub- Partition 8

Slide 103

Slide 103 text

30.06.2011 The VP8 Video Codec 103 Parallel Processing ● Partition 2 (DCT/WHT coefficients) can be divided sub-partitions ● Support for up to 8 cores Core 1 Core 2 Core 3 Core 4

Slide 104

Slide 104 text

30.06.2011 The VP8 Video Codec 104 Benchmarks Tools ● ffmpeg ● libvpx ● libx264 ● custom scripts ● qpsnr (qpsnr.youlink.org)

Slide 105

Slide 105 text

30.06.2011 The VP8 Video Codec 105 Benchmarks

Slide 106

Slide 106 text

30.06.2011 The VP8 Video Codec 106 Benchmarks

Slide 107

Slide 107 text

Demos

Slide 108

Slide 108 text

30.06.2011 The VP8 Video Codec 108 Conclusions ● “Good enough” for web video ● Maybe new default choice for web video ● “Thereʼs no way in hell anyone could write a decoder solely with this spec alone.” - x264 developer ● Patent situation still unclear

Slide 109

Slide 109 text

30.06.2011 The VP8 Video Codec 109 Conclusions

Slide 110

Slide 110 text

30.06.2011 The VP8 Video Codec 110 Resources ● http://x264dev.multimedia.cx ● http://multimedia.cx/eggs ● http://www.slideshare.net/DSPIP/google-vp8 ● http://qpsnr.youlink.org/vp8_x264/VP8_vs_x264.html ● http://tools.ietf.org/html/draft-bankoski-vp8-bitstream-01 ● Google VP8 Paper

Slide 111

Slide 111 text

Questions?