| < 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/ | ||||