Fix double CMYK->RGBA conversion on swizzled jpeg decodes
BUG=skia:
Change-Id: I4e8c4128f974cc491fcef0bbc1137b5d62b6f967
Reviewed-on: https://skia-review.googlesource.com/5933
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
diff --git a/src/codec/SkJpegCodec.cpp b/src/codec/SkJpegCodec.cpp
index ad5ce58..8c2f5dc 100644
--- a/src/codec/SkJpegCodec.cpp
+++ b/src/codec/SkJpegCodec.cpp
@@ -626,12 +626,14 @@
}
void SkJpegCodec::initializeSwizzler(const SkImageInfo& dstInfo, const Options& options) {
- // libjpeg-turbo may have already performed color conversion. We must indicate the
- // appropriate format to the swizzler.
+ // libjpeg-turbo will handle format conversion from YUV to RGBA, BGRA, or 565. fColorXform
+ // will handle format conversion from CMYK. We only need the swizzler to perform format
+ // conversion when we have a CMYK image without a fColorXform.
+ bool skipFormatConversion = this->colorXform() ||
+ (JCS_CMYK != fDecoderMgr->dinfo()->out_color_space);
+
SkEncodedInfo swizzlerInfo = this->getEncodedInfo();
- bool preSwizzled = true;
- if (JCS_CMYK == fDecoderMgr->dinfo()->out_color_space) {
- preSwizzled = false;
+ if (!skipFormatConversion) {
swizzlerInfo = SkEncodedInfo::Make(SkEncodedInfo::kInvertedCMYK_Color,
swizzlerInfo.alpha(),
swizzlerInfo.bitsPerComponent());
@@ -647,7 +649,7 @@
swizzlerOptions.fSubset = &fSwizzlerSubset;
}
fSwizzler.reset(SkSwizzler::CreateSwizzler(swizzlerInfo, nullptr, dstInfo, swizzlerOptions,
- nullptr, preSwizzled));
+ nullptr, skipFormatConversion));
SkASSERT(fSwizzler);
}