| Index: src/codec/SkAndroidCodec.cpp
|
| diff --git a/src/codec/SkAndroidCodec.cpp b/src/codec/SkAndroidCodec.cpp
|
| index 43ed90f6c0be67cea075f4c23f578065afae1b5e..086caf2d8129f30e00de197802e2358ff24a2a99 100644
|
| --- a/src/codec/SkAndroidCodec.cpp
|
| +++ b/src/codec/SkAndroidCodec.cpp
|
| @@ -53,6 +53,11 @@ SkISize SkAndroidCodec::getSampledDimensions(int sampleSize) const {
|
| return SkISize::Make(0, 0);
|
| }
|
|
|
| + // Fast path for when we are not scaling.
|
| + if (1 == sampleSize) {
|
| + return fInfo.dimensions();
|
| + }
|
| +
|
| return this->onGetSampledDimensions(sampleSize);
|
| }
|
|
|
| @@ -77,9 +82,9 @@ SkISize SkAndroidCodec::getSampledSubsetDimensions(int sampleSize, const SkIRect
|
| return SkISize::Make(0, 0);
|
| }
|
|
|
| - // If the subset is the entire image, for consistency, use onGetSampledDimensions().
|
| + // If the subset is the entire image, for consistency, use getSampledDimensions().
|
| if (fInfo.dimensions() == subset.size()) {
|
| - return onGetSampledDimensions(sampleSize);
|
| + return this->getSampledDimensions(sampleSize);
|
| }
|
|
|
| // This should perhaps call a virtual function, but currently both of our subclasses
|
| @@ -104,6 +109,15 @@ SkCodec::Result SkAndroidCodec::getAndroidPixels(const SkImageInfo& info, void*
|
| if (!is_valid_subset(*options->fSubset, fInfo.dimensions())) {
|
| return SkCodec::kInvalidParameters;
|
| }
|
| +
|
| + if (SkIRect::MakeSize(fInfo.dimensions()) == *options->fSubset) {
|
| + // The caller wants the whole thing, rather than a subset. Modify
|
| + // the AndroidOptions passed to onGetAndroidPixels to not specify
|
| + // a subset.
|
| + defaultOptions = *options;
|
| + defaultOptions.fSubset = nullptr;
|
| + options = &defaultOptions;
|
| + }
|
| }
|
|
|
| return this->onGetAndroidPixels(info, pixels, rowBytes, *options);
|
|
|