aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-06-08 18:45:40 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-08 18:45:45 +0000
commit81c83a7db4e524b19d33bf7c8a9b537b9d606c93 (patch)
treef559fd5a39c5bae48bc6b92f53f319689318e13d /src/codec
parent7c14d274ee6d0e4852aae1ba34873656fdd76ef1 (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.cpp32
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) {