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

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

Issue 2149863002: libwebp: update to v0.5.1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « third_party/libwebp/dec/idec.c ('k') | third_party/libwebp/dec/vp8.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // functions for sample output. 10 // functions for sample output.
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 dst + buf->stride, NULL, mb_w); 112 dst + buf->stride, NULL, mb_w);
113 } 113 }
114 } 114 }
115 return num_lines_out; 115 return num_lines_out;
116 } 116 }
117 117
118 #endif /* FANCY_UPSAMPLING */ 118 #endif /* FANCY_UPSAMPLING */
119 119
120 //------------------------------------------------------------------------------ 120 //------------------------------------------------------------------------------
121 121
122 static void FillAlphaPlane(uint8_t* dst, int w, int h, int stride) {
123 int j;
124 for (j = 0; j < h; ++j) {
125 memset(dst, 0xff, w * sizeof(*dst));
126 dst += stride;
127 }
128 }
129
122 static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p, 130 static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
123 int expected_num_lines_out) { 131 int expected_num_lines_out) {
124 const uint8_t* alpha = io->a; 132 const uint8_t* alpha = io->a;
125 const WebPYUVABuffer* const buf = &p->output->u.YUVA; 133 const WebPYUVABuffer* const buf = &p->output->u.YUVA;
126 const int mb_w = io->mb_w; 134 const int mb_w = io->mb_w;
127 const int mb_h = io->mb_h; 135 const int mb_h = io->mb_h;
128 uint8_t* dst = buf->a + io->mb_y * buf->a_stride; 136 uint8_t* dst = buf->a + io->mb_y * buf->a_stride;
129 int j; 137 int j;
130 (void)expected_num_lines_out; 138 (void)expected_num_lines_out;
131 assert(expected_num_lines_out == mb_h); 139 assert(expected_num_lines_out == mb_h);
132 if (alpha != NULL) { 140 if (alpha != NULL) {
133 for (j = 0; j < mb_h; ++j) { 141 for (j = 0; j < mb_h; ++j) {
134 memcpy(dst, alpha, mb_w * sizeof(*dst)); 142 memcpy(dst, alpha, mb_w * sizeof(*dst));
135 alpha += io->width; 143 alpha += io->width;
136 dst += buf->a_stride; 144 dst += buf->a_stride;
137 } 145 }
138 } else if (buf->a != NULL) { 146 } else if (buf->a != NULL) {
139 // the user requested alpha, but there is none, set it to opaque. 147 // the user requested alpha, but there is none, set it to opaque.
140 for (j = 0; j < mb_h; ++j) { 148 FillAlphaPlane(dst, mb_w, mb_h, buf->a_stride);
141 memset(dst, 0xff, mb_w * sizeof(*dst));
142 dst += buf->a_stride;
143 }
144 } 149 }
145 return 0; 150 return 0;
146 } 151 }
147 152
148 static int GetAlphaSourceRow(const VP8Io* const io, 153 static int GetAlphaSourceRow(const VP8Io* const io,
149 const uint8_t** alpha, int* const num_rows) { 154 const uint8_t** alpha, int* const num_rows) {
150 int start_y = io->mb_y; 155 int start_y = io->mb_y;
151 *num_rows = io->mb_h; 156 *num_rows = io->mb_h;
152 157
153 // Compensate for the 1-line delay of the fancy upscaler. 158 // Compensate for the 1-line delay of the fancy upscaler.
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 io->a, io->width, io->mb_w, mb_h, 0); 267 io->a, io->width, io->mb_w, mb_h, 0);
263 } 268 }
264 num_lines_out = Rescale(io->y, io->y_stride, mb_h, scaler); 269 num_lines_out = Rescale(io->y, io->y_stride, mb_h, scaler);
265 Rescale(io->u, io->uv_stride, uv_mb_h, &p->scaler_u); 270 Rescale(io->u, io->uv_stride, uv_mb_h, &p->scaler_u);
266 Rescale(io->v, io->uv_stride, uv_mb_h, &p->scaler_v); 271 Rescale(io->v, io->uv_stride, uv_mb_h, &p->scaler_v);
267 return num_lines_out; 272 return num_lines_out;
268 } 273 }
269 274
270 static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p, 275 static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
271 int expected_num_lines_out) { 276 int expected_num_lines_out) {
277 const WebPYUVABuffer* const buf = &p->output->u.YUVA;
272 if (io->a != NULL) { 278 if (io->a != NULL) {
273 const WebPYUVABuffer* const buf = &p->output->u.YUVA;
274 uint8_t* dst_y = buf->y + p->last_y * buf->y_stride; 279 uint8_t* dst_y = buf->y + p->last_y * buf->y_stride;
275 const uint8_t* src_a = buf->a + p->last_y * buf->a_stride; 280 const uint8_t* src_a = buf->a + p->last_y * buf->a_stride;
276 const int num_lines_out = Rescale(io->a, io->width, io->mb_h, &p->scaler_a); 281 const int num_lines_out = Rescale(io->a, io->width, io->mb_h, &p->scaler_a);
277 (void)expected_num_lines_out; 282 (void)expected_num_lines_out;
278 assert(expected_num_lines_out == num_lines_out); 283 assert(expected_num_lines_out == num_lines_out);
279 if (num_lines_out > 0) { // unmultiply the Y 284 if (num_lines_out > 0) { // unmultiply the Y
280 WebPMultRows(dst_y, buf->y_stride, src_a, buf->a_stride, 285 WebPMultRows(dst_y, buf->y_stride, src_a, buf->a_stride,
281 p->scaler_a.dst_width, num_lines_out, 1); 286 p->scaler_a.dst_width, num_lines_out, 1);
282 } 287 }
288 } else if (buf->a != NULL) {
289 // the user requested alpha, but there is none, set it to opaque.
290 assert(p->last_y + expected_num_lines_out <= io->scaled_height);
291 FillAlphaPlane(buf->a + p->last_y * buf->a_stride,
292 io->scaled_width, expected_num_lines_out, buf->a_stride);
283 } 293 }
284 return 0; 294 return 0;
285 } 295 }
286 296
287 static int InitYUVRescaler(const VP8Io* const io, WebPDecParams* const p) { 297 static int InitYUVRescaler(const VP8Io* const io, WebPDecParams* const p) {
288 const int has_alpha = WebPIsAlphaMode(p->output->colorspace); 298 const int has_alpha = WebPIsAlphaMode(p->output->colorspace);
289 const WebPYUVABuffer* const buf = &p->output->u.YUVA; 299 const WebPYUVABuffer* const buf = &p->output->u.YUVA;
290 const int out_width = io->scaled_width; 300 const int out_width = io->scaled_width;
291 const int out_height = io->scaled_height; 301 const int out_height = io->scaled_height;
292 const int uv_out_width = (out_width + 1) >> 1; 302 const int uv_out_width = (out_width + 1) >> 1;
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 // Main entry point 615 // Main entry point
606 616
607 void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io) { 617 void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io) {
608 io->put = CustomPut; 618 io->put = CustomPut;
609 io->setup = CustomSetup; 619 io->setup = CustomSetup;
610 io->teardown = CustomTeardown; 620 io->teardown = CustomTeardown;
611 io->opaque = params; 621 io->opaque = params;
612 } 622 }
613 623
614 //------------------------------------------------------------------------------ 624 //------------------------------------------------------------------------------
OLDNEW
« no previous file with comments | « third_party/libwebp/dec/idec.c ('k') | third_party/libwebp/dec/vp8.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698