SlideShare a Scribd company logo
1 of 111
Download to read offline
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?

More Related Content

What's hot

GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham Origins
GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham OriginsGTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham Origins
GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham OriginsColin Barré-Brisebois
 
Practical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT MethodsPractical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT MethodsNaughty Dog
 
Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...
Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...
Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...KCDItaly
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with JanusLorenzo Miniero
 
YOLOv4: optimal speed and accuracy of object detection review
YOLOv4: optimal speed and accuracy of object detection reviewYOLOv4: optimal speed and accuracy of object detection review
YOLOv4: optimal speed and accuracy of object detection reviewLEE HOSEONG
 
Survey of Attention mechanism
Survey of Attention mechanismSurvey of Attention mechanism
Survey of Attention mechanismSwatiNarkhede1
 
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...confluent
 
Rendering AAA-Quality Characters of Project A1
Rendering AAA-Quality Characters of Project A1Rendering AAA-Quality Characters of Project A1
Rendering AAA-Quality Characters of Project A1Ki Hyunwoo
 
Audio and video streaming
Audio and video streamingAudio and video streaming
Audio and video streamingRohan Bhatkar
 
Introduction to HEVC
Introduction to HEVCIntroduction to HEVC
Introduction to HEVCYoss Cohen
 
cLoki: Like Loki but for ClickHouse
cLoki: Like Loki but for ClickHousecLoki: Like Loki but for ClickHouse
cLoki: Like Loki but for ClickHouseAltinity Ltd
 
Machine Learning approaches at video compression
Machine Learning approaches at video compression Machine Learning approaches at video compression
Machine Learning approaches at video compression Roberto Iacoviello
 
OpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image LifecycleOpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image LifecycleMihai Criveti
 
Visibility Optimization for Games
Visibility Optimization for GamesVisibility Optimization for Games
Visibility Optimization for GamesUmbra
 
LOD and Culling Systems That Scale - Unite LA
LOD and Culling Systems That Scale  - Unite LALOD and Culling Systems That Scale  - Unite LA
LOD and Culling Systems That Scale - Unite LAUnity Technologies
 
PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜
PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜
PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜Takuya Miyasaka
 
Thanos: Global, durable Prometheus monitoring
Thanos: Global, durable Prometheus monitoringThanos: Global, durable Prometheus monitoring
Thanos: Global, durable Prometheus monitoringBartłomiej Płotka
 
Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...
Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...
Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...Colin Barré-Brisebois
 
Screen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space MarineScreen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space MarinePope Kim
 

What's hot (20)

GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham Origins
GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham OriginsGTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham Origins
GTC 2014 - DirectX 11 Rendering and NVIDIA GameWorks in Batman: Arkham Origins
 
Practical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT MethodsPractical Spherical Harmonics Based PRT Methods
Practical Spherical Harmonics Based PRT Methods
 
Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...
Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...
Multi-Clusters Made Easy with Liqo:
Getting Rid of Your Clusters Keeping Them...
 
Scaling WebRTC applications with Janus
Scaling WebRTC applications with JanusScaling WebRTC applications with Janus
Scaling WebRTC applications with Janus
 
YOLOv4: optimal speed and accuracy of object detection review
YOLOv4: optimal speed and accuracy of object detection reviewYOLOv4: optimal speed and accuracy of object detection review
YOLOv4: optimal speed and accuracy of object detection review
 
Survey of Attention mechanism
Survey of Attention mechanismSurvey of Attention mechanism
Survey of Attention mechanism
 
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
Disaster Recovery with MirrorMaker 2.0 (Ryanne Dolan, Cloudera) Kafka Summit ...
 
Rendering AAA-Quality Characters of Project A1
Rendering AAA-Quality Characters of Project A1Rendering AAA-Quality Characters of Project A1
Rendering AAA-Quality Characters of Project A1
 
Audio and video streaming
Audio and video streamingAudio and video streaming
Audio and video streaming
 
Introduction to HEVC
Introduction to HEVCIntroduction to HEVC
Introduction to HEVC
 
cLoki: Like Loki but for ClickHouse
cLoki: Like Loki but for ClickHousecLoki: Like Loki but for ClickHouse
cLoki: Like Loki but for ClickHouse
 
Machine Learning approaches at video compression
Machine Learning approaches at video compression Machine Learning approaches at video compression
Machine Learning approaches at video compression
 
OpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image LifecycleOpenShift Virtualization - VM and OS Image Lifecycle
OpenShift Virtualization - VM and OS Image Lifecycle
 
Visibility Optimization for Games
Visibility Optimization for GamesVisibility Optimization for Games
Visibility Optimization for Games
 
LOD and Culling Systems That Scale - Unite LA
LOD and Culling Systems That Scale  - Unite LALOD and Culling Systems That Scale  - Unite LA
LOD and Culling Systems That Scale - Unite LA
 
PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜
PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜
PCE 〜MPLSネットワークのSDN化を本気で実現する"唯一の"方法〜
 
Thanos: Global, durable Prometheus monitoring
Thanos: Global, durable Prometheus monitoringThanos: Global, durable Prometheus monitoring
Thanos: Global, durable Prometheus monitoring
 
Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...
Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...
Colin Barre-Brisebois - GDC 2011 - Approximating Translucency for a Fast, Che...
 
Screen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space MarineScreen Space Decals in Warhammer 40,000: Space Marine
Screen Space Decals in Warhammer 40,000: Space Marine
 
YJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組みYJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組み
 

Viewers also liked

Leccion 5 - Empieza una nueva era de navegadores web
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
 
Huffman data compression-decompression
Huffman data compression-decompressionHuffman data compression-decompression
Huffman data compression-decompressiondipugovind
 
Leccion 1 - Preparandonos para el curso
Leccion 1 - Preparandonos para el cursoLeccion 1 - Preparandonos para el curso
Leccion 1 - Preparandonos para el cursoRaúl Jiménez Ortega
 
Audio compression
Audio compressionAudio compression
Audio compressionSahil Garg
 
IMAGE COMPRESSION AND DECOMPRESSION SYSTEM
IMAGE COMPRESSION AND DECOMPRESSION SYSTEMIMAGE COMPRESSION AND DECOMPRESSION SYSTEM
IMAGE COMPRESSION AND DECOMPRESSION SYSTEMVishesh Banga
 
The VoLTE User Experience--Better or Worse
The VoLTE User Experience--Better or WorseThe VoLTE User Experience--Better or Worse
The VoLTE User Experience--Better or WorseSailaja Tennati
 
HEVC / H265 Hands-On course
HEVC / H265 Hands-On courseHEVC / H265 Hands-On course
HEVC / H265 Hands-On courseYoss Cohen
 
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)
An Overview of High Efficiency Video Codec HEVC (H.265)Varun Ravi
 
Data Compression Technique
Data Compression TechniqueData Compression Technique
Data Compression Techniquenayakslideshare
 
Data Compression (Lossy and Lossless)
Data Compression (Lossy and Lossless)Data Compression (Lossy and Lossless)
Data Compression (Lossy and Lossless)Project Student
 
Fundamentals of Data compression
Fundamentals of Data compressionFundamentals of Data compression
Fundamentals of Data compressionM.k. Praveen
 

Viewers also liked (13)

Leccion 5 - Empieza una nueva era de navegadores web
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 web
 
Huffman data compression-decompression
Huffman data compression-decompressionHuffman data compression-decompression
Huffman data compression-decompression
 
Leccion 1 - Preparandonos para el curso
Leccion 1 - Preparandonos para el cursoLeccion 1 - Preparandonos para el curso
Leccion 1 - Preparandonos para el curso
 
Audio compression
Audio compressionAudio compression
Audio compression
 
IMAGE COMPRESSION AND DECOMPRESSION SYSTEM
IMAGE COMPRESSION AND DECOMPRESSION SYSTEMIMAGE COMPRESSION AND DECOMPRESSION SYSTEM
IMAGE COMPRESSION AND DECOMPRESSION SYSTEM
 
The VoLTE User Experience--Better or Worse
The VoLTE User Experience--Better or WorseThe VoLTE User Experience--Better or Worse
The VoLTE User Experience--Better or Worse
 
HEVC / H265 Hands-On course
HEVC / H265 Hands-On courseHEVC / H265 Hands-On course
HEVC / H265 Hands-On course
 
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)
An Overview of High Efficiency Video Codec HEVC (H.265)
 
H.264 vs HEVC
H.264 vs HEVCH.264 vs HEVC
H.264 vs HEVC
 
Data Compression Technique
Data Compression TechniqueData Compression Technique
Data Compression Technique
 
Data compression
Data compression Data compression
Data compression
 
Data Compression (Lossy and Lossless)
Data Compression (Lossy and Lossless)Data Compression (Lossy and Lossless)
Data Compression (Lossy and Lossless)
 
Fundamentals of Data compression
Fundamentals of Data compressionFundamentals of Data compression
Fundamentals of Data compression
 

Similar to The VP8 Video Codec

Reaching the multimedia web from embedded platforms with WPEWebkit
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
 
Paper id 2120148
Paper id 2120148Paper id 2120148
Paper id 2120148IJRAT
 
GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?philn2
 
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)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)Igalia
 
LAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George GreyLAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George Grey96Boards
 
LAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome KeynoteLAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome KeynoteLinaro
 
Video Codecs and the Future by Vince Puglia
Video Codecs and the Future by Vince PugliaVideo Codecs and the Future by Vince Puglia
Video Codecs and the Future by Vince PugliaDialogic Inc.
 
Multipilot pres-ufficiale def
Multipilot pres-ufficiale defMultipilot pres-ufficiale def
Multipilot pres-ufficiale defRoberto Navoni
 
GeoVision : CCTV Solutions : GV-NVR Lite VS QNAP VS-2008 Pro
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 ProTSOLUTIONS
 
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...
Embedded Recipes 2018 - Upstream multimedia on amlogic so cs from fiction t...Anne Nicolas
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Paris Android User Group
 
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...
Kernel Recipes 2018 - Is Video4Linux ready for all cutting-edge hardware? - E...Anne Nicolas
 
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...
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...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...
An Introduction to AV1 - The Next-Gen Royalty-Free Codec From the Alliance fo...Bitmovin Inc
 
Status of the Vulkan Video ecosystem – XDC 2023
Status of the Vulkan Video ecosystem – XDC 2023Status of the Vulkan Video ecosystem – XDC 2023
Status of the Vulkan Video ecosystem – XDC 2023Igalia
 
Flash and HTML5 Video
Flash and HTML5 VideoFlash and HTML5 Video
Flash and HTML5 VideoYoss Cohen
 

Similar to The VP8 Video Codec (20)

Reaching the multimedia web from embedded platforms with WPEWebkit
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
 
Paper id 2120148
Paper id 2120148Paper id 2120148
Paper id 2120148
 
GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?
 
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)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
 
LAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George GreyLAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George Grey
 
LAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome KeynoteLAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome Keynote
 
Video Codecs and the Future by Vince Puglia
Video Codecs and the Future by Vince PugliaVideo Codecs and the Future by Vince Puglia
Video Codecs and the Future by Vince Puglia
 
Multipilot pres-ufficiale def
Multipilot pres-ufficiale defMultipilot pres-ufficiale def
Multipilot pres-ufficiale def
 
GeoVision : CCTV Solutions : GV-NVR Lite VS QNAP VS-2008 Pro
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
 
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...
Embedded Recipes 2018 - Upstream multimedia on amlogic so cs from fiction t...
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014
 
Multimedia Services: Video
Multimedia Services: VideoMultimedia Services: Video
Multimedia Services: Video
 
Mile High Video 2019
Mile High Video 2019Mile High Video 2019
Mile High Video 2019
 
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...
Kernel Recipes 2018 - Is Video4Linux ready for all cutting-edge hardware? - E...
 
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...
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...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...
 
Vlc202
Vlc202Vlc202
Vlc202
 
Status of the Vulkan Video ecosystem – XDC 2023
Status of the Vulkan Video ecosystem – XDC 2023Status of the Vulkan Video ecosystem – XDC 2023
Status of the Vulkan Video ecosystem – XDC 2023
 
Flv for H.264
Flv for H.264Flv for H.264
Flv for H.264
 
Flash and HTML5 Video
Flash and HTML5 VideoFlash and HTML5 Video
Flash and HTML5 Video
 

More from pfleidi

GWT Introduction
GWT IntroductionGWT Introduction
GWT Introductionpfleidi
 
Scale The Realtime Web
Scale The Realtime WebScale The Realtime Web
Scale The Realtime Webpfleidi
 
Scala - A Scalable Language
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Languagepfleidi
 
YAXIM - Yet Another XMPP Instant Messenger
YAXIM - Yet Another XMPP Instant MessengerYAXIM - Yet Another XMPP Instant Messenger
YAXIM - Yet Another XMPP Instant Messengerpfleidi
 
Designpatterns in Ruby
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Rubypfleidi
 

More from pfleidi (6)

GWT Introduction
GWT IntroductionGWT Introduction
GWT Introduction
 
Scale The Realtime Web
Scale The Realtime WebScale The Realtime Web
Scale The Realtime Web
 
Scala - A Scalable Language
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Language
 
YAXIM - Yet Another XMPP Instant Messenger
YAXIM - Yet Another XMPP Instant MessengerYAXIM - Yet Another XMPP Instant Messenger
YAXIM - Yet Another XMPP Instant Messenger
 
OpenWRT
OpenWRTOpenWRT
OpenWRT
 
Designpatterns in Ruby
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Ruby
 

Recently uploaded

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 

Recently uploaded (20)

Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 

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