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 |