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. SkEncodedInfo swizzlerInfo = this->getEncodedInfo(); bool preSwizzled = true; switch (fDecoderMgr->dinfo()->out_color_space) { case JCS_RGB: preSwizzled = false; swizzlerInfo = SkEncodedInfo::Make(SkEncodedInfo::kRGB_Color, swizzlerInfo.alpha(), swizzlerInfo.bitsPerComponent()); break; case JCS_CMYK: preSwizzled = false; swizzlerInfo = SkEncodedInfo::Make(SkEncodedInfo::kInvertedCMYK_Color, swizzlerInfo.alpha(), swizzlerInfo.bitsPerComponent()); break; default: break; } Options swizzlerOptions = options; if (options.fSubset) { // Use fSwizzlerSubset if this is a subset decode. This is necessary in the case // where libjpeg-turbo provides a subset and then we need to subset it further. // Also, verify that fSwizzlerSubset is initialized and valid. SkASSERT(!fSwizzlerSubset.isEmpty() && fSwizzlerSubset.x() <= options.fSubset->x() && fSwizzlerSubset.width() == options.fSubset->width()); swizzlerOptions.fSubset = &fSwizzlerSubset; } fSwizzler.reset(SkSwizzler::CreateSwizzler(swizzlerInfo, nullptr, dstInfo, swizzlerOptions, nullptr, preSwizzled)); SkASSERT(fSwizzler); }