Chromium Code Reviews| Index: src/codec/SkJpegCodec.cpp |
| diff --git a/src/codec/SkJpegCodec.cpp b/src/codec/SkJpegCodec.cpp |
| index 04136171fa6fc8df309de88fc5c416acb6344e37..5ae4be9c5d6775bac98afe71c2e906acc5aeb2f3 100644 |
| --- a/src/codec/SkJpegCodec.cpp |
| +++ b/src/codec/SkJpegCodec.cpp |
| @@ -177,19 +177,19 @@ SkISize SkJpegCodec::onGetScaledDimensions(float desiredScale) const { |
| // support these as well |
| unsigned int num; |
| unsigned int denom = 8; |
| - if (desiredScale > 0.875f) { |
| + if (desiredScale >= 0.9375) { |
| num = 8; |
| - } else if (desiredScale > 0.75f) { |
| + } else if (desiredScale >= 0.8125) { |
| num = 7; |
| - } else if (desiredScale > 0.625f) { |
| + } else if (desiredScale >= 0.6875f) { |
| num = 6; |
| - } else if (desiredScale > 0.5f) { |
| + } else if (desiredScale >= 0.5625f) { |
| num = 5; |
| - } else if (desiredScale > 0.375f) { |
| + } else if (desiredScale >= 0.4375f) { |
| num = 4; |
| - } else if (desiredScale > 0.25f) { |
| + } else if (desiredScale >= 0.3125f) { |
| num = 3; |
| - } else if (desiredScale > 0.125f) { |
| + } else if (desiredScale >= 0.1875f) { |
| num = 2; |
| } else { |
| num = 1; |
| @@ -406,8 +406,7 @@ SkSampler* SkJpegCodec::getSampler(bool createIfNecessary) { |
| SkASSERT(false); |
| } |
| - fSwizzler.reset(SkSwizzler::CreateSwizzler(srcConfig, nullptr, info, |
| - this->options().fZeroInitialized)); |
| + fSwizzler.reset(SkSwizzler::CreateSwizzler(srcConfig, nullptr, info, this->options())); |
| if (!fSwizzler) { |
| return nullptr; |
| } |
| @@ -441,6 +440,11 @@ SkCodec::Result SkJpegCodec::onStartScanlineDecode(const SkImageInfo& dstInfo, |
| return kInvalidInput; |
| } |
| + // We will need a sampler if we are performing a subset decode |
| + if (options.fSubset) { |
| + this->getSampler(true); |
|
scroggo
2015/10/08 20:16:08
As mentioned elsewhere, you don't need to have the
msarett
2015/10/09 20:03:44
Yes, there is a better way to do this.
|
| + } |
| + |
| return kSuccess; |
| } |
| @@ -452,7 +456,7 @@ int SkJpegCodec::onGetScanlines(void* dst, int count, size_t rowBytes) { |
| // Read rows one at a time |
| JSAMPLE* dstRow; |
| if (fSwizzler) { |
| - // write data to storage row, then sample using swizzler |
| + // write data to storage row, then sample using swizzler |
| dstRow = fSrcRow; |
| } else { |
| // write data directly to dst |