| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2015 Google Inc. | 2  * Copyright 2015 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #include "SkCodec_libpng.h" | 8 #include "SkCodec_libpng.h" | 
| 9 #include "SkCodecPriv.h" | 9 #include "SkCodecPriv.h" | 
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" | 
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 280     if (bitDepth < 8) { | 280     if (bitDepth < 8) { | 
| 281         png_set_packing(png_ptr); | 281         png_set_packing(png_ptr); | 
| 282     } | 282     } | 
| 283 #endif | 283 #endif | 
| 284     // Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel. | 284     // Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel. | 
| 285     if (colorType == PNG_COLOR_TYPE_GRAY && bitDepth < 8) { | 285     if (colorType == PNG_COLOR_TYPE_GRAY && bitDepth < 8) { | 
| 286         png_set_expand_gray_1_2_4_to_8(png_ptr); | 286         png_set_expand_gray_1_2_4_to_8(png_ptr); | 
| 287     } | 287     } | 
| 288 | 288 | 
| 289     // Now determine the default SkColorType and SkAlphaType and set required tr
     ansforms | 289     // Now determine the default SkColorType and SkAlphaType and set required tr
     ansforms | 
| 290     SkColorType skColorType; | 290     SkColorType skColorType = kUnknown_SkColorType; | 
| 291     SkAlphaType skAlphaType; | 291     SkAlphaType skAlphaType = kUnknown_SkAlphaType; | 
| 292     switch (colorType) { | 292     switch (colorType) { | 
| 293         case PNG_COLOR_TYPE_PALETTE: | 293         case PNG_COLOR_TYPE_PALETTE: | 
| 294             skColorType = kIndex_8_SkColorType; | 294             skColorType = kIndex_8_SkColorType; | 
| 295             skAlphaType = has_transparency_in_tRNS(png_ptr, info_ptr) ? | 295             skAlphaType = has_transparency_in_tRNS(png_ptr, info_ptr) ? | 
| 296                     kUnpremul_SkAlphaType : kOpaque_SkAlphaType; | 296                     kUnpremul_SkAlphaType : kOpaque_SkAlphaType; | 
| 297             break; | 297             break; | 
| 298         case PNG_COLOR_TYPE_RGB: | 298         case PNG_COLOR_TYPE_RGB: | 
| 299             if (has_transparency_in_tRNS(png_ptr, info_ptr)) { | 299             if (has_transparency_in_tRNS(png_ptr, info_ptr)) { | 
| 300                 //convert to RGBA with tranparency information in tRNS chunk if 
     it exists | 300                 //convert to RGBA with tranparency information in tRNS chunk if 
     it exists | 
| 301                 png_set_tRNS_to_alpha(png_ptr); | 301                 png_set_tRNS_to_alpha(png_ptr); | 
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 598     SkASSERT(false); | 598     SkASSERT(false); | 
| 599     return true; | 599     return true; | 
| 600 } | 600 } | 
| 601 | 601 | 
| 602 // Subclass of SkPngCodec which supports scanline decoding | 602 // Subclass of SkPngCodec which supports scanline decoding | 
| 603 class SkPngScanlineDecoder : public SkPngCodec { | 603 class SkPngScanlineDecoder : public SkPngCodec { | 
| 604 public: | 604 public: | 
| 605     SkPngScanlineDecoder(const SkImageInfo& srcInfo, SkStream* stream, | 605     SkPngScanlineDecoder(const SkImageInfo& srcInfo, SkStream* stream, | 
| 606             png_structp png_ptr, png_infop info_ptr, int bitDepth) | 606             png_structp png_ptr, png_infop info_ptr, int bitDepth) | 
| 607         : INHERITED(srcInfo, stream, png_ptr, info_ptr, bitDepth, 1) | 607         : INHERITED(srcInfo, stream, png_ptr, info_ptr, bitDepth, 1) | 
|  | 608         , fAlphaState(kUnknown_AlphaState) | 
| 608         , fSrcRow(nullptr) | 609         , fSrcRow(nullptr) | 
| 609         , fAlphaState(kUnknown_AlphaState) |  | 
| 610     {} | 610     {} | 
| 611 | 611 | 
| 612     Result onStartScanlineDecode(const SkImageInfo& dstInfo, const Options& opti
     ons, | 612     Result onStartScanlineDecode(const SkImageInfo& dstInfo, const Options& opti
     ons, | 
| 613             SkPMColor ctable[], int* ctableCount) override { | 613             SkPMColor ctable[], int* ctableCount) override { | 
| 614         if (!conversion_possible(dstInfo, this->getInfo())) { | 614         if (!conversion_possible(dstInfo, this->getInfo())) { | 
| 615             return kInvalidConversion; | 615             return kInvalidConversion; | 
| 616         } | 616         } | 
| 617 | 617 | 
| 618         const Result result = this->initializeSwizzler(dstInfo, options, ctable, | 618         const Result result = this->initializeSwizzler(dstInfo, options, ctable, | 
| 619                                                        ctableCount); | 619                                                        ctableCount); | 
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 836     } | 836     } | 
| 837 | 837 | 
| 838     if (1 == numberPasses) { | 838     if (1 == numberPasses) { | 
| 839         return new SkPngScanlineDecoder(imageInfo, streamDeleter.detach(), png_p
     tr, info_ptr, | 839         return new SkPngScanlineDecoder(imageInfo, streamDeleter.detach(), png_p
     tr, info_ptr, | 
| 840                                         bitDepth); | 840                                         bitDepth); | 
| 841     } | 841     } | 
| 842 | 842 | 
| 843     return new SkPngInterlacedScanlineDecoder(imageInfo, streamDeleter.detach(),
      png_ptr, | 843     return new SkPngInterlacedScanlineDecoder(imageInfo, streamDeleter.detach(),
      png_ptr, | 
| 844                                               info_ptr, bitDepth, numberPasses); | 844                                               info_ptr, bitDepth, numberPasses); | 
| 845 } | 845 } | 
| 846 |  | 
| OLD | NEW | 
|---|