| OLD | NEW |
| 1 // Copyright 2011 Google Inc. All Rights Reserved. | 1 // Copyright 2011 Google Inc. All Rights Reserved. |
| 2 // | 2 // |
| 3 // Use of this source code is governed by a BSD-style license | 3 // Use of this source code is governed by a BSD-style license |
| 4 // that can be found in the COPYING file in the root of the source | 4 // that can be found in the COPYING file in the root of the source |
| 5 // tree. An additional intellectual property rights grant can be found | 5 // tree. An additional intellectual property rights grant can be found |
| 6 // in the file PATENTS. All contributing project authors may | 6 // in the file PATENTS. All contributing project authors may |
| 7 // be found in the AUTHORS file in the root of the source tree. | 7 // be found in the AUTHORS file in the root of the source tree. |
| 8 // ----------------------------------------------------------------------------- | 8 // ----------------------------------------------------------------------------- |
| 9 // | 9 // |
| 10 // Alpha-plane decompression. | 10 // Alpha-plane decompression. |
| 11 // | 11 // |
| 12 // Author: Skal (pascal.massimino@gmail.com) | 12 // Author: Skal (pascal.massimino@gmail.com) |
| 13 | 13 |
| 14 #include <stdlib.h> | 14 #include <stdlib.h> |
| 15 #include "./alphai.h" | 15 #include "./alphai.h" |
| 16 #include "./vp8i.h" | 16 #include "./vp8i.h" |
| 17 #include "./vp8li.h" | 17 #include "./vp8li.h" |
| 18 #include "../dsp/dsp.h" |
| 18 #include "../utils/quant_levels_dec.h" | 19 #include "../utils/quant_levels_dec.h" |
| 19 #include "../utils/utils.h" | 20 #include "../utils/utils.h" |
| 20 #include "../webp/format_constants.h" | 21 #include "../webp/format_constants.h" |
| 21 | 22 |
| 22 //------------------------------------------------------------------------------ | 23 //------------------------------------------------------------------------------ |
| 23 // ALPHDecoder object. | 24 // ALPHDecoder object. |
| 24 | 25 |
| 25 ALPHDecoder* ALPHNew(void) { | 26 ALPHDecoder* ALPHNew(void) { |
| 26 ALPHDecoder* const dec = (ALPHDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec)); | 27 ALPHDecoder* const dec = (ALPHDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec)); |
| 27 return dec; | 28 return dec; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 return 0; | 72 return 0; |
| 72 } | 73 } |
| 73 | 74 |
| 74 if (dec->method_ == ALPHA_NO_COMPRESSION) { | 75 if (dec->method_ == ALPHA_NO_COMPRESSION) { |
| 75 const size_t alpha_decoded_size = dec->width_ * dec->height_; | 76 const size_t alpha_decoded_size = dec->width_ * dec->height_; |
| 76 ok = (alpha_data_size >= alpha_decoded_size); | 77 ok = (alpha_data_size >= alpha_decoded_size); |
| 77 } else { | 78 } else { |
| 78 assert(dec->method_ == ALPHA_LOSSLESS_COMPRESSION); | 79 assert(dec->method_ == ALPHA_LOSSLESS_COMPRESSION); |
| 79 ok = VP8LDecodeAlphaHeader(dec, alpha_data, alpha_data_size, output); | 80 ok = VP8LDecodeAlphaHeader(dec, alpha_data, alpha_data_size, output); |
| 80 } | 81 } |
| 82 VP8FiltersInit(); |
| 81 return ok; | 83 return ok; |
| 82 } | 84 } |
| 83 | 85 |
| 84 // Decodes, unfilters and dequantizes *at least* 'num_rows' rows of alpha | 86 // Decodes, unfilters and dequantizes *at least* 'num_rows' rows of alpha |
| 85 // starting from row number 'row'. It assumes that rows up to (row - 1) have | 87 // starting from row number 'row'. It assumes that rows up to (row - 1) have |
| 86 // already been decoded. | 88 // already been decoded. |
| 87 // Returns false in case of bitstream error. | 89 // Returns false in case of bitstream error. |
| 88 static int ALPHDecode(VP8Decoder* const dec, int row, int num_rows) { | 90 static int ALPHDecode(VP8Decoder* const dec, int row, int num_rows) { |
| 89 ALPHDecoder* const alph_dec = dec->alph_dec_; | 91 ALPHDecoder* const alph_dec = dec->alph_dec_; |
| 90 const int width = alph_dec->width_; | 92 const int width = alph_dec->width_; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 if (!ok || dec->is_alpha_decoded_) { | 158 if (!ok || dec->is_alpha_decoded_) { |
| 157 ALPHDelete(dec->alph_dec_); | 159 ALPHDelete(dec->alph_dec_); |
| 158 dec->alph_dec_ = NULL; | 160 dec->alph_dec_ = NULL; |
| 159 } | 161 } |
| 160 if (!ok) return NULL; // Error. | 162 if (!ok) return NULL; // Error. |
| 161 } | 163 } |
| 162 | 164 |
| 163 // Return a pointer to the current decoded row. | 165 // Return a pointer to the current decoded row. |
| 164 return dec->alpha_plane_ + row * width; | 166 return dec->alpha_plane_ + row * width; |
| 165 } | 167 } |
| OLD | NEW |