Index: third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp |
index a1adcce004f065ad73110d3e77733144419bfd66..d5df02e290b1b8b1e23776e92ac7597c3db66f2e 100644 |
--- a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp |
@@ -71,14 +71,15 @@ bool DecodingImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, |
if (info.width() != getInfo().width() || info.height() != getInfo().height()) |
return false; |
- if (info.colorType() != getInfo().colorType()) { |
+ // if colorType declared in getInfo() fails, Skia would fetch N32 version |
+ if (info.colorType() != getInfo().colorType() && info.colorType() != kN32_SkColorType) { |
// ImageFrame may have changed the owning SkBitmap to kOpaque_SkAlphaType after sniffing the encoded data, so if we see a request |
// for opaque, that is ok even if our initial alphatype was not opaque. |
return false; |
} |
PlatformInstrumentation::willDecodeLazyPixelRef(m_generationId); |
- bool decoded = m_frameGenerator->decodeAndScale(getInfo(), m_frameIndex, pixels, rowBytes); |
+ bool decoded = m_frameGenerator->decodeAndScale(info, m_frameIndex, pixels, rowBytes, ctable, ctableCount); |
PlatformInstrumentation::didDecodeLazyPixelRef(); |
return decoded; |
@@ -116,7 +117,9 @@ SkImageGenerator* DecodingImageGenerator::create(SkData* data) |
return 0; |
const IntSize size = decoder->size(); |
- const SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); |
+ const SkImageInfo info = decoder->canDecodeTo(0, ImageFrame::Index8) |
+ ? SkImageInfo::Make(size.width(), size.height(), kIndex_8_SkColorType, kPremul_SkAlphaType) |
+ : SkImageInfo::MakeN32Premul(size.width(), size.height()); |
RefPtr<ImageFrameGenerator> frame = ImageFrameGenerator::create(SkISize::Make(size.width(), size.height()), buffer, true, false); |
if (!frame) |