Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Unified Diff: src/codec/SkJpegCodec.cpp

Issue 1911613002: Use SkEncodedInfo in place of SkSwizzler::SrcConfig (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Remove bytesPerPixel() from public API Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/codec/SkJpegCodec.cpp
diff --git a/src/codec/SkJpegCodec.cpp b/src/codec/SkJpegCodec.cpp
index 88b7fcbde1b17c8c97209663e18f5b7b86dbec1c..fb422cdd437bc47b444212784160ef1dc44e57f3 100644
--- a/src/codec/SkJpegCodec.cpp
+++ b/src/codec/SkJpegCodec.cpp
@@ -510,30 +510,35 @@ SkCodec::Result SkJpegCodec::onGetPixels(const SkImageInfo& dstInfo,
}
void SkJpegCodec::initializeSwizzler(const SkImageInfo& dstInfo, const Options& options) {
- SkSwizzler::SrcConfig srcConfig = SkSwizzler::kUnknown;
- if (JCS_CMYK == fDecoderMgr->dinfo()->out_color_space) {
- srcConfig = SkSwizzler::kCMYK;
- } else {
- // If the out_color_space is not CMYK, the only reason we would need a swizzler is
- // for sampling and/or subsetting.
- switch (dstInfo.colorType()) {
- case kGray_8_SkColorType:
- srcConfig = SkSwizzler::kNoOp8;
- break;
- case kN32_SkColorType:
- srcConfig = SkSwizzler::kNoOp32;
- break;
- case kRGB_565_SkColorType:
- srcConfig = SkSwizzler::kNoOp16;
- break;
- default:
- // This function should only be called if the colorType is supported by jpeg
- SkASSERT(false);
- }
- }
-
- if (JCS_RGB == fDecoderMgr->dinfo()->out_color_space) {
- srcConfig = SkSwizzler::kRGB;
+ // libjpeg-turbo may have already performed color conversion. In this
+ // case, we must indicate to the swizzler the appropriate encoded format.
+ SkEncodedInfo encodedInfo;
+ switch (fDecoderMgr->dinfo()->out_color_space) {
+ case JCS_GRAYSCALE:
+ encodedInfo = this->getEncodedInfo().makeColor(SkEncodedInfo::kGray_Color);
+ break;
+ case JCS_RGB:
+ encodedInfo = this->getEncodedInfo().makeColor(SkEncodedInfo::kRGB_Color);
+ break;
+#ifdef LIBJPEG_TURBO_VERSION
+ case JCS_EXT_RGBA:
+ encodedInfo = this->getEncodedInfo().makeColor(SkEncodedInfo::kRGBA_Color);
+ break;
+ case JCS_EXT_BGRA:
+ encodedInfo = this->getEncodedInfo().makeColor(SkEncodedInfo::kBGRA_Color);
+ break;
+#endif
+ case JCS_CMYK:
+ encodedInfo = this->getEncodedInfo().makeColor(SkEncodedInfo::kInvertedCMYK_Color);
+ break;
+#ifdef TURBO_HAS_565
+ case JCS_RGB565:
+ encodedInfo = this->getEncodedInfo().makeColor(SkEncodedInfo::kUnknown_Color);
scroggo 2016/04/21 15:09:11 If you don't add a new color type for this, I thin
msarett 2016/04/21 16:03:41 Using kPreSwizzled.
+ break;
+#endif
+ default:
+ SkASSERT(false);
+ break;
}
Options swizzlerOptions = options;
@@ -545,7 +550,7 @@ void SkJpegCodec::initializeSwizzler(const SkImageInfo& dstInfo, const Options&
fSwizzlerSubset.width() == options.fSubset->width());
swizzlerOptions.fSubset = &fSwizzlerSubset;
}
- fSwizzler.reset(SkSwizzler::CreateSwizzler(srcConfig, nullptr, dstInfo, swizzlerOptions));
+ fSwizzler.reset(SkSwizzler::CreateSwizzler(encodedInfo, nullptr, dstInfo, swizzlerOptions));
SkASSERT(fSwizzler);
fStorage.reset(get_row_bytes(fDecoderMgr->dinfo()));
fSrcRow = fStorage.get();

Powered by Google App Engine
This is Rietveld 408576698