| 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 e5a1c88f4df1115947612dde313db1ccba1d5f38..960d5e02be9d121765d633d53abe90b32cf7a90e 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
|
| @@ -26,6 +26,7 @@
|
| #include "config.h"
|
| #include "platform/graphics/DeferredImageDecoder.h"
|
|
|
| +#include "platform/RuntimeEnabledFeatures.h"
|
| #include "platform/graphics/DecodingImageGenerator.h"
|
| #include "platform/graphics/FrameData.h"
|
| #include "platform/graphics/ImageDecodingStore.h"
|
| @@ -58,6 +59,7 @@ DeferredImageDecoder::DeferredImageDecoder(PassOwnPtr<ImageDecoder> actualDecode
|
| , m_actualDecoder(actualDecoder)
|
| , m_repetitionCount(cAnimationNone)
|
| , m_hasColorProfile(false)
|
| + , m_canYUVDecode(false)
|
| {
|
| }
|
|
|
| @@ -214,9 +216,13 @@ void DeferredImageDecoder::activateLazyDecoding()
|
| {
|
| if (m_frameGenerator)
|
| return;
|
| +
|
| m_size = m_actualDecoder->size();
|
| m_filenameExtension = m_actualDecoder->filenameExtension();
|
| + // JPEG images support YUV decoding: other decoders do not, WEBP could in future.
|
| + m_canYUVDecode = RuntimeEnabledFeatures::decodeToYUVEnabled() && (m_filenameExtension == "jpg");
|
| m_hasColorProfile = m_actualDecoder->hasColorProfile();
|
| +
|
| 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);
|
| }
|
| @@ -271,11 +277,13 @@ PassRefPtr<SkImage> DeferredImageDecoder::createFrameImageAtIndex(size_t index,
|
| ASSERT(decodedSize.height() > 0);
|
|
|
| DecodingImageGenerator* generator = new DecodingImageGenerator(m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), index);
|
| - RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator));
|
| + RefPtr<SkImage> image = adoptRef(SkImage::NewFromGenerator(generator)); // SkImage takes ownership of the generator.
|
| if (!image)
|
| return nullptr;
|
|
|
| generator->setGenerationId(image->uniqueID());
|
| + generator->setCanYUVDecode(m_canYUVDecode);
|
| +
|
| return image.release();
|
| }
|
|
|
|
|