Index: src/codec/SkWebpCodec.cpp |
diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp |
index 0c3aa402bd70bfd2659b01d8468d4cfa252be82a..e8b27b2178fa98b76fa7afd6cf629e1366171632 100644 |
--- a/src/codec/SkWebpCodec.cpp |
+++ b/src/codec/SkWebpCodec.cpp |
@@ -144,25 +144,6 @@ SkCodec* SkWebpCodec::NewFromStream(SkStream* stream) { |
streamDeleter.release(), demux.release(), std::move(data)); |
} |
-static bool webp_conversion_possible(const SkImageInfo& dst, const SkImageInfo& src, |
- SkColorSpaceXform* colorXform) { |
- if (!valid_alpha(dst.alphaType(), src.alphaType())) { |
- return false; |
- } |
- |
- switch (dst.colorType()) { |
- case kRGBA_F16_SkColorType: |
- return nullptr != colorXform; |
- case kBGRA_8888_SkColorType: |
- case kRGBA_8888_SkColorType: |
- return true; |
- case kRGB_565_SkColorType: |
- return nullptr == colorXform && src.alphaType() == kOpaque_SkAlphaType; |
- default: |
- return false; |
- } |
-} |
- |
SkISize SkWebpCodec::onGetScaledDimensions(float desiredScale) const { |
SkISize dim = this->getInfo().dimensions(); |
// SkCodec treats zero dimensional images as errors, so the minimum size |
@@ -212,15 +193,15 @@ bool SkWebpCodec::onGetValidSubset(SkIRect* desiredSubset) const { |
SkCodec::Result SkWebpCodec::onGetPixels(const SkImageInfo& dstInfo, void* dst, size_t rowBytes, |
const Options& options, SkPMColor*, int*, |
int* rowsDecodedPtr) { |
+ if (!conversion_possible(dstInfo, this->getInfo())) { |
+ return kInvalidConversion; |
+ } |
std::unique_ptr<SkColorSpaceXform> colorXform = nullptr; |
if (needs_color_xform(dstInfo, this->getInfo())) { |
colorXform = SkColorSpaceXform::New(sk_ref_sp(this->getInfo().colorSpace()), |
sk_ref_sp(dstInfo.colorSpace())); |
- } |
- |
- if (!webp_conversion_possible(dstInfo, this->getInfo(), colorXform.get())) { |
- return kInvalidConversion; |
+ SkASSERT(colorXform); |
} |
WebPDecoderConfig config; |