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

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

Issue 1422493004: libwebp: update to 0.4.4 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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/vp8i.h ('k') | third_party/libwebp/dsp/dec_neon.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 2012 Google Inc. All Rights Reserved. 1 // Copyright 2012 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 // main entry for the decoder 10 // main entry for the decoder
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 //------------------------------------------------------------------------------ 383 //------------------------------------------------------------------------------
384 // Scaling. 384 // Scaling.
385 385
386 static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) { 386 static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) {
387 const int num_channels = 4; 387 const int num_channels = 4;
388 const int in_width = io->mb_w; 388 const int in_width = io->mb_w;
389 const int out_width = io->scaled_width; 389 const int out_width = io->scaled_width;
390 const int in_height = io->mb_h; 390 const int in_height = io->mb_h;
391 const int out_height = io->scaled_height; 391 const int out_height = io->scaled_height;
392 const uint64_t work_size = 2 * num_channels * (uint64_t)out_width; 392 const uint64_t work_size = 2 * num_channels * (uint64_t)out_width;
393 int32_t* work; // Rescaler work area. 393 rescaler_t* work; // Rescaler work area.
394 const uint64_t scaled_data_size = num_channels * (uint64_t)out_width; 394 const uint64_t scaled_data_size = (uint64_t)out_width;
395 uint32_t* scaled_data; // Temporary storage for scaled BGRA data. 395 uint32_t* scaled_data; // Temporary storage for scaled BGRA data.
396 const uint64_t memory_size = sizeof(*dec->rescaler) + 396 const uint64_t memory_size = sizeof(*dec->rescaler) +
397 work_size * sizeof(*work) + 397 work_size * sizeof(*work) +
398 scaled_data_size * sizeof(*scaled_data); 398 scaled_data_size * sizeof(*scaled_data);
399 uint8_t* memory = (uint8_t*)WebPSafeCalloc(memory_size, sizeof(*memory)); 399 uint8_t* memory = (uint8_t*)WebPSafeMalloc(memory_size, sizeof(*memory));
400 if (memory == NULL) { 400 if (memory == NULL) {
401 dec->status_ = VP8_STATUS_OUT_OF_MEMORY; 401 dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
402 return 0; 402 return 0;
403 } 403 }
404 assert(dec->rescaler_memory == NULL); 404 assert(dec->rescaler_memory == NULL);
405 dec->rescaler_memory = memory; 405 dec->rescaler_memory = memory;
406 406
407 dec->rescaler = (WebPRescaler*)memory; 407 dec->rescaler = (WebPRescaler*)memory;
408 memory += sizeof(*dec->rescaler); 408 memory += sizeof(*dec->rescaler);
409 work = (int32_t*)memory; 409 work = (rescaler_t*)memory;
410 memory += work_size * sizeof(*work); 410 memory += work_size * sizeof(*work);
411 scaled_data = (uint32_t*)memory; 411 scaled_data = (uint32_t*)memory;
412 412
413 WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data, 413 WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data,
414 out_width, out_height, 0, num_channels, 414 out_width, out_height, 0, num_channels, work);
415 in_width, out_width, in_height, out_height, work);
416 return 1; 415 return 1;
417 } 416 }
418 417
419 //------------------------------------------------------------------------------ 418 //------------------------------------------------------------------------------
420 // Export to ARGB 419 // Export to ARGB
421 420
422 // We have special "export" function since we need to convert from BGRA 421 // We have special "export" function since we need to convert from BGRA
423 static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace, 422 static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace,
424 int rgba_stride, uint8_t* const rgba) { 423 int rgba_stride, uint8_t* const rgba) {
425 uint32_t* const src = (uint32_t*)rescaler->dst; 424 uint32_t* const src = (uint32_t*)rescaler->dst;
426 const int dst_width = rescaler->dst_width; 425 const int dst_width = rescaler->dst_width;
427 int num_lines_out = 0; 426 int num_lines_out = 0;
428 while (WebPRescalerHasPendingOutput(rescaler)) { 427 while (WebPRescalerHasPendingOutput(rescaler)) {
429 uint8_t* const dst = rgba + num_lines_out * rgba_stride; 428 uint8_t* const dst = rgba + num_lines_out * rgba_stride;
430 WebPRescalerExportRow(rescaler, 0); 429 WebPRescalerExportRow(rescaler);
431 WebPMultARGBRow(src, dst_width, 1); 430 WebPMultARGBRow(src, dst_width, 1);
432 VP8LConvertFromBGRA(src, dst_width, colorspace, dst); 431 VP8LConvertFromBGRA(src, dst_width, colorspace, dst);
433 ++num_lines_out; 432 ++num_lines_out;
434 } 433 }
435 return num_lines_out; 434 return num_lines_out;
436 } 435 }
437 436
438 // Emit scaled rows. 437 // Emit scaled rows.
439 static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec, 438 static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec,
440 uint8_t* in, int in_stride, int mb_h, 439 uint8_t* in, int in_stride, int mb_h,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 for (i = 0; i < width; ++i) a[i] = (src[i] >> 24); 537 for (i = 0; i < width; ++i) a[i] = (src[i] >> 24);
539 } 538 }
540 } 539 }
541 540
542 static int ExportYUVA(const VP8LDecoder* const dec, int y_pos) { 541 static int ExportYUVA(const VP8LDecoder* const dec, int y_pos) {
543 WebPRescaler* const rescaler = dec->rescaler; 542 WebPRescaler* const rescaler = dec->rescaler;
544 uint32_t* const src = (uint32_t*)rescaler->dst; 543 uint32_t* const src = (uint32_t*)rescaler->dst;
545 const int dst_width = rescaler->dst_width; 544 const int dst_width = rescaler->dst_width;
546 int num_lines_out = 0; 545 int num_lines_out = 0;
547 while (WebPRescalerHasPendingOutput(rescaler)) { 546 while (WebPRescalerHasPendingOutput(rescaler)) {
548 WebPRescalerExportRow(rescaler, 0); 547 WebPRescalerExportRow(rescaler);
549 WebPMultARGBRow(src, dst_width, 1); 548 WebPMultARGBRow(src, dst_width, 1);
550 ConvertToYUVA(src, dst_width, y_pos, dec->output_); 549 ConvertToYUVA(src, dst_width, y_pos, dec->output_);
551 ++y_pos; 550 ++y_pos;
552 ++num_lines_out; 551 ++num_lines_out;
553 } 552 }
554 return num_lines_out; 553 return num_lines_out;
555 } 554 }
556 555
557 static int EmitRescaledRowsYUVA(const VP8LDecoder* const dec, 556 static int EmitRescaledRowsYUVA(const VP8LDecoder* const dec,
558 uint8_t* in, int in_stride, int mb_h) { 557 uint8_t* in, int in_stride, int mb_h) {
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 VP8LClear(dec); 1394 VP8LClear(dec);
1396 return 1; 1395 return 1;
1397 1396
1398 Err: 1397 Err:
1399 VP8LClear(dec); 1398 VP8LClear(dec);
1400 assert(dec->status_ != VP8_STATUS_OK); 1399 assert(dec->status_ != VP8_STATUS_OK);
1401 return 0; 1400 return 0;
1402 } 1401 }
1403 1402
1404 //------------------------------------------------------------------------------ 1403 //------------------------------------------------------------------------------
OLDNEW
« no previous file with comments | « third_party/libwebp/dec/vp8i.h ('k') | third_party/libwebp/dsp/dec_neon.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698