| 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..de91b558ba91bdc9d57d62dd89d0b17578500fd5 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)
|
| @@ -125,5 +128,14 @@ SkImageGenerator* DecodingImageGenerator::create(SkData* data)
|
| return new DecodingImageGenerator(frame, info, 0);
|
| }
|
|
|
| +SkColorType DecodingImageGenerator::onGetColorType()
|
| +{
|
| + // GIFDecoder: generator info is Index8 when constructed. but after downloading data this could
|
| + // change - it could turn out that some frames can be decoded only to N32.
|
| + if (m_frameGenerator->canDecodeTo(m_frameIndex, kIndex_8_SkColorType))
|
| + return kIndex_8_SkColorType;
|
| + return kN32_SkColorType;
|
| +}
|
| +
|
| } // namespace blink
|
|
|
|
|