| Index: third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| index 1411c494248a4a21170f245dc5e8aaa5899035ae..e4a18a6741ef49be0291dc4a4e47e624a1e9bfb2 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| @@ -228,6 +228,8 @@ void DeferredImageDecoder::activateLazyDecoding()
|
|
|
| const bool isSingleFrame = m_actualDecoder->repetitionCount() == cAnimationNone || (m_allDataReceived && m_actualDecoder->frameCount() == 1u);
|
| m_frameGenerator = ImageFrameGenerator::create(SkISize::Make(m_actualDecoder->decodedSize().width(), m_actualDecoder->decodedSize().height()), m_data, m_allDataReceived, !isSingleFrame);
|
| + // GIF images support Index8 decoding: other decoders do not.
|
| + m_frameGenerator->setDecoderCanDecodeToIndex8(m_filenameExtension == "gif");
|
| }
|
|
|
| void DeferredImageDecoder::prepareLazyDecodedFrames()
|
| @@ -268,7 +270,7 @@ void DeferredImageDecoder::prepareLazyDecodedFrames()
|
| }
|
| }
|
|
|
| -inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownToBeOpaque)
|
| +static inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, bool knownToBeOpaque)
|
| {
|
| return SkImageInfo::MakeN32(decodedSize.width(), decodedSize.height(), knownToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType);
|
| }
|
| @@ -279,8 +281,13 @@ PassRefPtr<SkImage> DeferredImageDecoder::createFrameImageAtIndex(size_t index,
|
| ASSERT(decodedSize.width() > 0);
|
| ASSERT(decodedSize.height() > 0);
|
|
|
| - DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), index);
|
| - RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator)); // SkImage takes ownership of the generator.
|
| + const SkImageInfo info = m_frameGenerator->canDecodeTo(index, kIndex_8_SkColorType)
|
| + ? SkImageInfo::Make(decodedSize.width(), decodedSize.height(), kIndex_8_SkColorType,
|
| + knownToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType)
|
| + : imageInfoFrom(decodedSize, knownToBeOpaque);
|
| +
|
| + DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, info, index);
|
| + RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator));
|
| if (!image)
|
| return nullptr;
|
|
|
|
|