< draft-bankoski-vp8-bitstream-01.txt   draft-bankoski-vp8-bitstream-02.txt >
Network Working Group J. Bankoski Network Working Group J. Bankoski
Internet-Draft P. Wilkins Internet-Draft P. Wilkins
Intended status: Informational Y. Xu Intended status: Informational Y. Xu
Expires: September 12, 2011 Google, Inc. Expires: November 19, 2011 Google, Inc.
March 11, 2011 May 18, 2011
VP8 Data Format and Decoding Guide VP8 Data Format and Decoding Guide
draft-bankoski-vp8-bitstream-01 draft-bankoski-vp8-bitstream-02
Abstract Abstract
This document describes the VP8 compressed video data format, This document describes the VP8 compressed video data format,
together with a discussion of the decoding procedure for the format. together with a discussion of the decoding procedure for the format.
Status of this Memo Status of this Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
skipping to change at page 1, line 32 skipping to change at page 1, line 32
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/. Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 12, 2011. This Internet-Draft will expire on November 19, 2011.
Copyright Notice Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the Copyright (c) 2011 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. to this document.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Format Overview . . . . . . . . . . . . . . . . . . . . . . . 7 2. Format Overview . . . . . . . . . . . . . . . . . . . . . . . 6
3. Compressed Frame Types . . . . . . . . . . . . . . . . . . . 9 3. Compressed Frame Types . . . . . . . . . . . . . . . . . . . 8
4. Overview of Compressed Data Format . . . . . . . . . . . . . 10 4. Overview of Compressed Data Format . . . . . . . . . . . . . 9
5. Overview of the Decoding Process . . . . . . . . . . . . . . 12 5. Overview of the Decoding Process . . . . . . . . . . . . . . 11
6. Description of Algorithms . . . . . . . . . . . . . . . . . . 17 6. Description of Algorithms . . . . . . . . . . . . . . . . . . 16
7. Boolean Entropy Decoder . . . . . . . . . . . . . . . . . . . 20 7. Boolean Entropy Decoder . . . . . . . . . . . . . . . . . . . 19
7.1. Underlying Theory of Coding . . . . . . . . . . . . . . 21 7.1. Underlying Theory of Coding . . . . . . . . . . . . . . 20
7.2. Practical Algorithm Description . . . . . . . . . . . . 22 7.2. Practical Algorithm Description . . . . . . . . . . . . 21
7.3. Actual Implementation . . . . . . . . . . . . . . . . . 24 7.3. Actual Implementation . . . . . . . . . . . . . . . . . 23
8. Compressed Data Components . . . . . . . . . . . . . . . . . 29 8. Compressed Data Components . . . . . . . . . . . . . . . . . 28
8.1. Tree Coding Implementation . . . . . . . . . . . . . . . 31 8.1. Tree Coding Implementation . . . . . . . . . . . . . . . 30
8.2. Tree Coding Example . . . . . . . . . . . . . . . . . . 32 8.2. Tree Coding Example . . . . . . . . . . . . . . . . . . 31
9. Frame Header . . . . . . . . . . . . . . . . . . . . . . . . 35 9. Frame Header . . . . . . . . . . . . . . . . . . . . . . . . 34
9.1. Uncompressed Data Chunk . . . . . . . . . . . . . . . . 35 9.1. Uncompressed Data Chunk . . . . . . . . . . . . . . . . 34
9.2. Color Space and Pixel Type (Key Frames-only) . . . . . . 38 9.2. Color Space and Pixel Type (Key Frames-only) . . . . . . 37
9.3. Segment-based Adjustments . . . . . . . . . . . . . . . 38 9.3. Segment-based Adjustments . . . . . . . . . . . . . . . 37
9.4. Loop Filter Type and Levels . . . . . . . . . . . . . . 39 9.4. Loop Filter Type and Levels . . . . . . . . . . . . . . 38
9.5. Token Partition and Partition Data Offsets . . . . . . . 40 9.5. Token Partition and Partition Data Offsets . . . . . . . 39
9.6. Dequantization Indices . . . . . . . . . . . . . . . . . 41 9.6. Dequantization Indices . . . . . . . . . . . . . . . . . 40
9.7. Refresh Golden Frame and AltRef Frame . . . . . . . . . 42 9.7. Refresh Golden Frame and AltRef Frame . . . . . . . . . 41
9.8. Refresh Last Frame Buffer . . . . . . . . . . . . . . . 43 9.8. Refresh Last Frame Buffer . . . . . . . . . . . . . . . 42
9.9. DCT Coefficient Probability Update . . . . . . . . . . . 43 9.9. DCT Coefficient Probability Update . . . . . . . . . . . 42
9.10. Remaining Frame Header Data (non-Key Frame) . . . . . . 44 9.10. Remaining Frame Header Data (non-Key Frame) . . . . . . 43
9.11. Remaining Frame Header Data (Key Frame) . . . . . . . . 45 9.11. Remaining Frame Header Data (Key Frame) . . . . . . . . 44
10. Segment-based Feature Adjustments . . . . . . . . . . . . . . 46 10. Segment-based Feature Adjustments . . . . . . . . . . . . . . 45
11. Key Frame Macroblock Prediction Records . . . . . . . . . . . 47 11. Key Frame Macroblock Prediction Records . . . . . . . . . . . 46
11.1. mb_skip_coeff . . . . . . . . . . . . . . . . . . . . . 47 11.1. mb_skip_coeff . . . . . . . . . . . . . . . . . . . . . 46
11.2. Luma Modes . . . . . . . . . . . . . . . . . . . . . . . 47 11.2. Luma Modes . . . . . . . . . . . . . . . . . . . . . . . 46
11.3. Subblock Mode Contexts . . . . . . . . . . . . . . . . . 50 11.3. Subblock Mode Contexts . . . . . . . . . . . . . . . . . 49
11.4. Chroma Modes . . . . . . . . . . . . . . . . . . . . . . 51 11.4. Chroma Modes . . . . . . . . . . . . . . . . . . . . . . 50
11.5. Subblock Mode Probability Table . . . . . . . . . . . . 52 11.5. Subblock Mode Probability Table . . . . . . . . . . . . 51
12. Intraframe Prediction . . . . . . . . . . . . . . . . . . . . 56 12. Intraframe Prediction . . . . . . . . . . . . . . . . . . . . 55
12.1. mb_skip_coeff . . . . . . . . . . . . . . . . . . . . . 56 12.1. mb_skip_coeff . . . . . . . . . . . . . . . . . . . . . 55
12.2. Chroma Prediction . . . . . . . . . . . . . . . . . . . 57 12.2. Chroma Prediction . . . . . . . . . . . . . . . . . . . 56
12.3. Luma Prediction . . . . . . . . . . . . . . . . . . . . 59 12.3. Luma Prediction . . . . . . . . . . . . . . . . . . . . 58
13. DCT Coefficient Decoding . . . . . . . . . . . . . . . . . . 66 13. DCT Coefficient Decoding . . . . . . . . . . . . . . . . . . 65
13.1. MB Without non-Zero Coefficient Values . . . . . . . . . 66 13.1. MB Without non-Zero Coefficient Values . . . . . . . . . 65
13.2. Coding of Individual Coefficient Values . . . . . . . . 67 13.2. Coding of Individual Coefficient Values . . . . . . . . 66
13.3. Token Probabilities . . . . . . . . . . . . . . . . . . 69 13.3. Token Probabilities . . . . . . . . . . . . . . . . . . 68
13.4. Token Probability Updates . . . . . . . . . . . . . . . 73 13.4. Token Probability Updates . . . . . . . . . . . . . . . 72
13.5. Default Token Probability Table . . . . . . . . . . . . 78 13.5. Default Token Probability Table . . . . . . . . . . . . 77
14. DCT and WHT Inversion and Macroblock Reconstruction . . . . . 83 14. DCT and WHT Inversion and Macroblock Reconstruction . . . . . 82
14.1. Dequantization . . . . . . . . . . . . . . . . . . . . . 83 14.1. Dequantization . . . . . . . . . . . . . . . . . . . . . 82
14.2. Inverse Transforms . . . . . . . . . . . . . . . . . . . 84 14.2. Inverse Transforms . . . . . . . . . . . . . . . . . . . 83
14.3. Implementation of the WHT Inversion . . . . . . . . . . 85 14.3. Implementation of the WHT Inversion . . . . . . . . . . 84
14.4. Implementation of the DCT Inversion . . . . . . . . . . 87 14.4. Implementation of the DCT Inversion . . . . . . . . . . 86
14.5. Summation of Predictor and Residue . . . . . . . . . . . 90 14.5. Summation of Predictor and Residue . . . . . . . . . . . 89
15. Loop Filter . . . . . . . . . . . . . . . . . . . . . . . . . 91 15. Loop Filter . . . . . . . . . . . . . . . . . . . . . . . . . 90
15.1. Filter Geometry and Overall Procedure . . . . . . . . . 92 15.1. Filter Geometry and Overall Procedure . . . . . . . . . 91
15.2. Simple Filter . . . . . . . . . . . . . . . . . . . . . 94 15.2. Simple Filter . . . . . . . . . . . . . . . . . . . . . 93
15.3. Normal Filter . . . . . . . . . . . . . . . . . . . . . 98 15.3. Normal Filter . . . . . . . . . . . . . . . . . . . . . 97
15.4. Calculation of Control Parameters . . . . . . . . . . . 103 15.4. Calculation of Control Parameters . . . . . . . . . . . 102
16. Interframe Macroblock Prediction Records . . . . . . . . . . 105 16. Interframe Macroblock Prediction Records . . . . . . . . . . 104
16.1. Intra-Predicted Macroblocks . . . . . . . . . . . . . . 105 16.1. Intra-Predicted Macroblocks . . . . . . . . . . . . . . 104
16.2. Inter-Predicted Macroblocks . . . . . . . . . . . . . . 106 16.2. Inter-Predicted Macroblocks . . . . . . . . . . . . . . 105
16.3. Mode and Motion Vector Contexts . . . . . . . . . . . . 107 16.3. Mode and Motion Vector Contexts . . . . . . . . . . . . 106
16.4. Split Prediction . . . . . . . . . . . . . . . . . . . . 113 16.4. Split Prediction . . . . . . . . . . . . . . . . . . . . 112
17. Motion Vector Decoding . . . . . . . . . . . . . . . . . . . 117 17. Motion Vector Decoding . . . . . . . . . . . . . . . . . . . 116
17.1. Coding of Each Component . . . . . . . . . . . . . . . . 117 17.1. Coding of Each Component . . . . . . . . . . . . . . . . 116
17.2. Probability Updates . . . . . . . . . . . . . . . . . . 119 17.2. Probability Updates . . . . . . . . . . . . . . . . . . 118
18. Interframe Prediction . . . . . . . . . . . . . . . . . . . . 122 18. Interframe Prediction . . . . . . . . . . . . . . . . . . . . 121
18.1. Bounds on and Adjustment of Motion Vectors . . . . . . . 122 18.1. Bounds on and Adjustment of Motion Vectors . . . . . . . 121
18.2. Prediction Subblocks . . . . . . . . . . . . . . . . . . 123 18.2. Prediction Subblocks . . . . . . . . . . . . . . . . . . 122
18.3. Sub-pixel Interpolation . . . . . . . . . . . . . . . . 124 18.3. Sub-pixel Interpolation . . . . . . . . . . . . . . . . 123
18.4. Filter Properties . . . . . . . . . . . . . . . . . . . 127 18.4. Filter Properties . . . . . . . . . . . . . . . . . . . 126
19. Annex A: Bitstream Syntax . . . . . . . . . . . . . . . . . . 130 19. Annex A: Bitstream Syntax . . . . . . . . . . . . . . . . . . 129
19.1. Uncompressed Data Chunk . . . . . . . . . . . . . . . . 130 19.1. Uncompressed Data Chunk . . . . . . . . . . . . . . . . 129
19.2. Frame Header . . . . . . . . . . . . . . . . . . . . . . 132 19.2. Frame Header . . . . . . . . . . . . . . . . . . . . . . 131
19.3. Macroblock Data . . . . . . . . . . . . . . . . . . . . 144 19.3. Macroblock Data . . . . . . . . . . . . . . . . . . . . 143
20. Patent License . . . . . . . . . . . . . . . . . . . . . . . 148 20. Attachment One: Reference Decoder Source Code . . . . . . . . 147
21. Attachment One: Reference Decoder Source Code . . . . . . . . 149 20.1. bit_ops.h . . . . . . . . . . . . . . . . . . . . . . . 147
21.1. bit_ops.h . . . . . . . . . . . . . . . . . . . . . . . 149 20.2. bool_decoder.h . . . . . . . . . . . . . . . . . . . . . 147
21.2. bool_decoder.h . . . . . . . . . . . . . . . . . . . . . 149 20.3. dequant_data.h . . . . . . . . . . . . . . . . . . . . . 151
21.3. dequant_data.h . . . . . . . . . . . . . . . . . . . . . 153 20.4. dixie.c . . . . . . . . . . . . . . . . . . . . . . . . 151
21.4. dixie.c . . . . . . . . . . . . . . . . . . . . . . . . 153 20.5. dixie.h . . . . . . . . . . . . . . . . . . . . . . . . 163
21.5. dixie.h . . . . . . . . . . . . . . . . . . . . . . . . 165 20.6. dixie_loopfilter.c . . . . . . . . . . . . . . . . . . . 170
21.6. dixie_loopfilter.c . . . . . . . . . . . . . . . . . . . 172 20.7. dixie_loopfilter.h . . . . . . . . . . . . . . . . . . . 182
21.7. dixie_loopfilter.h . . . . . . . . . . . . . . . . . . . 184 20.8. idct_add.c . . . . . . . . . . . . . . . . . . . . . . . 182
21.8. idct_add.c . . . . . . . . . . . . . . . . . . . . . . . 184 20.9. idct_add.h . . . . . . . . . . . . . . . . . . . . . . . 186
21.9. idct_add.h . . . . . . . . . . . . . . . . . . . . . . . 188 20.10. mem.h . . . . . . . . . . . . . . . . . . . . . . . . . 186
21.10. mem.h . . . . . . . . . . . . . . . . . . . . . . . . . 188 20.11. modemv.c . . . . . . . . . . . . . . . . . . . . . . . . 188
21.11. modemv.c . . . . . . . . . . . . . . . . . . . . . . . . 190 20.12. modemv.h . . . . . . . . . . . . . . . . . . . . . . . . 203
21.12. modemv.h . . . . . . . . . . . . . . . . . . . . . . . . 205 20.13. modemv_data.h . . . . . . . . . . . . . . . . . . . . . 203
21.13. modemv_data.h . . . . . . . . . . . . . . . . . . . . . 205 20.14. predict.c . . . . . . . . . . . . . . . . . . . . . . . 208
21.14. predict.c . . . . . . . . . . . . . . . . . . . . . . . 210 20.15. predict.h . . . . . . . . . . . . . . . . . . . . . . . 238
21.15. predict.h . . . . . . . . . . . . . . . . . . . . . . . 240 20.16. tokens.c . . . . . . . . . . . . . . . . . . . . . . . . 238
21.16. tokens.c . . . . . . . . . . . . . . . . . . . . . . . . 240 20.17. tokens.h . . . . . . . . . . . . . . . . . . . . . . . . 248
21.17. tokens.h . . . . . . . . . . . . . . . . . . . . . . . . 250 20.18. vp8_prob_data.h . . . . . . . . . . . . . . . . . . . . 257
21.18. vp8_prob_data.h . . . . . . . . . . . . . . . . . . . . 259 20.19. vpx_codec_internal.h . . . . . . . . . . . . . . . . . . 266
21.19. vpx_codec_internal.h . . . . . . . . . . . . . . . . . . 268 20.20. vpx_decoder.h . . . . . . . . . . . . . . . . . . . . . 276
21.20. vpx_decoder.h . . . . . . . . . . . . . . . . . . . . . 278 20.21. vpx_integer.h . . . . . . . . . . . . . . . . . . . . . 283
21.21. vpx_integer.h . . . . . . . . . . . . . . . . . . . . . 285 21. References . . . . . . . . . . . . . . . . . . . . . . . . . 286
22. References . . . . . . . . . . . . . . . . . . . . . . . . . 288 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 287
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 289
1. Introduction 1. Introduction
This document describes the VP8 compressed video data format, This document describes the VP8 compressed video data format,
together with a discussion of the decoding procedure for the format. together with a discussion of the decoding procedure for the format.
It is intended to be used in conjunction with and as a guide to the It is intended to be used in conjunction with and as a guide to the
reference decoder source code provided in Attachment One. If there reference decoder source code provided in Attachment One. If there
are any conflicts between this narrative and the reference source are any conflicts between this narrative and the reference source
code, the reference source code should be considered correct. The code, the reference source code should be considered correct. The
bitstream is defined by the reference source code and not this bitstream is defined by the reference source code and not this
skipping to change at page 29, line 24 skipping to change at page 28, line 24
value of a call to an appropriate bool_decoder d, reading (as always) value of a call to an appropriate bool_decoder d, reading (as always)
from its current reference point. from its current reference point.
+--------------+-------+--------------------------------------------+ +--------------+-------+--------------------------------------------+
| Call | Alt. | Return | | Call | Alt. | Return |
+--------------+-------+--------------------------------------------+ +--------------+-------+--------------------------------------------+
| Bool(p) | B(p) | Bool with probability p/256 of being 0. | | Bool(p) | B(p) | Bool with probability p/256 of being 0. |
| | | Return value of read_bool(d, p). | | | | Return value of read_bool(d, p). |
| | | | | | | |
| Flag | F | A one-bit flag (same thing as a B(128) or | | Flag | F | A one-bit flag (same thing as a B(128) or |
| | | an L(1)). Abbreviated F. Return value of | | | | an L(1)). Abbreviated F. Return value of |
| | | read_bool(d, 128). | | | | read_bool(d, 128). |
| | | | | | | |
| Lit(n) | L(n) | Unsigned n-bit number encoded as n flags | | Lit(n) | L(n) | Unsigned n-bit number encoded as n flags |
| | | (a "literal"). Abbreviated L(n). The bits | | | | (a "literal"). Abbreviated L(n). The |
| | | are read from high to low order. Return | | | | bits are read from high to low order. |
| | | value of read_literal(d, n). | | | | Return value of read_literal(d, n). |
| | | | | | | |
| SignedLit(n) | | Signed n-bit number encoded similarly to | | SignedLit(n) | | Signed n-bit number encoded similarly to |
| | | an L(n). Return value of | | | | an L(n). Return value of |
| | | read_signed_literal(d, n). These are rare. | | | | read_signed_literal(d, n). These are |
| | | rare. |
| | | | | | | |
| P(8) | | An 8-bit probability. No different from an | | P(8) | | An 8-bit probability. No different from |
| | | L(8), but we sometimes use this notation | | | | an L(8), but we sometimes use this |
| | | to emphasize that a probability is being | | | | notation to emphasize that a probability |
| | | coded. | | | | is being coded. |
| | | | | | | |
| P(7) | | A 7-bit specification of an 8-bit | | P(7) | | A 7-bit specification of an 8-bit |
| | | probability. Coded as an L(7) number x; | | | | probability. Coded as an L(7) number x; |
| | | the resulting 8-bit probability is x ? x | | | | the resulting 8-bit probability is x ? x |
| | | << 1 : 1. | | | | << 1 : 1. |
| | | | | | | |
| F? X | | A flag which, if true, is followed by a | | F? X | | A flag which, if true, is followed by a |
| | | piece of data X. | | | | piece of data X. |
| | | | | | | |
| F? X:Y | | A flag which, if true, is followed by X | | F? X:Y | | A flag which, if true, is followed by X |
| | | and, if false, is followed by Y. Also used | | | | and, if false, is followed by Y. Also used |
| | | to express a value where Y is an implicit | | | | to express a value where Y is an implicit |
| | | default (not encoded in the data stream), | | | | default (not encoded in the data stream), |
| | | as in F? P(8):255, which expresses an | | | | as in F? P(8):255, which expresses an |
| | | optional probability: if the flag is true, | | | | optional probability: if the flag is true, |
| | | the probability is specified as an 8-bit | | | | the probability is specified as an 8-bit |
| | | literal, while if the flag is false, the | | | | literal, while if the flag is false, the |
| | | probability defaults to 255. | | | | probability defaults to 255. |
| | | | | | | |
| B(p)? X | B(p)? | Variants of the above using a boolean | | B(p)? X | B(p)? | Variants of the above using a boolean |
| | X:Y | indicator whose probability is not | | | X:Y | indicator whose probability is not |
| | | necessarily 128. | | | | necessarily 128. |
| | | | | | | |
| X | | Multi-component field, the specifics of | | X | | Multi-component field, the specifics of |
| | | which will be given at a more appropriate | | | | which will be given at a more appropriate |
| | | point in the discussion. | | | | point in the discussion. |
| | | | | | | |
| T | | Tree-encoded value from small alphabet. | | T | | Tree-encoded value from small alphabet. |
+--------------+-------+--------------------------------------------+ +--------------+-------+--------------------------------------------+
skipping to change at page 40, line 49 skipping to change at page 39, line 49
+-------+-------+----------------------+ +-------+-------+----------------------+
| 0 | 0 | 1 | | 0 | 0 | 1 |
| | | | | | | |
| 0 | 1 | 2 | | 0 | 1 | 2 |
| | | | | | | |
| 1 | 0 | 4 | | 1 | 0 | 4 |
| | | | | | | |
| 1 | 1 | 8 | | 1 | 1 | 8 |
+-------+-------+----------------------+ +-------+-------+----------------------+
When the number of partitions is greater than one, offsets are Offsets are embedded in the bitstream to provide the decoder direct
embedded in the bitstream to provide the decoder direct access to access to token partitions. If the number of data partitions is
token partitions. Each offset is written in 3 bytes (24 bits). greater then 1, the size of each partition (except the last) is
written in 3 bytes (24 bits). The size of the last partition is the
Since the offset to the first partition is always 0, only the offsets remainder of the data not used by any of the previous partitions.
for partitions other than the first partition are encoded in the The partitioned data are consecutive in the bitstream, so the size
bitstream. The partitioned data are consecutive in the bitstream, so can also be used to calculate the offset of each partition. The
offsets can also be used to calculate the data size of each following pseudo code illustrates how the size/offset is defined by
partition. The following pseudo code illustrates how the size/offset the three bytes in the bitstream.
is defined by the three bytes in the bitstream.
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
Offset/size = (uint32)(byte0) + ((uint32)(byte1)<<8) Offset/size = (uint32)(byte0) + ((uint32)(byte1)<<8)
+ ((uint32)(byte2)<<16); + ((uint32)(byte2)<<16);
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
9.6. Dequantization Indices 9.6. Dequantization Indices
skipping to change at page 44, line 10 skipping to change at page 43, line 10
key frame. key frame.
The layout and semantics of this field will be taken up in Chapter The layout and semantics of this field will be taken up in Chapter
13. 13.
9.10. Remaining Frame Header Data (non-Key Frame) 9.10. Remaining Frame Header Data (non-Key Frame)
+-------+-----------------------------------------------------------+ +-------+-----------------------------------------------------------+
| Index | Description | | Index | Description |
+-------+-----------------------------------------------------------+ +-------+-----------------------------------------------------------+
| L(1) | mb_no_coeff_skip. This flag indicates at the frame level | | L(1) | mb_no_coeff_skip. This flag indicates at the frame level |
| | if skipping of macroblocks with no non-zero coefficients | | | if skipping of macroblocks with no non-zero coefficients |
| | is enabled. If it is set to 0 then prob_skip_false is not | | | is enabled. If it is set to 0 then prob_skip_false is |
| | read and mb_skip_coeff is forced to 0 for all macroblocks | | | not read and mb_skip_coeff is forced to 0 for all |
| | (see Sections 11.1 and 12.1). | | | macroblocks (see Sections 11.1 and 12.1). |
| | | | | |
| L(8) | prob_skip_false = probability used for decoding a | | L(8) | prob_skip_false = probability used for decoding a |
| | macroblock level flag, which indicates if a macroblock | | | macroblock level flag, which indicates if a macroblock |
| | has any non-zero coefficients. Only read if | | | has any non-zero coefficients. Only read if |
| | mb_no_coeff_skip is 1. | | | mb_no_coeff_skip is 1. |
| | | | | |
| L(8) | prob_intra = probability that a macroblock is "intra" | | L(8) | prob_intra = probability that a macroblock is "intra" |
| | predicted, that is, predicted from the already-encoded | | | predicted, that is, predicted from the already-encoded |
| | portions of the current frame as opposed to "inter" | | | portions of the current frame as opposed to "inter" |
| | predicted, that is, predicted from the contents of a | | | predicted, that is, predicted from the contents of a |
| | prior frame. | | | prior frame. |
| | | | | |
| L(8) | prob_last = probability that an inter-predicted | | L(8) | prob_last = probability that an inter-predicted |
| | macroblock is predicted from the immediately previous | | | macroblock is predicted from the immediately previous |
| | frame, as opposed to the most recent golden frame or | | | frame, as opposed to the most recent golden frame or |
| | altref frame.. | | | altref frame.. |
| | | | | |
| L(8) | prob_gf = probability that an inter-predicted macroblock | | L(8) | prob_gf = probability that an inter-predicted macroblock |
| | is predicted from the most recent golden frame, as | | | is predicted from the most recent golden frame, as |
| | opposed to the altref frame | | | opposed to the altref frame |
| | | | | |
| F | If true, followed by four L(8)s updating the | | F | If true, followed by four L(8)s updating the |
| | probabilities for the different types of intra-prediction | | | probabilities for the different types of intra-prediction |
| | for the Y plane. These probabilities correspond to the | | | for the Y plane. These probabilities correspond to the |
| | four interior nodes of the decoding tree for intra Y | | | four interior nodes of the decoding tree for intra Y |
| | modes in an interframe, that is, the even positions in | | | modes in an interframe, that is, the even positions in |
| | the ymode_tree array given above. | | | the ymode_tree array given above. |
| | | | | |
| F | If true, followed by three L(8)s updating the | | F | If true, followed by three L(8)s updating the |
| | probabilities for the different types of intra-prediction | | | probabilities for the different types of intra-prediction |
| | for the chroma planes. These probabilities correspond to | | | for the chroma planes. These probabilities correspond to |
| | the even positions in the uv_mode_tree array given above. | | | the even positions in the uv_mode_tree array given above. |
| | | | | |
| X | Motion vector probability update. The details will be | | X | Motion vector probability update. The details will be |
| | given after the discussion of motion vector decoding. | | | given after the discussion of motion vector decoding. |
+-------+-----------------------------------------------------------+ +-------+-----------------------------------------------------------+
Decoding of this portion (only) of the frame header is handled in the Decoding of this portion (only) of the frame header is handled in the
reference decoder file decodemv.c. reference decoder file decodemv.c.
9.11. Remaining Frame Header Data (Key Frame) 9.11. Remaining Frame Header Data (Key Frame)
+-------+-----------------------------------------------------------+ +-------+-----------------------------------------------------------+
| Index | Description | | Index | Description |
+-------+-----------------------------------------------------------+ +-------+-----------------------------------------------------------+
| L(1) | mb_no_coeff_skip. This flag indicates at the frame level | | L(1) | mb_no_coeff_skip. This flag indicates at the frame level |
| | if skipping of macroblocks with no non-zero coefficients | | | if skipping of macroblocks with no non-zero coefficients |
| | is enabled. If it is set to 0 then prob_skip_false is not | | | is enabled. If it is set to 0 then prob_skip_false is |
| | read and mb_skip_coeff is forced to 0 for all macroblocks | | | not read and mb_skip_coeff is forced to 0 for all |
| | (see Sections 11.1 and 12.1). | | | macroblocks (see Sections 11.1 and 12.1). |
| | | | | |
| L(8) | prob_skip_false = Probability used for decoding a | | L(8) | prob_skip_false = Probability used for decoding a |
| | macroblock level flag, which indicates if a macroblock | | | macroblock level flag, which indicates if a macroblock |
| | has any non-zero coefficients. Only read if | | | has any non-zero coefficients. Only read if |
| | mb_no_coeff_skip is 1. | | | mb_no_coeff_skip is 1. |
+-------+-----------------------------------------------------------+ +-------+-----------------------------------------------------------+
Decoding of this portion of the frame header is handled in the Decoding of this portion of the frame header is handled in the
reference decoder file demode.c. reference decoder file demode.c.
This completes the layout of the frame header. The remainder of the This completes the layout of the frame header. The remainder of the
first data partition consists of macroblock-level prediction data. first data partition consists of macroblock-level prediction data.
After the frame header is processed, all probabilities needed to After the frame header is processed, all probabilities needed to
skipping to change at page 49, line 42 skipping to change at page 48, line 42
const tree_index bmode_tree [2 * (num_intra_bmodes - 1)] = const tree_index bmode_tree [2 * (num_intra_bmodes - 1)] =
{ {
-B_DC_PRED, 2, /* B_DC_PRED = "0" */ -B_DC_PRED, 2, /* B_DC_PRED = "0" */
-B_TM_PRED, 4, /* B_TM_PRED = "10" */ -B_TM_PRED, 4, /* B_TM_PRED = "10" */
-B_VE_PRED, 6, /* B_VE_PRED = "110" */ -B_VE_PRED, 6, /* B_VE_PRED = "110" */
8, 12, 8, 12,
-B_HE_PRED, 10, /* B_HE_PRED = "11100" */ -B_HE_PRED, 10, /* B_HE_PRED = "11100" */
-B_RD_PRED, -B_VR_PRED, /* B_RD_PRED = "111010", -B_RD_PRED, -B_VR_PRED, /* B_RD_PRED = "111010",
B_VR_PRED = "111011" */ B_VR_PRED = "111011" */
-B_LD_PRED, 14, /* B_LD_PRED = "111110" */ -B_LD_PRED, 14, /* B_LD_PRED = "111110" */
-B_VL_PRED, 16 /* B_VL_PRED = "1111110" */ -B_VL_PRED, 16, /* B_VL_PRED = "1111110" */
-B_HD_PRED, -B_HU_PRED /* HD = "11111110", -B_HD_PRED, -B_HU_PRED /* HD = "11111110",
HU = "11111111" */ HU = "11111111" */
}; };
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
The first four modes are smaller versions of the similarly-named The first four modes are smaller versions of the similarly-named
16x16 modes above, albeit with slightly different numbering. The 16x16 modes above, albeit with slightly different numbering. The
last six "diagonal" modes are unique to luma subblocks. last six "diagonal" modes are unique to luma subblocks.
skipping to change at page 61, line 27 skipping to change at page 60, line 27
/* Simple average of x and y */ /* Simple average of x and y */
Pixel avg2( Pixel x, Pixel y) { return (x + y + 1) >> 1;} Pixel avg2( Pixel x, Pixel y) { return (x + y + 1) >> 1;}
/* Average of p[0] and p[1] may be considered to be a synthetic /* Average of p[0] and p[1] may be considered to be a synthetic
pixel lying between the two, that is, one half-step past p. */ pixel lying between the two, that is, one half-step past p. */
Pixel avg2p( const Pixel *p) { return avg2( p[0], p[1]);} Pixel avg2p( const Pixel *p) { return avg2( p[0], p[1]);}
/* Main function. Out-of-frame pixels in A or L should be set
to 128. */
void subblock_intra_predict( void subblock_intra_predict(
Pixel B[4][4], /* Y subblock prediction buffer */ Pixel B[4][4], /* Y subblock prediction buffer */
const Pixel *A, /* A[0]...A[7] = above row, A[-1] = P */ const Pixel *A, /* A[0]...A[7] = above row, A[-1] = P */
const Pixel *L, /* L[0]...L[3] = left column, L[-1] = P */ const Pixel *L, /* L[0]...L[3] = left column, L[-1] = P */
intra_bmode mode /* enum is in section 11.1 above */ intra_bmode mode /* enum is in section 11.1 above */
) { ) {
Pixel E[9]; /* 9 already-constructed edge pixels */ Pixel E[9]; /* 9 already-constructed edge pixels */
E[0] = L[3]; E[1] = L[2]; E[2] = L[1]; E[3] = L[0]; E[0] = L[3]; E[1] = L[2]; E[2] = L[1]; E[3] = L[0];
E[4] = A[-1]; /* == L[-1] == P */ E[4] = A[-1]; /* == L[-1] == P */
E[5] = A[0]; E[6] = A[1]; E[7] = A[2]; E[8] = A[3]; E[5] = A[0]; E[6] = A[1]; E[7] = A[2]; E[8] = A[3];
skipping to change at page 123, line 12 skipping to change at page 122, line 12
chroma subblocks is calculated from the corresponding luma vector chroma subblocks is calculated from the corresponding luma vector
components as follows: components as follows:
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
int avg( int c1, int c2, int c3, int c4) int avg( int c1, int c2, int c3, int c4)
{ {
int s = c1 + c2 + c3 + c4; int s = c1 + c2 + c3 + c4;
/* The shift divides by 8 (not 4) because chroma pixels /* The shift divides by 8 (not 4) because chroma pixels
have half the diameter of luma pixels. The handling have twice the diameter of luma pixels. The handling
of negative motion vector components is slightly of negative motion vector components is slightly
cumbersome because, strictly speaking, right shifts cumbersome because, strictly speaking, right shifts
of negative numbers are not well-defined in C. */ of negative numbers are not well-defined in C. */
return s >= 0 ? (s + 4) >> 3 : -( (-s + 4) >> 3); return s >= 0 ? (s + 4) >> 3 : -( (-s + 4) >> 3);
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
Furthermore, if the version number in the frame tag specifies only Furthermore, if the version number in the frame tag specifies only
skipping to change at page 131, line 21 skipping to change at page 130, line 21
key_frame = tmp & 0x1; key_frame = tmp & 0x1;
version = (tmp >> 1) & 0x7; version = (tmp >> 1) & 0x7;
show_frame = (tmp >> 4) & 0x1; show_frame = (tmp >> 4) & 0x1;
first_part_size = (tmp >> 5) & 0x7FFFF; first_part_size = (tmp >> 5) & 0x7FFFF;
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
Where: Where:
o key_frame indicates if the current frame is a key frame or not o key_frame indicates if the current frame is a key frame or not.
o version determines the bitstream version o version determines the bitstream version.
o show_frame indicates if the current frame is meant to be displayed o show_frame indicates if the current frame is meant to be displayed
or not or not.
o first_part_size determines the size of the first partition o first_part_size determines the size of the first partition
(control partition) (control partition), excluding the uncompressed data chunk.
The start_code is a constant 3-byte pattern having value 0x9d012a. The start_code is a constant 3-byte pattern having value 0x9d012a.
The latter part of the uncompressed chunk (after the start_code) can The latter part of the uncompressed chunk (after the start_code) can
be parsed as follows: be parsed as follows:
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
unsigned char *c = pbi->Source + 6; unsigned char *c = pbi->Source + 6;
unsigned int tmp; unsigned int tmp;
skipping to change at page 148, line 5 skipping to change at page 147, line 5
subblock, otherwise 0 subblock, otherwise 0
o token defines the value of the coefficient, the value range of the o token defines the value of the coefficient, the value range of the
coefficient or the end of block (Section 13.2) coefficient or the end of block (Section 13.2)
o extra_bits determine the value of the coefficient within the value o extra_bits determine the value of the coefficient within the value
range defined by token (Section 13.2) range defined by token (Section 13.2)
o sign indicates the sign of the coefficient (Section 13.2) o sign indicates the sign of the coefficient (Section 13.2)
20. Patent License 20. Attachment One: Reference Decoder Source Code
Google hereby grants to You a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this
section) patent license to make, have made, use, offer to sell, sell,
import, and otherwise implementations of this specification where
such license applies only to those patent claims, both currently
owned by Google and acquired in the future, licensable by Google that
are necessarily infringed by implementation of this specification.
If You or your agent or exclusive licensee institute or order or
agree to the institution of patent litigation against any entity
(including a cross-claim or counterclaim in a lawsuit) alleging that
any implementation of this specification constitutes direct or
contributory patent infringement, or inducement of patent
infringement, then any rights granted to You under the License for
this specification shall terminate as of the date such litigation is
filed.
21. Attachment One: Reference Decoder Source Code
Note that the code in this attachment may exhibit bugs, and should be Note that the code in this attachment may exhibit bugs, and should be
considered a draft until this document reaches RFC status. considered a draft until this document reaches RFC status.
21.1. bit_ops.h 20.1. bit_ops.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 149, line 36 skipping to change at page 147, line 36
/* Evaluates to a mask with n bits set */ /* Evaluates to a mask with n bits set */
#define BITS_MASK(n) ((1<<(n))-1) #define BITS_MASK(n) ((1<<(n))-1)
/* Returns len bits, with the LSB at position bit */ /* Returns len bits, with the LSB at position bit */
#define BITS_GET(val, bit, len) (((val)>>(bit))&BITS_MASK(len)) #define BITS_GET(val, bit, len) (((val)>>(bit))&BITS_MASK(len))
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.2. bool_decoder.h 20.2. bool_decoder.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license and * Use of this source code is governed by a BSD-style license and
* patent grant that can be found in the LICENSE file in the root of * patent grant that can be found in the LICENSE file in the root of
* the source tree. All contributing project authors may be found in * the source tree. All contributing project authors may be found in
* the AUTHORS file in the root of the source tree. * the AUTHORS file in the root of the source tree.
skipping to change at page 153, line 5 skipping to change at page 151, line 5
int i = 0; int i = 0;
while ((i = t[ i + bool_get(bool, p[i>>1])]) > 0) ; while ((i = t[ i + bool_get(bool, p[i>>1])]) > 0) ;
return -i; return -i;
} }
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.3. dequant_data.h 20.3. dequant_data.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
static const int dc_q_lookup[128] = static const int dc_q_lookup[128] =
{ {
4, 5, 6, 7, 8, 9, 10, 10, 4, 5, 6, 7, 8, 9, 10, 10,
11, 12, 13, 14, 15, 16, 17, 17, 11, 12, 13, 14, 15, 16, 17, 17,
18, 19, 20, 20, 21, 21, 22, 22, 18, 19, 20, 20, 21, 21, 22, 22,
23, 23, 24, 25, 25, 26, 27, 28, 23, 23, 24, 25, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 29, 30, 31, 32, 33, 34, 35, 36,
skipping to change at page 153, line 50 skipping to change at page 151, line 50
110, 112, 114, 116, 119, 122, 125, 128, 110, 112, 114, 116, 119, 122, 125, 128,
131, 134, 137, 140, 143, 146, 149, 152, 131, 134, 137, 140, 143, 146, 149, 152,
155, 158, 161, 164, 167, 170, 173, 177, 155, 158, 161, 164, 167, 170, 173, 177,
181, 185, 189, 193, 197, 201, 205, 209, 181, 185, 189, 193, 197, 201, 205, 209,
213, 217, 221, 225, 229, 234, 239, 245, 213, 217, 221, 225, 229, 234, 239, 245,
249, 254, 259, 264, 269, 274, 279, 284 249, 254, 259, 264, 269, 274, 279, 284
}; };
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.4. dixie.c 20.4. dixie.c
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree. * be found in the AUTHORS file in the root of the source tree.
skipping to change at page 165, line 41 skipping to change at page 163, line 41
void void
vp8_dixie_decode_destroy(struct vp8_decoder_ctx *ctx) vp8_dixie_decode_destroy(struct vp8_decoder_ctx *ctx)
{ {
vp8_dixie_predict_destroy(ctx); vp8_dixie_predict_destroy(ctx);
vp8_dixie_tokens_destroy(ctx); vp8_dixie_tokens_destroy(ctx);
vp8_dixie_modemv_destroy(ctx); vp8_dixie_modemv_destroy(ctx);
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.5. dixie.h 20.5. dixie.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 172, line 20 skipping to change at page 170, line 20
vp8_dixie_decode_frame(struct vp8_decoder_ctx *ctx, vp8_dixie_decode_frame(struct vp8_decoder_ctx *ctx,
const unsigned char *data, const unsigned char *data,
unsigned int sz); unsigned int sz);
#define CLAMP_255(x) ((x)<0?0:((x)>255?255:(x))) #define CLAMP_255(x) ((x)<0?0:((x)>255?255:(x)))
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.6. dixie_loopfilter.c 20.6. dixie_loopfilter.c
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 184, line 5 skipping to change at page 182, line 5
unsigned int num_cols) unsigned int num_cols)
{ {
if (ctx->loopfilter_hdr.use_simple) if (ctx->loopfilter_hdr.use_simple)
filter_row_simple(ctx, row, start_col, num_cols); filter_row_simple(ctx, row, start_col, num_cols);
else else
filter_row_normal(ctx, row, start_col, num_cols); filter_row_normal(ctx, row, start_col, num_cols);
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.7. dixie_loopfilter.h 20.7. dixie_loopfilter.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 184, line 31 skipping to change at page 182, line 31
void void
vp8_dixie_loopfilter_process_row(struct vp8_decoder_ctx *ctx, vp8_dixie_loopfilter_process_row(struct vp8_decoder_ctx *ctx,
unsigned int row, unsigned int row,
unsigned int start_col, unsigned int start_col,
unsigned int num_cols); unsigned int num_cols);
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.8. idct_add.c 20.8. idct_add.c
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 188, line 5 skipping to change at page 186, line 5
recon[2] = CLAMP_255(predict[2] + ((b1 - c1 + 4) >> 3)); recon[2] = CLAMP_255(predict[2] + ((b1 - c1 + 4) >> 3));
coeffs += 4; coeffs += 4;
recon += stride; recon += stride;
predict += stride; predict += stride;
} }
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.9. idct_add.h 20.9. idct_add.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 188, line 44 skipping to change at page 186, line 44
vp8_dixie_idct_add_process_row(struct vp8_decoder_ctx *ctx, vp8_dixie_idct_add_process_row(struct vp8_decoder_ctx *ctx,
short *coeffs, short *coeffs,
unsigned int row, unsigned int row,
unsigned int start_col, unsigned int start_col,
unsigned int num_cols); unsigned int num_cols);
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.10. mem.h 20.10. mem.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 190, line 6 skipping to change at page 188, line 6
* audited to assure that it's safe to use uninitialized. Silences * audited to assure that it's safe to use uninitialized. Silences
* 'may be used uninitialized' warnings on gcc. * 'may be used uninitialized' warnings on gcc.
*/ */
#if defined(__GNUC__) && __GNUC__ #if defined(__GNUC__) && __GNUC__
#define UNINITIALIZED_IS_SAFE(x) x=x #define UNINITIALIZED_IS_SAFE(x) x=x
#else #else
#define UNINITIALIZED_IS_SAFE(x) x #define UNINITIALIZED_IS_SAFE(x) x
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.11. modemv.c 20.11. modemv.c
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 205, line 4 skipping to change at page 203, line 4
void void
vp8_dixie_modemv_destroy(struct vp8_decoder_ctx *ctx) vp8_dixie_modemv_destroy(struct vp8_decoder_ctx *ctx)
{ {
free(ctx->mb_info_storage); free(ctx->mb_info_storage);
ctx->mb_info_storage = NULL; ctx->mb_info_storage = NULL;
free(ctx->mb_info_rows_storage); free(ctx->mb_info_rows_storage);
ctx->mb_info_rows_storage = NULL; ctx->mb_info_rows_storage = NULL;
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.12. modemv.h 20.12. modemv.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 205, line 37 skipping to change at page 203, line 37
vp8_dixie_modemv_process_row(struct vp8_decoder_ctx *ctx, vp8_dixie_modemv_process_row(struct vp8_decoder_ctx *ctx,
struct bool_decoder *bool, struct bool_decoder *bool,
int row, int row,
int start_col, int start_col,
int num_cols); int num_cols);
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.13. modemv_data.h 20.13. modemv_data.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
static const unsigned char kf_y_mode_probs[] = { 145, 156, 163, 128}; static const unsigned char kf_y_mode_probs[] = { 145, 156, 163, 128};
static const unsigned char kf_uv_mode_probs[] = { 142, 114, 183}; static const unsigned char kf_uv_mode_probs[] = { 142, 114, 183};
static const unsigned char kf_b_mode_probs[10][10][9] = static const unsigned char kf_b_mode_probs[10][10][9] =
{ {
{ /* above mode 0 */ { /* above mode 0 */
{ /* left mode 0 */ 231, 120, 48, 89, 115, 113, 120, 152, 112}, { /* left mode 0 */ 231, 120, 48, 89, 115, 113, 120, 152, 112},
{ /* left mode 1 */ 152, 179, 64, 126, 170, 118, 46, 70, 95}, { /* left mode 1 */ 152, 179, 64, 126, 170, 118, 46, 70, 95},
skipping to change at page 210, line 23 skipping to change at page 208, line 23
const static int mv_partitions[4][16] = const static int mv_partitions[4][16] =
{ {
{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 },
{0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 }, {0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 },
{0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3 }, {0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3 },
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }
}; };
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.14. predict.c 20.14. predict.c
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 240, line 4 skipping to change at page 238, line 4
/* Extend the last row by four pixels for intra prediction. /* Extend the last row by four pixels for intra prediction.
* This will be propagated later by copy_down. * This will be propagated later by copy_down.
*/ */
uint32_t *extend = (uint32_t *)(img.y + 15 * img.stride); uint32_t *extend = (uint32_t *)(img.y + 15 * img.stride);
uint32_t val = 0x01010101 * img.y[-1 + 15 * img.stride]; uint32_t val = 0x01010101 * img.y[-1 + 15 * img.stride];
*extend = val; *extend = val;
} }
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.15. predict.h 20.15. predict.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 240, line 45 skipping to change at page 238, line 45
struct ref_cnt_img * struct ref_cnt_img *
vp8_dixie_ref_frame(struct ref_cnt_img *rcimg); vp8_dixie_ref_frame(struct ref_cnt_img *rcimg);
struct ref_cnt_img * struct ref_cnt_img *
vp8_dixie_find_free_ref_frame(struct ref_cnt_img *frames); vp8_dixie_find_free_ref_frame(struct ref_cnt_img *frames);
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.16. tokens.c 20.16. tokens.c
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree. * be found in the AUTHORS file in the root of the source tree.
skipping to change at page 250, line 16 skipping to change at page 248, line 16
int i; int i;
for (i = 0; i < MAX_PARTITIONS; i++) for (i = 0; i < MAX_PARTITIONS; i++)
free(ctx->tokens[i].coeffs); free(ctx->tokens[i].coeffs);
free(ctx->above_token_entropy_ctx); free(ctx->above_token_entropy_ctx);
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.17. tokens.h 20.17. tokens.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 259, line 31 skipping to change at page 257, line 31
int i; int i;
for (i = 0; i < MAX_PARTITIONS; i++) for (i = 0; i < MAX_PARTITIONS; i++)
free(ctx->tokens[i].coeffs); free(ctx->tokens[i].coeffs);
free(ctx->above_token_entropy_ctx); free(ctx->above_token_entropy_ctx);
} }
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.18. vp8_prob_data.h 20.18. vp8_prob_data.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
static const static const
unsigned char k_coeff_entropy_update_probs[BLOCK_TYPES][COEF_BANDS] unsigned char k_coeff_entropy_update_probs[BLOCK_TYPES][COEF_BANDS]
[PREV_COEF_CONTEXTS] [PREV_COEF_CONTEXTS]
[ENTROPY_NODES] = [ENTROPY_NODES] =
{ {
{ {
{ {
skipping to change at page 268, line 4 skipping to change at page 266, line 4
{ {
164, 164,
128, 128,
204, 170, 119, 235, 140, 230, 228, 204, 170, 119, 235, 140, 230, 228,
128, 130, 130, 74, 148, 180, 203, 236, 254, 254 128, 130, 130, 74, 148, 180, 203, 236, 254, 254
} }
}; };
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.19. vpx_codec_internal.h 20.19. vpx_codec_internal.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 278, line 14 skipping to change at page 276, line 14
} }
if (info->setjmp) if (info->setjmp)
longjmp(info->jmp, info->error_code); longjmp(info->jmp, info->error_code);
} }
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.20. vpx_decoder.h 20.20. vpx_decoder.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 285, line 35 skipping to change at page 283, line 35
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT #if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
#include "vpx_decoder_compat.h" #include "vpx_decoder_compat.h"
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
21.21. vpx_integer.h 20.21. vpx_integer.h
---- Begin code block -------------------------------------- ---- Begin code block --------------------------------------
/* /*
* Copyright (c) 2010 The VP8 project authors. All Rights Reserved. * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
* *
* Use of this source code is governed by a BSD-style license * Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source * that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be * tree. An additional intellectual property rights grant can be
* found in the file PATENTS. All contributing project authors may * found in the file PATENTS. All contributing project authors may
skipping to change at page 288, line 5 skipping to change at page 286, line 5
#define __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS
#endif #endif
#include <stdint.h> #include <stdint.h>
#include <inttypes.h> #include <inttypes.h>
#endif #endif
#endif #endif
---- End code block ---------------------------------------- ---- End code block ----------------------------------------
22. References 21. References
[ITU-R_BT.601] [ITU-R_BT.601]
International Telecommunication Union, "ITU BT.601: Studio International Telecommunication Union, "ITU BT.601: Studio
encoding parameters of digital television for standard 4:3 encoding parameters of digital television for standard 4:3
and wide screen 16:9 aspect ratios", January 2007. and wide screen 16:9 aspect ratios", January 2007.
[Bell] Bell, T., Cleary, J., and I. Witten, "Text Compression", [Bell] Bell, T., Cleary, J., and I. Witten, "Text Compression",
1990. 1990.
[Kernighan] [Kernighan]
 End of changes. 53 change blocks. 
187 lines changed or deleted 165 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/