Index: src/codec/SkPngCodec.cpp |
diff --git a/src/codec/SkPngCodec.cpp b/src/codec/SkPngCodec.cpp |
index 1e633eaaed3b76b5e9aae380e8a1605b498d84cf..04c88212035664d4e5d15f93d534f98a0faf3467 100644 |
--- a/src/codec/SkPngCodec.cpp |
+++ b/src/codec/SkPngCodec.cpp |
@@ -267,12 +267,11 @@ |
// If we are not decoding to F16, we can color xform now and store the results |
// in the color table. |
if (fColorXform && kRGBA_F16_SkColorType != dstInfo.colorType()) { |
- SkColorSpaceXform::ColorFormat xformColorFormat = is_rgba(dstInfo.colorType()) ? |
- SkColorSpaceXform::kRGBA_8888_ColorFormat : |
- SkColorSpaceXform::kBGRA_8888_ColorFormat; |
- SkAlphaType xformAlphaType = select_xform_alpha(dstInfo.alphaType(), |
+ SkColorType xformColorType = is_rgba(dstInfo.colorType()) ? |
+ kRGBA_8888_SkColorType : kBGRA_8888_SkColorType; |
+ SkAlphaType xformAlphaType = select_alpha_xform(dstInfo.alphaType(), |
this->getInfo().alphaType()); |
- fColorXform->apply(colorTable, colorTable, numColors, xformColorFormat, xformAlphaType); |
+ fColorXform->apply(colorTable, colorTable, numColors, xformColorType, xformAlphaType); |
} |
// Pad the color table with the last color in the table (or black) in the case that |
@@ -493,18 +492,17 @@ |
} |
void SkPngCodec::applyXformRow(void* dst, const void* src) { |
+ const SkColorType colorType = this->dstInfo().colorType(); |
switch (fXformMode) { |
case kSwizzleOnly_XformMode: |
fSwizzler->swizzle(dst, (const uint8_t*) src); |
break; |
case kColorOnly_XformMode: |
- fColorXform->apply(dst, (const uint32_t*) src, fXformWidth, fXformColorFormat, |
- fXformAlphaType); |
+ fColorXform->apply(dst, (const uint32_t*) src, fXformWidth, colorType, fXformAlphaType); |
break; |
case kSwizzleColor_XformMode: |
fSwizzler->swizzle(fColorXformSrcRow, (const uint8_t*) src); |
- fColorXform->apply(dst, fColorXformSrcRow, fXformWidth, fXformColorFormat, |
- fXformAlphaType); |
+ fColorXform->apply(dst, fColorXformSrcRow, fXformWidth, colorType, fXformAlphaType); |
break; |
} |
} |
@@ -1139,23 +1137,9 @@ |
return true; |
} |
-void SkPngCodec::initializeXformParams() { |
- switch (fXformMode) { |
- case kColorOnly_XformMode: |
- fXformColorFormat = select_xform_format(this->dstInfo().colorType()); |
- fXformAlphaType = select_xform_alpha(this->dstInfo().alphaType(), |
- this->getInfo().alphaType()); |
- fXformWidth = this->dstInfo().width(); |
- break; |
- case kSwizzleColor_XformMode: |
- fXformColorFormat = select_xform_format(this->dstInfo().colorType()); |
- fXformAlphaType = select_xform_alpha(this->dstInfo().alphaType(), |
- this->getInfo().alphaType()); |
- fXformWidth = this->swizzler()->swizzleWidth(); |
- break; |
- default: |
- break; |
- } |
+void SkPngCodec::initializeXformAlphaAndWidth() { |
+ fXformAlphaType = select_alpha_xform(this->dstInfo().alphaType(), this->getInfo().alphaType()); |
+ fXformWidth = this->swizzler() ? this->swizzler()->swizzleWidth() : this->dstInfo().width(); |
} |
static inline bool apply_xform_on_decode(SkColorType dstColorType, SkEncodedInfo::Color srcColor) { |
@@ -1242,7 +1226,7 @@ |
} |
this->allocateStorage(dstInfo); |
- this->initializeXformParams(); |
+ this->initializeXformAlphaAndWidth(); |
return this->decodeAllRows(dst, rowBytes, rowsDecoded); |
} |
@@ -1277,7 +1261,7 @@ |
SkCodec::Result SkPngCodec::onIncrementalDecode(int* rowsDecoded) { |
// FIXME: Only necessary on the first call. |
- this->initializeXformParams(); |
+ this->initializeXformAlphaAndWidth(); |
return this->decode(rowsDecoded); |
} |
@@ -1285,7 +1269,7 @@ |
uint64_t SkPngCodec::onGetFillValue(const SkImageInfo& dstInfo) const { |
const SkPMColor* colorPtr = get_color_ptr(fColorTable.get()); |
if (colorPtr) { |
- SkAlphaType alphaType = select_xform_alpha(dstInfo.alphaType(), |
+ SkAlphaType alphaType = select_alpha_xform(dstInfo.alphaType(), |
this->getInfo().alphaType()); |
return get_color_table_fill_value(dstInfo.colorType(), alphaType, colorPtr, 0, |
fColorXform.get()); |