Revert "Do not return Index8 from SkAndroidCodec::computeOutputColorType"

This reverts commit b6f4767294.

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>
This commit is contained in:
Matt Sarett 2017-06-08 18:45:40 +00:00 committed by Skia Commit-Bot
parent 7c14d274ee
commit 81c83a7db4
2 changed files with 29 additions and 7 deletions

View File

@ -173,9 +173,6 @@ Error BRDSrc::draw(SkCanvas* canvas) const {
return "Cannot decode (full) region.";
}
alpha8_to_gray8(&bitmap);
// Verify that we no longer support kIndex8 from this API.
SkASSERT(kIndex_8_SkColorType != bitmap.colorType());
canvas->drawBitmap(bitmap, 0, 0);
return "";
}
@ -232,7 +229,6 @@ Error BRDSrc::draw(SkCanvas* canvas) const {
}
alpha8_to_gray8(&bitmap);
SkASSERT(kIndex_8_SkColorType != bitmap.colorType());
canvas->drawBitmapRect(bitmap,
SkRect::MakeXYWH((SkScalar) scaledBorder, (SkScalar) scaledBorder,
(SkScalar) (subsetWidth / fSampleSize),

View File

@ -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) {