The VP8 Video Codec

P
The VP8 Video Codec


         Multimedia Codecs
              SS 2011

  Thomas Maier <tm061@hdm-stuttgart.de>
 Dominik Hübner <dh052@hdm-stuttgart.de>
 Sven Pfleiderer <sp055@hdm-stuttgart.de>
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
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




30.06.2011            The VP8 Video Codec            3
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




30.06.2011            The VP8 Video Codec         4
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




30.06.2011                 The VP8 Video Codec      5
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



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



30.06.2011                   The VP8 Video Codec   7
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

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

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




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




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


30.06.2011                The VP8 Video Codec   12
VP8 in-depth
Color Space
 ●   YUV 4:2:0 sub-sampling

                 R                         Y




                 G                         U




                 B                         V



30.06.2011           The VP8 Video Codec       14
VP8 Encoding Overview




30.06.2011          The VP8 Video Codec   15
Block Generation




30.06.2011       The VP8 Video Codec   16
Block Generation
               Y                U              V




             16x16              8x8            8x8




                            Macroblock

30.06.2011               The VP8 Video Codec         17
Prediction
Intra Frame Prediction




30.06.2011          The VP8 Video Codec   19
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




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




30.06.2011           The VP8 Video Codec   21
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




30.06.2011             The VP8 Video Codec            22
H_PRED

                   L0




             L     L1


                   L2


                   L3




30.06.2011       The VP8 Video Codec   23
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




30.06.2011             The VP8 Video Codec           24
V_PRED



             A0
                    A
                   A1     A2        A3




30.06.2011    The VP8 Video Codec        25
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

30.06.2011             The VP8 Video Codec           26
DC_PRED



                 AVG       A0
                                 A
                                 A1    A2   A3


                  L0




             L
                  L1

                  L2

                  L3


30.06.2011       The VP8 Video Codec             27
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 =Li  A j −P




30.06.2011                The VP8 Video Codec        28
TM_PRED



                  P       A0
                                 A
                                A1     A2   A3


                 L0




             L
                 L1

                 L2             X21

                 L3


             X21 = L2 + A1 - P
30.06.2011       The VP8 Video Codec             29
TM_PRED Code




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




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




30.06.2011            The VP8 Video Codec         32
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

30.06.2011           The VP8 Video Codec      33
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)




30.06.2011           The VP8 Video Codec        34
Motion Estimation




30.06.2011        The VP8 Video Codec   35
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




30.06.2011            The VP8 Video Codec         36
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


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




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




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




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




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




30.06.2011             The VP8 Video Codec            42
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




30.06.2011            The VP8 Video Codec        43
Motion Compensation




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




30.06.2011            The VP8 Video Codec           45
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




30.06.2011             The VP8 Video Codec           46
Inter Frame Prediction




30.06.2011          The VP8 Video Codec   47
Inter Frame Prediction
     Exploits the temporal coherence
     between nearby frames

     Components:
 ●   Reference Frames
 ●   Motion Vectors



30.06.2011          The VP8 Video Codec   48
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



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




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




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




30.06.2011            The VP8 Video Codec       52
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




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




30.06.2011             The VP8 Video Codec             54
Error Recovery




             Source: http://webm.googlecode.com/files/Realtime_VP8_2-9-2011.pdf

30.06.2011                       The VP8 Video Codec                              55
Transformation
Transformation




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




30.06.2011                The VP8 Video Codec   58
Transformation
    Preparation for transfomation process: Divide
    Macroblocks into Subblocks
                                16                     4


                                                16 *   Y




                                                           4
                     Y

                                         16
                                                       4


                            8                    4*    U




                                                           4
                                                       4

                 U/V
                                     8



                                                 4*    V




                                                           4
             Frame       Macroblock                Subblock

30.06.2011                The VP8 Video Codec                  59
Discrete Cosine Transformation
 ●   16 luma blocks / 4 + 4 chroma blocks
 ●   Transform each block into spectral components
     using the 2D - DCT




     ∣                 ∣              ∣                                         ∣
     255     0   255   0               510 195.1686 0 471.1786
     255     0   255   0   DCT          0      0    0     0
     255     0   255   0                0      0    0     0
     255     0   255   0                0      0    0     0

                                    Values based on dct2() function of Matlab


30.06.2011                 The VP8 Video Codec                                  60
Transformation
    The DC components of all subblocks are often
    correlated among each other


                             ∣                     ∣ ∣                           ∣
             Macroblocks     85    85   85    85           340       0   0       0
                             85    85   85    85    DCT     0        0   0       0
                             85    85   85    85            0        0   0       0
                             85    85   85    85            0        0   0       0




                             ∣                       ∣           ∣                       ∣
                             145    145      145   145           580         0       0   0
                             145    145      145   145   DCT      0          0       0   0
                             145    145      145   145            0          0       0   0
                             145    145      145   145            0          0       0   0


                             Values based on dct2() function of Matlab

30.06.2011                        The VP8 Video Codec                                        61
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




             ∣             ∣               ∣             ∣
            1 1   1 1                     1 1   1 1
            1 1 −1 −1                  1 1 1 −1 −1
         H=                        H=
            1 −1 1 −1                  4 1 −1 1 −1
            1 −1 −1 1                     1 −1 −1 1

                                       Normalized Walsh-Hadamard matrix



30.06.2011                      The VP8 Video Codec                       62
Walsh-Hadamard Transformation
    Example
   1st order transformation DC components                  Normalized transformation matrix



       ∣                       ∣                              ∣                       ∣
      340        340   340   340                               1/2 1/2    1/2 1/ 2
   A=
      340        340   340   340                           H = 1/2 1/2 −1/2 −1/2
      580        580   580   580   (Re) Transformation         1/2 −1/ 2 1/2 −1/2
      580        580   580   580                               1/2 −1/ 2 −1/2 1/ 2
                                   H ∗A∗H




             ∣                        ∣                           ∣             ∣
        1840 1840 1840 1840                                    1840     0   0   0
        −480 −480 −480 −480                                    −480     0   0   0
B=H ∗A=                                               C =B∗H =
          0    0    0    0                                       0      0   0   0
          0    0    0    0                                       0      0   0   0


30.06.2011                           The VP8 Video Codec                                  63
Quantization
Quantization




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




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


      ●   Chroma AC                       AC          Chroma
                                                       (DCT)
                                                     DC


                                                          AC

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




30.06.2011                 The VP8 Video Codec                 68
Quantization
   Example: 1st order luma AC coefficients
    ●   Quantization level: 3
             → Quantization factor from table: 6
    ●   DC coefficient is ignored here




             ∣              ∣                         ∣      ∣
           −312 7   1 0                               0 1  0 0
            1   12 −5 2                       1       0 2 −1 0
        A=                           Q=round  ∗ A =
            2   −3 3 −1                       6       0 −1 1 0
            1    0 −2 1                               0 0  0 0



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




30.06.2011                The VP8 Video Codec           70
Quantization
    The quantized coefficients are read in zig-zag
    order


                        -19 1       0      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]



30.06.2011           The VP8 Video Codec                                       71
Adaptive Loop Filtering
Adaptive Loop Filtering




30.06.2011          The VP8 Video Codec   73
Adaptive Loop Filtering
       Problem
       ●   Strong quantization (“worst” case: only DC)
       ●   Many pixels with same values
       ●   Blocking artifacts
                                                                  4      4




   ∣                       ∣ ∣                       ∣
   128       128   128   128      64    64   64    64
A=
   128       128   128   128
                               B=
                                  64    64   64    64
                                                             128 64




                                                                             4
   128       128   128   128      64    64   64    64
   128       128   128   128      64    64   64    64
                                                             Subblocks


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




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

●    Macroblock processing in
     scan line order

30.06.2011                    The VP8 Video Codec                   76
Adaptive Loop Filtering
    Filter segments
      ●   n segments per edge                     2
          n = blocklength                             4
      ●   2,4,6 or 8 taps wide
                                                          6
      ●   Pixels before edge: px
                                                              8
      ●   Pixels after edge: qx


                              p2 p1 p0 q0 q1 q2



30.06.2011                 The VP8 Video Codec                    77
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




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

                                                     q0=q0−a=128−−16=80
                 p1 p0 q0 q1




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




30.06.2011                  The VP8 Video Codec           80
Adaptive Loop Filtering
    Adaptive?
                                    Heavy Motion
                                    → Strong Filtering




                                              No Motion
                                              →	
 No Filtering
                 Low Motion
                 →	
 Slight Filtering

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




30.06.2011                 The VP8 Video Codec       82
Adaptive Loop Filtering
    Problem: Dependencies between macroblocks

               m Macroblocks


                 0 1
                m



30.06.2011             The VP8 Video Codec      83
Entropy Coding
Entropy Coding




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



             Frame
                        Partition 1             Partition 2
             Header




30.06.2011                The VP8 Video Codec                 86
Entropy Encoding
 ●   Entropy coding minifies redundancy

 ●   2 steps
      ●   Huffman Tree with a small alphabet
      ●   Binary arithmetic coding




30.06.2011                 The VP8 Video Codec   87
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
30.06.2011                 The VP8 Video Codec            88
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



30.06.2011                            The VP8 Video Codec           89
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                  187, 0, 2, 1, 0, 0, 0, 0, 0, ...
              1    0   0   0
              0    0   0   0




30.06.2011                     The VP8 Video Codec                               90
Entropy Encoding
 ●   Step 2: Lookup regarding tokens for each value


                        Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ...
                        Output:




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: 11111111




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 10




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 1100


                        Why not 11100?
                        We can save 1 bit!



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 110




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 0




30.06.2011            The VP8 Video Codec                                    96
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                          Extra Bits: 11
             Offset: 187 – 67 = 120               Binary Offset: 0000 0111 1000



                                 New Output: 11111111 0000 0111 1000 10 1100 110 0


30.06.2011                            The VP8 Video Codec                            97
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




30.06.2011                        The VP8 Video Codec                    98
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)




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




30.06.2011            The VP8 Video Codec   100
Parallel Processing
Parallel Processing
 ●   Partition 2 (DCT/WHT coefficients) can be
     divided in 8 sub-partitions


               Frame
                                    Partition 1                      Partition 2
               Header




               Sub-          Sub-             Sub-           Sub-            Sub-
             Partition 1   Partition 2      Partition 3    Partition ...   Partition 8




30.06.2011                               The VP8 Video Codec                             102
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




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




30.06.2011                 The VP8 Video Codec   104
Benchmarks




30.06.2011     The VP8 Video Codec   105
Benchmarks




30.06.2011     The VP8 Video Codec   106
Demos
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




30.06.2011            The VP8 Video Codec           108
Conclusions




30.06.2011     The VP8 Video Codec   109
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




30.06.2011                  The VP8 Video Codec                   110
Questions?
1 of 111

Recommended

Introduction to VP8 by
Introduction to VP8Introduction to VP8
Introduction to VP8Chih-Hsuan Kuo
1.4K views117 slides
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann by
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin Inc
856 views34 slides
Understanding MPEG DASH by
Understanding MPEG DASHUnderstanding MPEG DASH
Understanding MPEG DASHSeung-Bum Lee
272 views15 slides
動画配信の基礎知識 by
動画配信の基礎知識動画配信の基礎知識
動画配信の基礎知識Daiyu Hatakeyama
3.7K views51 slides
Real-Time Text and WebRTC @ Kamailio World 2023 by
Real-Time Text and WebRTC @ Kamailio World 2023Real-Time Text and WebRTC @ Kamailio World 2023
Real-Time Text and WebRTC @ Kamailio World 2023Lorenzo Miniero
214 views57 slides
An Overview of High Efficiency Video Codec HEVC (H.265) by
An Overview of High Efficiency Video Codec HEVC (H.265)An Overview of High Efficiency Video Codec HEVC (H.265)
An Overview of High Efficiency Video Codec HEVC (H.265)Varun Ravi
7.5K views23 slides

More Related Content

What's hot

[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest... by
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...Tomoya Hibi
1.7K views39 slides
Introduction to HEVC by
Introduction to HEVCIntroduction to HEVC
Introduction to HEVCYoss Cohen
4.2K views23 slides
ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE... by
ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE...ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE...
ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE...Mathias Wien
3.2K views245 slides
mpeg2ts1_es_pes_ps_ts_psi by
mpeg2ts1_es_pes_ps_ts_psimpeg2ts1_es_pes_ps_ts_psi
mpeg2ts1_es_pes_ps_ts_psihexiay
2.7K views66 slides
HDR and WCG Principles-Part 3 by
HDR and WCG Principles-Part 3HDR and WCG Principles-Part 3
HDR and WCG Principles-Part 3Dr. Mohieddin Moradi
269 views251 slides
Triangle Visibility buffer by
Triangle Visibility bufferTriangle Visibility buffer
Triangle Visibility bufferWolfgang Engel
662 views80 slides

What's hot(20)

[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest... by Tomoya Hibi
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
Tomoya Hibi1.7K views
Introduction to HEVC by Yoss Cohen
Introduction to HEVCIntroduction to HEVC
Introduction to HEVC
Yoss Cohen4.2K views
ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE... by Mathias Wien
ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE...ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE...
ICME 2016 - High Efficiency Video Coding - Coding Tools and Specification: HE...
Mathias Wien3.2K views
mpeg2ts1_es_pes_ps_ts_psi by hexiay
mpeg2ts1_es_pes_ps_ts_psimpeg2ts1_es_pes_ps_ts_psi
mpeg2ts1_es_pes_ps_ts_psi
hexiay2.7K views
ライブストリーミングの基礎知識 by kumaryu
ライブストリーミングの基礎知識ライブストリーミングの基礎知識
ライブストリーミングの基礎知識
kumaryu47.4K views
Iain Richardson: An Introduction to Video Compression by Iain Richardson
Iain Richardson: An Introduction to Video CompressionIain Richardson: An Introduction to Video Compression
Iain Richardson: An Introduction to Video Compression
Iain Richardson8.4K views
MMO Design Architecture by Andrew by Agate Studio
MMO Design Architecture by AndrewMMO Design Architecture by Andrew
MMO Design Architecture by Andrew
Agate Studio4.5K views
VVC tutorial at ICME 2020 together with Benjamin Bross by Mathias Wien
VVC tutorial at ICME 2020 together with Benjamin BrossVVC tutorial at ICME 2020 together with Benjamin Bross
VVC tutorial at ICME 2020 together with Benjamin Bross
Mathias Wien3.6K views
Forts and Fights Scaling Performance on Unreal Engine* by Intel® Software
Forts and Fights Scaling Performance on Unreal Engine*Forts and Fights Scaling Performance on Unreal Engine*
Forts and Fights Scaling Performance on Unreal Engine*
Intel® Software2.7K views
放送を取り巻く最新動画配信技術 by Masashi Ito
放送を取り巻く最新動画配信技術放送を取り巻く最新動画配信技術
放送を取り巻く最新動画配信技術
Masashi Ito8.7K views
《SRP到URP从原理到应用》 by 宣雨松 MOMO
《SRP到URP从原理到应用》《SRP到URP从原理到应用》
《SRP到URP从原理到应用》
宣雨松 MOMO839 views
An Overview of the ATSC 3.0 Physical Layer Specification by Alwin Poulose
An Overview of the ATSC 3.0 Physical Layer SpecificationAn Overview of the ATSC 3.0 Physical Layer Specification
An Overview of the ATSC 3.0 Physical Layer Specification
Alwin Poulose1.5K views
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson by AMD Developer Central
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson

Viewers also liked

Leccion 5 - Empieza una nueva era de navegadores web by
Leccion 5 - Empieza una nueva era de navegadores webLeccion 5 - Empieza una nueva era de navegadores web
Leccion 5 - Empieza una nueva era de navegadores webRaúl Jiménez Ortega
642 views20 slides
Huffman data compression-decompression by
Huffman data compression-decompressionHuffman data compression-decompression
Huffman data compression-decompressiondipugovind
2.6K views20 slides
Leccion 1 - Preparandonos para el curso by
Leccion 1 - Preparandonos para el cursoLeccion 1 - Preparandonos para el curso
Leccion 1 - Preparandonos para el cursoRaúl Jiménez Ortega
1K views10 slides
Audio compression by
Audio compressionAudio compression
Audio compressionSahil Garg
5K views10 slides
IMAGE COMPRESSION AND DECOMPRESSION SYSTEM by
IMAGE COMPRESSION AND DECOMPRESSION SYSTEMIMAGE COMPRESSION AND DECOMPRESSION SYSTEM
IMAGE COMPRESSION AND DECOMPRESSION SYSTEMVishesh Banga
10.4K views42 slides
The VoLTE User Experience--Better or Worse by
The VoLTE User Experience--Better or WorseThe VoLTE User Experience--Better or Worse
The VoLTE User Experience--Better or WorseSailaja Tennati
23K views34 slides

Viewers also liked(11)

Huffman data compression-decompression by dipugovind
Huffman data compression-decompressionHuffman data compression-decompression
Huffman data compression-decompression
dipugovind2.6K views
Audio compression by Sahil Garg
Audio compressionAudio compression
Audio compression
Sahil Garg5K views
IMAGE COMPRESSION AND DECOMPRESSION SYSTEM by Vishesh Banga
IMAGE COMPRESSION AND DECOMPRESSION SYSTEMIMAGE COMPRESSION AND DECOMPRESSION SYSTEM
IMAGE COMPRESSION AND DECOMPRESSION SYSTEM
Vishesh Banga10.4K views
The VoLTE User Experience--Better or Worse by Sailaja Tennati
The VoLTE User Experience--Better or WorseThe VoLTE User Experience--Better or Worse
The VoLTE User Experience--Better or Worse
Sailaja Tennati23K views
HEVC / H265 Hands-On course by Yoss Cohen
HEVC / H265 Hands-On courseHEVC / H265 Hands-On course
HEVC / H265 Hands-On course
Yoss Cohen6.1K views
Data Compression Technique by nayakslideshare
Data Compression TechniqueData Compression Technique
Data Compression Technique
nayakslideshare21.4K views
Data Compression (Lossy and Lossless) by Project Student
Data Compression (Lossy and Lossless)Data Compression (Lossy and Lossless)
Data Compression (Lossy and Lossless)
Project Student7.9K views
Fundamentals of Data compression by M.k. Praveen
Fundamentals of Data compressionFundamentals of Data compression
Fundamentals of Data compression
M.k. Praveen12.3K views

Similar to The VP8 Video Codec

Reaching the multimedia web from embedded platforms with WPEWebkit by
Reaching the multimedia web from embedded platforms with WPEWebkitReaching the multimedia web from embedded platforms with WPEWebkit
Reaching the multimedia web from embedded platforms with WPEWebkitIgalia
248 views44 slides
Paper id 2120148 by
Paper id 2120148Paper id 2120148
Paper id 2120148IJRAT
287 views13 slides
GStreamer support in WebKit. What's new? (GStreamer Conference 2015) by
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)Igalia
1.1K views25 slides
GStreamer support in WebKit. what’s new? by
GStreamer support in WebKit. what’s new?GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?philn2
548 views25 slides
LAS16 100 K1 - Keynote George Grey by
LAS16 100 K1 - Keynote George GreyLAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George Grey96Boards
162 views49 slides
LAS16-100K1: Welcome Keynote by
LAS16-100K1: Welcome KeynoteLAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome KeynoteLinaro
6.6K views49 slides

Similar to The VP8 Video Codec(20)

Reaching the multimedia web from embedded platforms with WPEWebkit by Igalia
Reaching the multimedia web from embedded platforms with WPEWebkitReaching the multimedia web from embedded platforms with WPEWebkit
Reaching the multimedia web from embedded platforms with WPEWebkit
Igalia248 views
Paper id 2120148 by IJRAT
Paper id 2120148Paper id 2120148
Paper id 2120148
IJRAT287 views
GStreamer support in WebKit. What's new? (GStreamer Conference 2015) by Igalia
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
Igalia1.1K views
GStreamer support in WebKit. what’s new? by philn2
GStreamer support in WebKit. what’s new?GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?
philn2548 views
LAS16 100 K1 - Keynote George Grey by 96Boards
LAS16 100 K1 - Keynote George GreyLAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George Grey
96Boards162 views
LAS16-100K1: Welcome Keynote by Linaro
LAS16-100K1: Welcome KeynoteLAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome Keynote
Linaro6.6K views
Video Codecs and the Future by Vince Puglia by Dialogic Inc.
Video Codecs and the Future by Vince PugliaVideo Codecs and the Future by Vince Puglia
Video Codecs and the Future by Vince Puglia
Dialogic Inc.817 views
Multipilot pres-ufficiale def by Roberto Navoni
Multipilot pres-ufficiale defMultipilot pres-ufficiale def
Multipilot pres-ufficiale def
Roberto Navoni518 views
GeoVision : CCTV Solutions : GV-NVR Lite VS QNAP VS-2008 Pro by TSOLUTIONS
GeoVision : CCTV Solutions : GV-NVR Lite VS QNAP VS-2008 ProGeoVision : CCTV Solutions : GV-NVR Lite VS QNAP VS-2008 Pro
GeoVision : CCTV Solutions : GV-NVR Lite VS QNAP VS-2008 Pro
TSOLUTIONS752 views
Embedded Recipes 2018 - Upstream multimedia on amlogic so cs from fiction t... by Anne Nicolas
Embedded Recipes 2018 - Upstream multimedia on amlogic so cs   from fiction t...Embedded Recipes 2018 - Upstream multimedia on amlogic so cs   from fiction t...
Embedded Recipes 2018 - Upstream multimedia on amlogic so cs from fiction t...
Anne Nicolas1K views
Kernel Recipes 2018 - Is Video4Linux ready for all cutting-edge hardware? - E... by Anne Nicolas
Kernel Recipes 2018 - Is Video4Linux ready for all cutting-edge hardware? - E...Kernel Recipes 2018 - Is Video4Linux ready for all cutting-edge hardware? - E...
Kernel Recipes 2018 - Is Video4Linux ready for all cutting-edge hardware? - E...
Anne Nicolas288 views
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo... by Bitmovin Inc
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...
Bitmovin Inc3.1K views
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo... by Tanya Vernitsky
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...
Tanya Vernitsky141 views
Flash and HTML5 Video by Yoss Cohen
Flash and HTML5 VideoFlash and HTML5 Video
Flash and HTML5 Video
Yoss Cohen888 views
Blackmagic design Ultra studiopro by AV ProfShop
Blackmagic design Ultra studioproBlackmagic design Ultra studiopro
Blackmagic design Ultra studiopro
AV ProfShop1K views

More from pfleidi

GWT Introduction by
GWT IntroductionGWT Introduction
GWT Introductionpfleidi
1.6K views19 slides
Scale The Realtime Web by
Scale The Realtime WebScale The Realtime Web
Scale The Realtime Webpfleidi
5.6K views84 slides
Scala - A Scalable Language by
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Languagepfleidi
1.8K views26 slides
YAXIM - Yet Another XMPP Instant Messenger by
YAXIM - Yet Another XMPP Instant MessengerYAXIM - Yet Another XMPP Instant Messenger
YAXIM - Yet Another XMPP Instant Messengerpfleidi
1.9K views10 slides
OpenWRT by
OpenWRTOpenWRT
OpenWRTpfleidi
2K views27 slides
Designpatterns in Ruby by
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Rubypfleidi
403 views22 slides

More from pfleidi(6)

GWT Introduction by pfleidi
GWT IntroductionGWT Introduction
GWT Introduction
pfleidi1.6K views
Scale The Realtime Web by pfleidi
Scale The Realtime WebScale The Realtime Web
Scale The Realtime Web
pfleidi5.6K views
Scala - A Scalable Language by pfleidi
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Language
pfleidi1.8K views
YAXIM - Yet Another XMPP Instant Messenger by pfleidi
YAXIM - Yet Another XMPP Instant MessengerYAXIM - Yet Another XMPP Instant Messenger
YAXIM - Yet Another XMPP Instant Messenger
pfleidi1.9K views
OpenWRT by pfleidi
OpenWRTOpenWRT
OpenWRT
pfleidi2K views
Designpatterns in Ruby by pfleidi
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Ruby
pfleidi403 views

Recently uploaded

"Running students' code in isolation. The hard way", Yurii Holiuk by
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk Fwdays
36 views34 slides
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineShapeBlue
225 views19 slides
Ransomware is Knocking your Door_Final.pdf by
Ransomware is Knocking your Door_Final.pdfRansomware is Knocking your Door_Final.pdf
Ransomware is Knocking your Door_Final.pdfSecurity Bootcamp
98 views46 slides
Digital Personal Data Protection (DPDP) Practical Approach For CISOs by
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOsPriyanka Aash
162 views59 slides
Why and How CloudStack at weSystems - Stephan Bienek - weSystems by
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsWhy and How CloudStack at weSystems - Stephan Bienek - weSystems
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsShapeBlue
247 views13 slides
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
183 views18 slides

Recently uploaded(20)

"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays36 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue225 views
Digital Personal Data Protection (DPDP) Practical Approach For CISOs by Priyanka Aash
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOs
Priyanka Aash162 views
Why and How CloudStack at weSystems - Stephan Bienek - weSystems by ShapeBlue
Why and How CloudStack at weSystems - Stephan Bienek - weSystemsWhy and How CloudStack at weSystems - Stephan Bienek - weSystems
Why and How CloudStack at weSystems - Stephan Bienek - weSystems
ShapeBlue247 views
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue183 views
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ... by ShapeBlue
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
Import Export Virtual Machine for KVM Hypervisor - Ayush Pandey - University ...
ShapeBlue120 views
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue by ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlueCloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
CloudStack Object Storage - An Introduction - Vladimir Petrov - ShapeBlue
ShapeBlue139 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue207 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue196 views
Business Analyst Series 2023 - Week 4 Session 7 by DianaGray10
Business Analyst Series 2023 -  Week 4 Session 7Business Analyst Series 2023 -  Week 4 Session 7
Business Analyst Series 2023 - Week 4 Session 7
DianaGray10146 views
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue by ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlueCloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
CloudStack Managed User Data and Demo - Harikrishna Patnala - ShapeBlue
ShapeBlue137 views
State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue303 views
The Power of Generative AI in Accelerating No Code Adoption.pdf by Saeed Al Dhaheri
The Power of Generative AI in Accelerating No Code Adoption.pdfThe Power of Generative AI in Accelerating No Code Adoption.pdf
The Power of Generative AI in Accelerating No Code Adoption.pdf
Saeed Al Dhaheri39 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue164 views
Optimizing Communication to Optimize Human Behavior - LCBM by Yaman Kumar
Optimizing Communication to Optimize Human Behavior - LCBMOptimizing Communication to Optimize Human Behavior - LCBM
Optimizing Communication to Optimize Human Behavior - LCBM
Yaman Kumar38 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu437 views
Initiating and Advancing Your Strategic GIS Governance Strategy by Safe Software
Initiating and Advancing Your Strategic GIS Governance StrategyInitiating and Advancing Your Strategic GIS Governance Strategy
Initiating and Advancing Your Strategic GIS Governance Strategy
Safe Software184 views
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by BookNet Canada
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
BookNet Canada44 views
"Node.js Development in 2024: trends and tools", Nikita Galkin by Fwdays
"Node.js Development in 2024: trends and tools", Nikita Galkin "Node.js Development in 2024: trends and tools", Nikita Galkin
"Node.js Development in 2024: trends and tools", Nikita Galkin
Fwdays33 views

The VP8 Video Codec

  • 1. The VP8 Video Codec Multimedia Codecs SS 2011 Thomas Maier <tm061@hdm-stuttgart.de> Dominik Hübner <dh052@hdm-stuttgart.de> Sven Pfleiderer <sp055@hdm-stuttgart.de>
  • 2. 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
  • 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 30.06.2011 The VP8 Video Codec 3
  • 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 30.06.2011 The VP8 Video Codec 4
  • 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 30.06.2011 The VP8 Video Codec 5
  • 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 30.06.2011 The VP8 Video Codec 6
  • 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 30.06.2011 The VP8 Video Codec 7
  • 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 30.06.2011 The VP8 Video Codec 8
  • 9. Application Browser Theora H.264 VP8 WebM Internet Manual 9.0 Manual Explorer Install Install Mozilla 3.5 No 4.0 Firefox Google 3.0 Yes 6.0 Chrome (removed in future) Safari Manual 3.1 Manual Install Install Opera 10.50 No 10.60 Konquerer 4.4 Depends on Yes QT Epiphany 2.28 Depends on Depends on GStreamer GStreamer http://en.wikipedia.org/wiki/HTML5_video#Table 30.06.2011 The VP8 Video Codec 9
  • 10. Application ● Youtube successively converts to VP8 ● Flash support announced ● Important for DRM ● Skype 5.0 ● Nvidia announced 3D support 30.06.2011 The VP8 Video Codec 10
  • 11. Application Tools and libraries ● GStreamer ● FFmpeg ● libvpx ● ffvp8 30.06.2011 The VP8 Video Codec 11
  • 12. Application Hardware support ● AMD ● ARM ● Broadcom ● MIPS ● Nvidia ● Texas Instruments ● Open IP for hardware decoders 30.06.2011 The VP8 Video Codec 12
  • 14. Color Space ● YUV 4:2:0 sub-sampling R Y G U B V 30.06.2011 The VP8 Video Codec 14
  • 15. VP8 Encoding Overview 30.06.2011 The VP8 Video Codec 15
  • 16. Block Generation 30.06.2011 The VP8 Video Codec 16
  • 17. Block Generation Y U V 16x16 8x8 8x8 Macroblock 30.06.2011 The VP8 Video Codec 17
  • 19. Intra Frame Prediction 30.06.2011 The VP8 Video Codec 19
  • 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 30.06.2011 The VP8 Video Codec 20
  • 21. Chroma Prediction Modes ● H_PRED ● V_PRED ● DC_PRED ● TM_PRED 30.06.2011 The VP8 Video Codec 21
  • 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 30.06.2011 The VP8 Video Codec 22
  • 23. H_PRED L0 L L1 L2 L3 30.06.2011 The VP8 Video Codec 23
  • 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 30.06.2011 The VP8 Video Codec 24
  • 25. V_PRED A0 A A1 A2 A3 30.06.2011 The VP8 Video Codec 25
  • 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 30.06.2011 The VP8 Video Codec 26
  • 27. DC_PRED AVG A0 A A1 A2 A3 L0 L L1 L2 L3 30.06.2011 The VP8 Video Codec 27
  • 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 =Li  A j −P 30.06.2011 The VP8 Video Codec 28
  • 29. TM_PRED P A0 A A1 A2 A3 L0 L L1 L2 X21 L3 X21 = L2 + A1 - P 30.06.2011 The VP8 Video Codec 29
  • 30. TM_PRED Code 30.06.2011 The VP8 Video Codec 30
  • 31. Luma Prediction Modes ● Basically all chroma prediction modes ● With 16x16 macroblocks ● Additional B_PRED mode 30.06.2011 The VP8 Video Codec 31
  • 32. B_PRED ● Splits 16x16 macroblock into 16 4x4 sub-blocks ● Each sub-block is independently predicted ● Ten available prediction modes for sub-blocks 30.06.2011 The VP8 Video Codec 32
  • 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 30.06.2011 The VP8 Video Codec 33
  • 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) 30.06.2011 The VP8 Video Codec 34
  • 35. Motion Estimation 30.06.2011 The VP8 Video Codec 35
  • 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 30.06.2011 The VP8 Video Codec 36
  • 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 30.06.2011 The VP8 Video Codec 37
  • 38. Motion Vector Types ● MV_NEAREST ● MV_NEAR ● MV_ZERO ● MV_NEW ● MV_SPLIT 30.06.2011 The VP8 Video Codec 38
  • 39. MV_NEAREST ● Re-use non-zero motion vector of last decoded block 30.06.2011 The VP8 Video Codec 39
  • 40. MV_NEAR ● Re-use non-zero motion vector of second-to- last decoded block 30.06.2011 The VP8 Video Codec 40
  • 41. MV_ZERO ● Block has not moved ● Block is at the same position as in preceding frame 30.06.2011 The VP8 Video Codec 41
  • 42. MV_NEW ● New motion vector ● Mode followed by motion vector data ● Data is added to buffer of last encoded blocks 30.06.2011 The VP8 Video Codec 42
  • 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 30.06.2011 The VP8 Video Codec 43
  • 44. Motion Compensation 30.06.2011 The VP8 Video Codec 44
  • 45. Motion Compensation ● Apply motion vectors to previous frame ● Generate a predicted frame ● Only difference between predicted and actual frame needs to be transmitted 30.06.2011 The VP8 Video Codec 45
  • 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 30.06.2011 The VP8 Video Codec 46
  • 47. Inter Frame Prediction 30.06.2011 The VP8 Video Codec 47
  • 48. Inter Frame Prediction Exploits the temporal coherence between nearby frames Components: ● Reference Frames ● Motion Vectors 30.06.2011 The VP8 Video Codec 48
  • 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 30.06.2011 The VP8 Video Codec 49
  • 50. Prediction Frame Types ● Previous Frame ● Alternate Reference Frame ● Golden Reference Frame ● Each of these three types can be used for prediction 30.06.2011 The VP8 Video Codec 50
  • 51. Previous Frame ● Last fully decoded frame ● Updated with every shown frame 30.06.2011 The VP8 Video Codec 51
  • 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 30.06.2011 The VP8 Video Codec 52
  • 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 30.06.2011 The VP8 Video Codec 53
  • 54. Updating Frame Buffers ● Key frame: Updates all three buffers ● Predicted frame: Flag for updating alternate or golden frame buffer 30.06.2011 The VP8 Video Codec 54
  • 55. Error Recovery Source: http://webm.googlecode.com/files/Realtime_VP8_2-9-2011.pdf 30.06.2011 The VP8 Video Codec 55
  • 57. Transformation 30.06.2011 The VP8 Video Codec 57
  • 58. Decorrelation ● Necessary for efficient entropy encoding ● Achieved with hybrid transformation ● Discrete Cosine Transformation ● Walsh-Hadamard Transformation 30.06.2011 The VP8 Video Codec 58
  • 59. Transformation Preparation for transfomation process: Divide Macroblocks into Subblocks 16 4 16 * Y 4 Y 16 4 8 4* U 4 4 U/V 8 4* V 4 Frame Macroblock Subblock 30.06.2011 The VP8 Video Codec 59
  • 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 510 195.1686 0 471.1786 255 0 255 0 DCT 0 0 0 0 255 0 255 0 0 0 0 0 255 0 255 0 0 0 0 0 Values based on dct2() function of Matlab 30.06.2011 The VP8 Video Codec 60
  • 61. Transformation The DC components of all subblocks are often correlated among each other ∣ ∣ ∣ ∣ Macroblocks 85 85 85 85 340 0 0 0 85 85 85 85 DCT 0 0 0 0 85 85 85 85 0 0 0 0 85 85 85 85 0 0 0 0 ∣ ∣ ∣ ∣ 145 145 145 145 580 0 0 0 145 145 145 145 DCT 0 0 0 0 145 145 145 145 0 0 0 0 145 145 145 145 0 0 0 0 Values based on dct2() function of Matlab 30.06.2011 The VP8 Video Codec 61
  • 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 ∣ ∣ ∣ ∣ 1 1 1 1 1 1 1 1 1 1 −1 −1 1 1 1 −1 −1 H= H= 1 −1 1 −1  4 1 −1 1 −1 1 −1 −1 1 1 −1 −1 1 Normalized Walsh-Hadamard matrix 30.06.2011 The VP8 Video Codec 62
  • 63. Walsh-Hadamard Transformation Example 1st order transformation DC components Normalized transformation matrix ∣ ∣ ∣ ∣ 340 340 340 340 1/2 1/2 1/2 1/ 2 A= 340 340 340 340 H = 1/2 1/2 −1/2 −1/2 580 580 580 580 (Re) Transformation 1/2 −1/ 2 1/2 −1/2 580 580 580 580 1/2 −1/ 2 −1/2 1/ 2 H ∗A∗H ∣ ∣ ∣ ∣ 1840 1840 1840 1840 1840 0 0 0 −480 −480 −480 −480 −480 0 0 0 B=H ∗A= C =B∗H = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30.06.2011 The VP8 Video Codec 63
  • 65. Quantization 30.06.2011 The VP8 Video Codec 65
  • 66. Quantization ● Quantization of the transformation coefficients: ● Less data per coefficient ● More zeros! ● Scalar quantization ● Designed for quality range of ~30dB to ~45dB SNR 30.06.2011 The VP8 Video Codec 66
  • 67. Quantization For each frame different factors for: ● 1st order luma DC 1st order luma ● 1st order luma AC (DCT) ● 2nd order luma DC DC nd 2 order luma ● 2nd order luma AC (WHT) AC ● Chroma DC DC ● Chroma AC AC Chroma (DCT) DC AC 30.06.2011 The VP8 Video Codec 67
  • 68. Quantization ● 128 quantization levels with given factors ● Quantization table for DC coefficients in Y1 planes 30.06.2011 The VP8 Video Codec 68
  • 69. Quantization Example: 1st order luma AC coefficients ● Quantization level: 3 → Quantization factor from table: 6 ● DC coefficient is ignored here ∣ ∣ ∣ ∣ −312 7 1 0 0 1 0 0 1 12 −5 2 1 0 2 −1 0 A= Q=round  ∗ A = 2 −3 3 −1 6 0 −1 1 0 1 0 −2 1 0 0 0 0 30.06.2011 The VP8 Video Codec 69
  • 70. Quantization Adaptive Quantization ● Up to 4 different segments (q0-q3) ● Each segment with n macroblocks and its own quantization parameter set 30.06.2011 The VP8 Video Codec 70
  • 71. Quantization The quantized coefficients are read in zig-zag order -19 1 0 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] 30.06.2011 The VP8 Video Codec 71
  • 73. Adaptive Loop Filtering 30.06.2011 The VP8 Video Codec 73
  • 74. Adaptive Loop Filtering Problem ● Strong quantization (“worst” case: only DC) ● Many pixels with same values ● Blocking artifacts 4 4 ∣ ∣ ∣ ∣ 128 128 128 128 64 64 64 64 A= 128 128 128 128 B= 64 64 64 64 128 64 4 128 128 128 128 64 64 64 64 128 128 128 128 64 64 64 64 Subblocks 30.06.2011 The VP8 Video Codec 74
  • 75. Adaptive Loop Filtering ● VP8 has two filter modes – Simple – Normal ● Configuration in frame-header ● Two parameters – loop_filter_level – sharpness_level 30.06.2011 The VP8 Video Codec 75
  • 76. Adaptive Loop Filtering ● Filter order per macroblock 1 1. Left macroblock edge 2. Vertical subblock edges 3. Macroblock edge at the top 3 2 4. Horizontal subblock edges 4 ● Macroblock processing in scan line order 30.06.2011 The VP8 Video Codec 76
  • 77. Adaptive Loop Filtering Filter segments ● n segments per edge 2 n = blocklength 4 ● 2,4,6 or 8 taps wide 6 ● Pixels before edge: px 8 ● Pixels after edge: qx p2 p1 p0 q0 q1 q2 30.06.2011 The VP8 Video Codec 77
  • 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 30.06.2011 The VP8 Video Codec 78
  • 79. Adaptive Loop Filtering Simple Mode – Example 3∗128128 p= =128 4 4 4 3∗6464 q= =64 4 p1: 128 p0: 128 q− p 64−128 4 a= = =−16 q0: 64 4 4 q1: 64 p0= p0a=128−16=122 q0=q0−a=128−−16=80 p1 p0 q0 q1 30.06.2011 The VP8 Video Codec 79
  • 80. Adaptive Loop Filtering Normal Mode ● Segments 2,4,6 or 8 taps wide ● Different adjustments for different positions ● Different weightings for inner positions 30.06.2011 The VP8 Video Codec 80
  • 81. Adaptive Loop Filtering Adaptive? Heavy Motion → Strong Filtering No Motion → No Filtering Low Motion → Slight Filtering 30.06.2011 The VP8 Video Codec 81
  • 82. Adaptive Loop Filtering SIMD processors aka Vector CPUs ● Loop filter optimized for SIMD operations ● Sources already implemented 30.06.2011 The VP8 Video Codec 82
  • 83. Adaptive Loop Filtering Problem: Dependencies between macroblocks m Macroblocks 0 1 m 30.06.2011 The VP8 Video Codec 83
  • 85. Entropy Coding 30.06.2011 The VP8 Video Codec 85
  • 86. Frame Format ● Frames are divided in 3 partitions ● Uncompressed header chunk ● Macroblock coding modes and motion vectors ● Quantized transform coefficients Frame Partition 1 Partition 2 Header 30.06.2011 The VP8 Video Codec 86
  • 87. Entropy Encoding ● Entropy coding minifies redundancy ● 2 steps ● Huffman Tree with a small alphabet ● Binary arithmetic coding 30.06.2011 The VP8 Video Codec 87
  • 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 30.06.2011 The VP8 Video Codec 88
  • 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 30.06.2011 The VP8 Video Codec 89
  • 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 187, 0, 2, 1, 0, 0, 0, 0, 0, ... 1 0 0 0 0 0 0 0 30.06.2011 The VP8 Video Codec 90
  • 91. Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output: 30.06.2011 The VP8 Video Codec 91
  • 92. Entropy Encoding ● Step 2: Lookup regarding tokens for each value Remaining values: 187, 0, 2, 1, 0, 0, 0, 0, 0, ... Output: 11111111 30.06.2011 The VP8 Video Codec 92
  • 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 30.06.2011 The VP8 Video Codec 93
  • 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! 30.06.2011 The VP8 Video Codec 94
  • 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 30.06.2011 The VP8 Video Codec 95
  • 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 30.06.2011 The VP8 Video Codec 96
  • 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 Extra Bits: 11 Offset: 187 – 67 = 120 Binary Offset: 0000 0111 1000 New Output: 11111111 0000 0111 1000 10 1100 110 0 30.06.2011 The VP8 Video Codec 97
  • 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 30.06.2011 The VP8 Video Codec 98
  • 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) 30.06.2011 The VP8 Video Codec 99
  • 100. Entropy Encoding ● Binary arithmetic encoding 30.06.2011 The VP8 Video Codec 100
  • 102. Parallel Processing ● Partition 2 (DCT/WHT coefficients) can be divided in 8 sub-partitions Frame Partition 1 Partition 2 Header Sub- Sub- Sub- Sub- Sub- Partition 1 Partition 2 Partition 3 Partition ... Partition 8 30.06.2011 The VP8 Video Codec 102
  • 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 30.06.2011 The VP8 Video Codec 103
  • 104. Benchmarks Tools ● ffmpeg ● libvpx ● libx264 ● custom scripts ● qpsnr (qpsnr.youlink.org) 30.06.2011 The VP8 Video Codec 104
  • 105. Benchmarks 30.06.2011 The VP8 Video Codec 105
  • 106. Benchmarks 30.06.2011 The VP8 Video Codec 106
  • 107. Demos
  • 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 30.06.2011 The VP8 Video Codec 108
  • 109. Conclusions 30.06.2011 The VP8 Video Codec 109
  • 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 30.06.2011 The VP8 Video Codec 110