Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: third_party/libwebp/dec/alpha.c

Issue 12942006: libwebp: update snapshot to v0.3.0-rc6 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: local webkit layout expectations Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 Google Inc. All Rights Reserved. 1 // Copyright 2011 Google Inc. All Rights Reserved.
2 // 2 //
3 // This code is licensed under the same terms as WebM: 3 // This code is licensed under the same terms as WebM:
4 // Software License Agreement: http://www.webmproject.org/license/software/ 4 // Software License Agreement: http://www.webmproject.org/license/software/
5 // Additional IP Rights Grant: http://www.webmproject.org/license/additional/ 5 // Additional IP Rights Grant: http://www.webmproject.org/license/additional/
6 // ----------------------------------------------------------------------------- 6 // -----------------------------------------------------------------------------
7 // 7 //
8 // Alpha-plane decompression. 8 // Alpha-plane decompression.
9 // 9 //
10 // Author: Skal (pascal.massimino@gmail.com) 10 // Author: Skal (pascal.massimino@gmail.com)
11 11
12 #include <stdlib.h> 12 #include <stdlib.h>
13 #include "./vp8i.h" 13 #include "./vp8i.h"
14 #include "./vp8li.h" 14 #include "./vp8li.h"
15 #include "../utils/filters.h" 15 #include "../utils/filters.h"
16 #include "../utils/quant_levels.h" 16 #include "../utils/quant_levels_dec.h"
17 #include "../webp/format_constants.h" 17 #include "../webp/format_constants.h"
18 18
19 #if defined(__cplusplus) || defined(c_plusplus) 19 #if defined(__cplusplus) || defined(c_plusplus)
20 extern "C" { 20 extern "C" {
21 #endif 21 #endif
22 22
23 // TODO(skal): move to dsp/ ? 23 // TODO(skal): move to dsp/ ?
24 static void CopyPlane(const uint8_t* src, int src_stride, 24 static void CopyPlane(const uint8_t* src, int src_stride,
25 uint8_t* dst, int dst_stride, int width, int height) { 25 uint8_t* dst, int dst_stride, int width, int height) {
26 while (height-- > 0) { 26 while (height-- > 0) {
(...skipping 10 matching lines...) Expand all
37 // 37 //
38 // Returns 1 on successfully decoding the compressed alpha and 38 // Returns 1 on successfully decoding the compressed alpha and
39 // 0 if either: 39 // 0 if either:
40 // error in bit-stream header (invalid compression mode or filter), or 40 // error in bit-stream header (invalid compression mode or filter), or
41 // error returned by appropriate compression method. 41 // error returned by appropriate compression method.
42 42
43 static int DecodeAlpha(const uint8_t* data, size_t data_size, 43 static int DecodeAlpha(const uint8_t* data, size_t data_size,
44 int width, int height, int stride, uint8_t* output) { 44 int width, int height, int stride, uint8_t* output) {
45 uint8_t* decoded_data = NULL; 45 uint8_t* decoded_data = NULL;
46 const size_t decoded_size = height * width; 46 const size_t decoded_size = height * width;
47 uint8_t* unfiltered_data = NULL;
48 WEBP_FILTER_TYPE filter; 47 WEBP_FILTER_TYPE filter;
49 int pre_processing; 48 int pre_processing;
50 int rsrv; 49 int rsrv;
51 int ok = 0; 50 int ok = 0;
52 int method; 51 int method;
53 52
54 assert(width > 0 && height > 0 && stride >= width); 53 assert(width > 0 && height > 0 && stride >= width);
55 assert(data != NULL && output != NULL); 54 assert(data != NULL && output != NULL);
56 55
57 if (data_size <= ALPHA_HEADER_LEN) { 56 if (data_size <= ALPHA_HEADER_LEN) {
(...skipping 18 matching lines...) Expand all
76 } else { 75 } else {
77 decoded_data = (uint8_t*)malloc(decoded_size); 76 decoded_data = (uint8_t*)malloc(decoded_size);
78 if (decoded_data == NULL) return 0; 77 if (decoded_data == NULL) return 0;
79 ok = VP8LDecodeAlphaImageStream(width, height, 78 ok = VP8LDecodeAlphaImageStream(width, height,
80 data + ALPHA_HEADER_LEN, 79 data + ALPHA_HEADER_LEN,
81 data_size - ALPHA_HEADER_LEN, 80 data_size - ALPHA_HEADER_LEN,
82 decoded_data); 81 decoded_data);
83 } 82 }
84 83
85 if (ok) { 84 if (ok) {
86 WebPFilterFunc unfilter_func = WebPUnfilters[filter]; 85 WebPUnfilterFunc unfilter_func = WebPUnfilters[filter];
87 if (unfilter_func != NULL) { 86 if (unfilter_func != NULL) {
88 unfiltered_data = (uint8_t*)malloc(decoded_size);
89 if (unfiltered_data == NULL) {
90 ok = 0;
91 goto Error;
92 }
93 // TODO(vikas): Implement on-the-fly decoding & filter mechanism to decode 87 // TODO(vikas): Implement on-the-fly decoding & filter mechanism to decode
94 // and apply filter per image-row. 88 // and apply filter per image-row.
95 unfilter_func(decoded_data, width, height, 1, width, unfiltered_data); 89 unfilter_func(width, height, width, decoded_data);
96 // Construct raw_data (height x stride) from alpha data (height x width).
97 CopyPlane(unfiltered_data, width, output, stride, width, height);
98 free(unfiltered_data);
99 } else {
100 // Construct raw_data (height x stride) from alpha data (height x width).
101 CopyPlane(decoded_data, width, output, stride, width, height);
102 } 90 }
91 // Construct raw_data (height x stride) from alpha data (height x width).
92 CopyPlane(decoded_data, width, output, stride, width, height);
103 if (pre_processing == ALPHA_PREPROCESSED_LEVELS) { 93 if (pre_processing == ALPHA_PREPROCESSED_LEVELS) {
104 ok = DequantizeLevels(decoded_data, width, height); 94 ok = DequantizeLevels(decoded_data, width, height);
105 } 95 }
106 } 96 }
107 97
108 Error:
109 if (method != ALPHA_NO_COMPRESSION) { 98 if (method != ALPHA_NO_COMPRESSION) {
110 free(decoded_data); 99 free(decoded_data);
111 } 100 }
112 return ok; 101 return ok;
113 } 102 }
114 103
115 //------------------------------------------------------------------------------ 104 //------------------------------------------------------------------------------
116 105
117 const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec, 106 const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec,
118 int row, int num_rows) { 107 int row, int num_rows) {
(...skipping 12 matching lines...) Expand all
131 } 120 }
132 } 121 }
133 122
134 // Return a pointer to the current decoded row. 123 // Return a pointer to the current decoded row.
135 return dec->alpha_plane_ + row * stride; 124 return dec->alpha_plane_ + row * stride;
136 } 125 }
137 126
138 #if defined(__cplusplus) || defined(c_plusplus) 127 #if defined(__cplusplus) || defined(c_plusplus)
139 } // extern "C" 128 } // extern "C"
140 #endif 129 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698