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

Introduction to HEVC
Introduction to HEVCIntroduction to HEVC
Introduction to HEVCYoss Cohen
Β 
Video Streaming - 4.ppt
Video Streaming - 4.pptVideo Streaming - 4.ppt
Video Streaming - 4.pptVideoguy
Β 
Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...
Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...
Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...FΓΆrderverein Technische FakultΓ€t
Β 
An Introduction to Versatile Video Coding (VVC) for UHD, HDR and 360 Video
An Introduction to  Versatile Video Coding (VVC) for UHD, HDR and 360 VideoAn Introduction to  Versatile Video Coding (VVC) for UHD, HDR and 360 Video
An Introduction to Versatile Video Coding (VVC) for UHD, HDR and 360 VideoDr. Mohieddin Moradi
Β 
Introduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video CompressionIntroduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video CompressionIain Richardson
Β 
Video Compression, Part 3-Section 1, Some Standard Video Codecs
Video Compression, Part 3-Section 1, Some Standard Video CodecsVideo Compression, Part 3-Section 1, Some Standard Video Codecs
Video Compression, Part 3-Section 1, Some Standard Video CodecsDr. Mohieddin Moradi
Β 
Thinking about IP migration
Thinking about IP migration Thinking about IP migration
Thinking about IP migration Dr. Mohieddin Moradi
Β 
H.264 video standard
H.264 video standardH.264 video standard
H.264 video standardSajan Sahu
Β 
HEVC Definitions and high-level syntax
HEVC Definitions and high-level syntaxHEVC Definitions and high-level syntax
HEVC Definitions and high-level syntaxYoss Cohen
Β 
Understanding MPEG DASH
Understanding MPEG DASHUnderstanding MPEG DASH
Understanding MPEG DASHSeung-Bum Lee
Β 
Video coding standards ppt
Video coding standards pptVideo coding standards ppt
Video coding standards pptLokesh Reddy Avula
Β 
Is Linux ready for safety related applications?
Is Linux ready for safety related applications?Is Linux ready for safety related applications?
Is Linux ready for safety related applications?Alexander Much
Β 
SDI to IP 2110 Transition Part 2
SDI to IP 2110 Transition Part 2SDI to IP 2110 Transition Part 2
SDI to IP 2110 Transition Part 2Dr. Mohieddin Moradi
Β 
Introduction to Video Compression Techniques - Anurag Jain
Introduction to Video Compression Techniques - Anurag JainIntroduction to Video Compression Techniques - Anurag Jain
Introduction to Video Compression Techniques - Anurag JainVideoguy
Β 
Video Streaming
Video StreamingVideo Streaming
Video StreamingVideoguy
Β 

What's hot (20)

Introduction to HEVC
Introduction to HEVCIntroduction to HEVC
Introduction to HEVC
Β 
Video Streaming - 4.ppt
Video Streaming - 4.pptVideo Streaming - 4.ppt
Video Streaming - 4.ppt
Β 
Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...
Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...
Versatile Video Coding – Video Compression beyond HEVC: Coding Tools for SDR ...
Β 
An Introduction to Versatile Video Coding (VVC) for UHD, HDR and 360 Video
An Introduction to  Versatile Video Coding (VVC) for UHD, HDR and 360 VideoAn Introduction to  Versatile Video Coding (VVC) for UHD, HDR and 360 Video
An Introduction to Versatile Video Coding (VVC) for UHD, HDR and 360 Video
Β 
Introduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video CompressionIntroduction to H.264 Advanced Video Compression
Introduction to H.264 Advanced Video Compression
Β 
H.264 vs HEVC
H.264 vs HEVCH.264 vs HEVC
H.264 vs HEVC
Β 
Video Compression, Part 3-Section 1, Some Standard Video Codecs
Video Compression, Part 3-Section 1, Some Standard Video CodecsVideo Compression, Part 3-Section 1, Some Standard Video Codecs
Video Compression, Part 3-Section 1, Some Standard Video Codecs
Β 
Thinking about IP migration
Thinking about IP migration Thinking about IP migration
Thinking about IP migration
Β 
H.264 video standard
H.264 video standardH.264 video standard
H.264 video standard
Β 
HEVC Definitions and high-level syntax
HEVC Definitions and high-level syntaxHEVC Definitions and high-level syntax
HEVC Definitions and high-level syntax
Β 
Understanding MPEG DASH
Understanding MPEG DASHUnderstanding MPEG DASH
Understanding MPEG DASH
Β 
Video coding standards ppt
Video coding standards pptVideo coding standards ppt
Video coding standards ppt
Β 
Is Linux ready for safety related applications?
Is Linux ready for safety related applications?Is Linux ready for safety related applications?
Is Linux ready for safety related applications?
Β 
HDMI
HDMIHDMI
HDMI
Β 
Hdmi
HdmiHdmi
Hdmi
Β 
SDI to IP 2110 Transition Part 2
SDI to IP 2110 Transition Part 2SDI to IP 2110 Transition Part 2
SDI to IP 2110 Transition Part 2
Β 
Adaptative streaming : enjeux, panorama, principes et difficultΓ©s
Adaptative streaming : enjeux, panorama, principes et difficultΓ©sAdaptative streaming : enjeux, panorama, principes et difficultΓ©s
Adaptative streaming : enjeux, panorama, principes et difficultΓ©s
Β 
Introduction to Video Compression Techniques - Anurag Jain
Introduction to Video Compression Techniques - Anurag JainIntroduction to Video Compression Techniques - Anurag Jain
Introduction to Video Compression Techniques - Anurag Jain
Β 
Video Streaming
Video StreamingVideo Streaming
Video Streaming
Β 
Video Streaming
Video StreamingVideo Streaming
Video Streaming
Β 

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
Β 
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 (11)

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
Β 
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
Β 
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
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
Β 
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
Β 
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
Β 
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
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 Feldmann
Β 
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...
Β 
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
Β 
OpenWRT
OpenWRTOpenWRT
OpenWRTpfleidi
Β 
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

Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
Β 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
Β 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
Β 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
Β 
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
Β 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
Β 
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
Β 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
Β 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
Β 
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
Β 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
Β 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
Β 
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
Β 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
Β 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
Β 
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
Β 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
Β 
[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
Β 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
Β 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
Β 

Recently uploaded (20)

Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
Β 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
Β 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Β 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
Β 
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
Β 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Β 
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
Β 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Β 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Β 
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
Β 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Β 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Β 
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
Β 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
Β 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Β 
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
Β 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
Β 
[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
Β 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
Β 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Β 

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