diff options
author | Matt Sarett <msarett@google.com> | 2017-06-08 18:45:40 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-08 18:45:45 +0000 |
commit | 81c83a7db4e524b19d33bf7c8a9b537b9d606c93 (patch) | |
tree | f559fd5a39c5bae48bc6b92f53f319689318e13d /src/codec | |
parent | 7c14d274ee6d0e4852aae1ba34873656fdd76ef1 (diff) |
Revert "Do not return Index8 from SkAndroidCodec::computeOutputColorType"
This reverts commit b6f4767294261dca3beef6f280c4bac69df3f930.
Reason for revert: This breaks CTS tests in Android. Doh.
Original change's description:
> Do not return Index8 from SkAndroidCodec::computeOutputColorType
>
> Given that this is the only known use of Index8 color type,
> this is essentially an experimental delete.
>
> Bug: skia:6620
> Change-Id: Ib363d237e0217f6e7f461a62e54d32892c428095
> Reviewed-on: https://skia-review.googlesource.com/10586
> Reviewed-by: Leon Scroggins <scroggo@google.com>
> Commit-Queue: Matt Sarett <msarett@google.com>
TBR=msarett@google.com,scroggo@google.com,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:6620
Change-Id: I2b44c695b8b95659520e9532901f636f56e01e2a
Reviewed-on: https://skia-review.googlesource.com/19084
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/codec')
-rw-r--r-- | src/codec/SkAndroidCodec.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/codec/SkAndroidCodec.cpp b/src/codec/SkAndroidCodec.cpp index 6c9152b08a..b30dd52e4c 100644 --- a/src/codec/SkAndroidCodec.cpp +++ b/src/codec/SkAndroidCodec.cpp @@ -105,19 +105,39 @@ SkAndroidCodec* SkAndroidCodec::NewFromData(sk_sp<SkData> data, SkPngChunkReader } SkColorType SkAndroidCodec::computeOutputColorType(SkColorType requestedColorType) { + // The legacy GIF and WBMP decoders always decode to kIndex_8_SkColorType. + // We will maintain this behavior when we can. + const SkColorType suggestedColorType = this->getInfo().colorType(); + switch ((SkEncodedImageFormat) this->getEncodedFormat()) { + case SkEncodedImageFormat::kGIF: + if (suggestedColorType == kIndex_8_SkColorType) { + return kIndex_8_SkColorType; + } + break; + case SkEncodedImageFormat::kWBMP: + return kIndex_8_SkColorType; + default: + break; + } + bool highPrecision = fCodec->getEncodedInfo().bitsPerComponent() > 8; switch (requestedColorType) { case kARGB_4444_SkColorType: return kN32_SkColorType; case kN32_SkColorType: + // F16 is the Android default for high precision images. + return highPrecision ? kRGBA_F16_SkColorType : kN32_SkColorType; case kIndex_8_SkColorType: + if (kIndex_8_SkColorType == suggestedColorType) { + return kIndex_8_SkColorType; + } break; case kAlpha_8_SkColorType: // Fall through to kGray_8. Before kGray_8_SkColorType existed, // we allowed clients to request kAlpha_8 when they wanted a // grayscale decode. case kGray_8_SkColorType: - if (kGray_8_SkColorType == this->getInfo().colorType()) { + if (kGray_8_SkColorType == suggestedColorType) { return kGray_8_SkColorType; } break; @@ -132,8 +152,14 @@ SkColorType SkAndroidCodec::computeOutputColorType(SkColorType requestedColorTyp break; } - // F16 is the Android default for high precision images. - return highPrecision ? kRGBA_F16_SkColorType : kN32_SkColorType; + // Android has limited support for kGray_8 (using kAlpha_8). We will not + // use kGray_8 for Android unless they specifically ask for it. + if (kGray_8_SkColorType == suggestedColorType) { + return kN32_SkColorType; + } + + // |suggestedColorType| may be kN32_SkColorType or kIndex_8_SkColorType. + return highPrecision ? kRGBA_F16_SkColorType : suggestedColorType; } SkAlphaType SkAndroidCodec::computeOutputAlphaType(bool requestedUnpremul) { |