OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010, The Android Open Source Project | 2 * Copyright 2010, The Android Open Source Project |
3 * | 3 * |
4 * Licensed under the Apache License, Version 2.0 (the "License"); | 4 * Licensed under the Apache License, Version 2.0 (the "License"); |
5 * you may not use this file except in compliance with the License. | 5 * you may not use this file except in compliance with the License. |
6 * You may obtain a copy of the License at | 6 * You may obtain a copy of the License at |
7 * | 7 * |
8 * http://www.apache.org/licenses/LICENSE-2.0 | 8 * http://www.apache.org/licenses/LICENSE-2.0 |
9 * | 9 * |
10 * Unless required by applicable law or agreed to in writing, software | 10 * Unless required by applicable law or agreed to in writing, software |
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 int bpp = -1; | 614 int bpp = -1; |
615 const ScanlineImporter scanline_import = ChooseImporter(bm.colorType(), hasA
lpha, &bpp); | 615 const ScanlineImporter scanline_import = ChooseImporter(bm.colorType(), hasA
lpha, &bpp); |
616 if (NULL == scanline_import) { | 616 if (NULL == scanline_import) { |
617 return false; | 617 return false; |
618 } | 618 } |
619 if (-1 == bpp) { | 619 if (-1 == bpp) { |
620 return false; | 620 return false; |
621 } | 621 } |
622 | 622 |
623 SkAutoLockPixels alp(bm); | 623 SkAutoLockPixels alp(bm); |
624 SkAutoLockColors ctLocker; | |
625 if (NULL == bm.getPixels()) { | 624 if (NULL == bm.getPixels()) { |
626 return false; | 625 return false; |
627 } | 626 } |
628 | 627 |
629 WebPConfig webp_config; | 628 WebPConfig webp_config; |
630 if (!WebPConfigPreset(&webp_config, WEBP_PRESET_DEFAULT, (float) quality)) { | 629 if (!WebPConfigPreset(&webp_config, WEBP_PRESET_DEFAULT, (float) quality)) { |
631 return false; | 630 return false; |
632 } | 631 } |
633 | 632 |
634 WebPPicture pic; | 633 WebPPicture pic; |
635 WebPPictureInit(&pic); | 634 WebPPictureInit(&pic); |
636 pic.width = bm.width(); | 635 pic.width = bm.width(); |
637 pic.height = bm.height(); | 636 pic.height = bm.height(); |
638 pic.writer = stream_writer; | 637 pic.writer = stream_writer; |
639 pic.custom_ptr = (void*)stream; | 638 pic.custom_ptr = (void*)stream; |
640 | 639 |
641 const SkPMColor* colors = ctLocker.lockColors(bm); | 640 const SkPMColor* colors = bm.getColorTable() ? bm.getColorTable()->readColor
s() : NULL; |
642 const uint8_t* src = (uint8_t*)bm.getPixels(); | 641 const uint8_t* src = (uint8_t*)bm.getPixels(); |
643 const int rgbStride = pic.width * bpp; | 642 const int rgbStride = pic.width * bpp; |
644 | 643 |
645 // Import (for each scanline) the bit-map image (in appropriate color-space) | 644 // Import (for each scanline) the bit-map image (in appropriate color-space) |
646 // to RGB color space. | 645 // to RGB color space. |
647 uint8_t* rgb = new uint8_t[rgbStride * pic.height]; | 646 uint8_t* rgb = new uint8_t[rgbStride * pic.height]; |
648 for (int y = 0; y < pic.height; ++y) { | 647 for (int y = 0; y < pic.height; ++y) { |
649 scanline_import(src + y * bm.rowBytes(), rgb + y * rgbStride, | 648 scanline_import(src + y * bm.rowBytes(), rgb + y * rgbStride, |
650 pic.width, colors); | 649 pic.width, colors); |
651 } | 650 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 return SkImageDecoder::kUnknown_Format; | 687 return SkImageDecoder::kUnknown_Format; |
689 } | 688 } |
690 | 689 |
691 static SkImageEncoder* sk_libwebp_efactory(SkImageEncoder::Type t) { | 690 static SkImageEncoder* sk_libwebp_efactory(SkImageEncoder::Type t) { |
692 return (SkImageEncoder::kWEBP_Type == t) ? SkNEW(SkWEBPImageEncoder) : NUL
L; | 691 return (SkImageEncoder::kWEBP_Type == t) ? SkNEW(SkWEBPImageEncoder) : NUL
L; |
693 } | 692 } |
694 | 693 |
695 static SkImageDecoder_DecodeReg gDReg(sk_libwebp_dfactory); | 694 static SkImageDecoder_DecodeReg gDReg(sk_libwebp_dfactory); |
696 static SkImageDecoder_FormatReg gFormatReg(get_format_webp); | 695 static SkImageDecoder_FormatReg gFormatReg(get_format_webp); |
697 static SkImageEncoder_EncodeReg gEReg(sk_libwebp_efactory); | 696 static SkImageEncoder_EncodeReg gEReg(sk_libwebp_efactory); |
OLD | NEW |