diff options
author | msarett <msarett@google.com> | 2016-01-11 07:23:23 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-11 07:23:23 -0800 |
commit | a4970dc973459d2607ce80623452bf8470adf6f1 (patch) | |
tree | df503260bfaa7d0a736daa93c727a03d0802adc3 /src/codec/SkCodec_libpng.cpp | |
parent | b512aaa5c808bcb1336c147682657882ee54e652 (diff) |
Delete reallyHasAlpha() from SkCodec
TBR=reed
BUG=skia:3582
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1557403002
Review URL: https://codereview.chromium.org/1557403002
Diffstat (limited to 'src/codec/SkCodec_libpng.cpp')
-rw-r--r-- | src/codec/SkCodec_libpng.cpp | 89 |
1 files changed, 5 insertions, 84 deletions
diff --git a/src/codec/SkCodec_libpng.cpp b/src/codec/SkCodec_libpng.cpp index 6916ba7c39..e8fd2a3cdd 100644 --- a/src/codec/SkCodec_libpng.cpp +++ b/src/codec/SkCodec_libpng.cpp @@ -154,7 +154,6 @@ bool SkPngCodec::decodePalette(bool premultiply, int* ctableCount) { } int index = 0; - int transLessThanFF = 0; // Choose which function to use to create the color table. If the final destination's // colortype is unpremultiplied, the color table will store unpremultiplied colors. @@ -165,16 +164,10 @@ bool SkPngCodec::decodePalette(bool premultiply, int* ctableCount) { proc = &SkPackARGB32NoCheck; } for (; index < numTrans; index++) { - transLessThanFF |= (int)*trans - 0xFF; *colorPtr++ = proc(*trans++, palette->red, palette->green, palette->blue); palette++; } - if (transLessThanFF >= 0) { - // No transparent colors were found. - fAlphaState = kOpaque_AlphaState; - } - for (; index < numPalette; index++) { *colorPtr++ = SkPackARGB32(0xFF, palette->red, palette->green, palette->blue); palette++; @@ -385,13 +378,7 @@ SkPngCodec::SkPngCodec(const SkImageInfo& info, SkStream* stream, SkPngChunkRead , fSrcConfig(SkSwizzler::kUnknown) , fNumberPasses(numberPasses) , fBitDepth(bitDepth) -{ - if (info.alphaType() == kOpaque_SkAlphaType) { - fAlphaState = kOpaque_AlphaState; - } else { - fAlphaState = kUnknown_AlphaState; - } -} +{} SkPngCodec::~SkPngCodec() { this->destroyReadStruct(); @@ -527,7 +514,6 @@ SkCodec::Result SkPngCodec::onGetPixels(const SkImageInfo& requestedInfo, void* return kIncompleteInput; } - bool hasAlpha = false; // FIXME: We could split these out based on subclass. void* dstRow = dst; if (fNumberPasses > 1) { @@ -551,7 +537,7 @@ SkCodec::Result SkPngCodec::onGetPixels(const SkImageInfo& requestedInfo, void* // Now swizzle it. uint8_t* srcRow = base; for (int y = 0; y < height; y++) { - hasAlpha |= !SkSwizzler::IsOpaque(fSwizzler->swizzle(dstRow, srcRow)); + fSwizzler->swizzle(dstRow, srcRow); dstRow = SkTAddOffset<void>(dstRow, dstRowBytes); srcRow += srcRowBytes; } @@ -561,17 +547,11 @@ SkCodec::Result SkPngCodec::onGetPixels(const SkImageInfo& requestedInfo, void* for (; row < requestedInfo.height(); row++) { png_read_rows(fPng_ptr, &srcRow, png_bytepp_NULL, 1); // FIXME: Only call IsOpaque once, outside the loop. Same for onGetScanlines. - hasAlpha |= !SkSwizzler::IsOpaque(fSwizzler->swizzle(dstRow, srcRow)); + fSwizzler->swizzle(dstRow, srcRow); dstRow = SkTAddOffset<void>(dstRow, dstRowBytes); } } - if (hasAlpha) { - fAlphaState = kHasAlpha_AlphaState; - } else { - fAlphaState = kOpaque_AlphaState; - } - // FIXME: do we need substituteTranspColor? Note that we cannot do it for // scanline decoding, but we could do it here. Alternatively, we could do // it as we go, instead of in post-processing like SkPNGImageDecoder. @@ -595,38 +575,12 @@ uint32_t SkPngCodec::onGetFillValue(SkColorType colorType, SkAlphaType alphaType return INHERITED::onGetFillValue(colorType, alphaType); } -bool SkPngCodec::onReallyHasAlpha() const { - switch (fAlphaState) { - case kOpaque_AlphaState: - return false; - case kUnknown_AlphaState: - // Maybe the subclass knows? - return this->alphaInScanlineDecode() == kHasAlpha_AlphaState; - case kHasAlpha_AlphaState: - switch (this->alphaInScanlineDecode()) { - case kUnknown_AlphaState: - // Scanline decoder must not have been used. Return our knowledge. - return true; - case kOpaque_AlphaState: - // Scanline decoder was used, and did not find alpha in its subset. - return false; - case kHasAlpha_AlphaState: - return true; - } - } - - // All valid AlphaStates have been covered, so this should not be reached. - SkASSERT(false); - return true; -} - // Subclass of SkPngCodec which supports scanline decoding class SkPngScanlineDecoder : public SkPngCodec { public: SkPngScanlineDecoder(const SkImageInfo& srcInfo, SkStream* stream, SkPngChunkReader* chunkReader, png_structp png_ptr, png_infop info_ptr, int bitDepth) : INHERITED(srcInfo, stream, chunkReader, png_ptr, info_ptr, bitDepth, 1) - , fAlphaState(kUnknown_AlphaState) , fSrcRow(nullptr) {} @@ -642,7 +596,6 @@ public: return result; } - fAlphaState = kUnknown_AlphaState; fStorage.reset(this->getInfo().width() * SkSwizzler::BytesPerPixel(this->srcConfig())); fSrcRow = fStorage.get(); @@ -658,22 +611,12 @@ public: } void* dstRow = dst; - bool hasAlpha = false; for (; row < count; row++) { png_read_rows(this->png_ptr(), &fSrcRow, png_bytepp_NULL, 1); - hasAlpha |= !SkSwizzler::IsOpaque(this->swizzler()->swizzle(dstRow, fSrcRow)); + this->swizzler()->swizzle(dstRow, fSrcRow); dstRow = SkTAddOffset<void>(dstRow, rowBytes); } - if (hasAlpha) { - fAlphaState = kHasAlpha_AlphaState; - } else { - if (kUnknown_AlphaState == fAlphaState) { - fAlphaState = kOpaque_AlphaState; - } - // Otherwise, the AlphaState is unchanged. - } - return row; } @@ -692,12 +635,7 @@ public: return true; } - AlphaState alphaInScanlineDecode() const override { - return fAlphaState; - } - private: - AlphaState fAlphaState; SkAutoTMalloc<uint8_t> fStorage; uint8_t* fSrcRow; @@ -711,7 +649,6 @@ public: SkPngChunkReader* chunkReader, png_structp png_ptr, png_infop info_ptr, int bitDepth, int numberPasses) : INHERITED(srcInfo, stream, chunkReader, png_ptr, info_ptr, bitDepth, numberPasses) - , fAlphaState(kUnknown_AlphaState) , fHeight(-1) , fCanSkipRewind(false) { @@ -730,7 +667,6 @@ public: return result; } - fAlphaState = kUnknown_AlphaState; fHeight = dstInfo.height(); // FIXME: This need not be called on a second call to onStartScanlineDecode. fSrcRowBytes = this->getInfo().width() * SkSwizzler::BytesPerPixel(this->srcConfig()); @@ -794,22 +730,12 @@ public: //swizzle the rows we care about srcRow = storagePtr; void* dstRow = dst; - bool hasAlpha = false; for (int y = 0; y < count; y++) { - hasAlpha |= !SkSwizzler::IsOpaque(this->swizzler()->swizzle(dstRow, srcRow)); + this->swizzler()->swizzle(dstRow, srcRow); dstRow = SkTAddOffset<void>(dstRow, dstRowBytes); srcRow += fSrcRowBytes; } - if (hasAlpha) { - fAlphaState = kHasAlpha_AlphaState; - } else { - if (kUnknown_AlphaState == fAlphaState) { - fAlphaState = kOpaque_AlphaState; - } - // Otherwise, the AlphaState is unchanged. - } - return count; } @@ -818,16 +744,11 @@ public: return true; } - AlphaState alphaInScanlineDecode() const override { - return fAlphaState; - } - SkScanlineOrder onGetScanlineOrder() const override { return kNone_SkScanlineOrder; } private: - AlphaState fAlphaState; int fHeight; size_t fSrcRowBytes; SkAutoMalloc fGarbageRow; |