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 c791aa4197a8ce6fff89446fc06da839a49c9a1e..847c246d3f240bc0caca62f0ffca1762fe48ee6d 100644 |
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp |
@@ -90,7 +90,6 @@ DeferredImageDecoder::DeferredImageDecoder( |
: m_allDataReceived(false), |
m_actualDecoder(std::move(actualDecoder)), |
m_repetitionCount(cAnimationNone), |
- m_hasColorSpace(false), |
m_canYUVDecode(false), |
m_hasHotSpot(false) {} |
@@ -179,8 +178,9 @@ bool DeferredImageDecoder::isSizeAvailable() { |
return m_actualDecoder ? m_actualDecoder->isSizeAvailable() : true; |
} |
-bool DeferredImageDecoder::hasColorSpace() const { |
- return m_actualDecoder ? m_actualDecoder->hasColorSpace() : m_hasColorSpace; |
+bool DeferredImageDecoder::hasEmbeddedColorSpace() const { |
+ return m_actualDecoder ? m_actualDecoder->hasEmbeddedColorSpace() |
+ : m_hasEmbeddedColorSpace; |
} |
IntSize DeferredImageDecoder::size() const { |
@@ -266,7 +266,7 @@ void DeferredImageDecoder::activateLazyDecoding() { |
// future.) |
m_canYUVDecode = RuntimeEnabledFeatures::decodeToYUVEnabled() && |
(m_filenameExtension == "jpg"); |
- m_hasColorSpace = m_actualDecoder->hasColorSpace(); |
+ m_hasEmbeddedColorSpace = m_actualDecoder->hasEmbeddedColorSpace(); |
const bool isSingleFrame = |
m_actualDecoder->repetitionCount() == cAnimationNone || |
@@ -274,7 +274,8 @@ void DeferredImageDecoder::activateLazyDecoding() { |
const SkISize decodedSize = |
SkISize::Make(m_actualDecoder->decodedSize().width(), |
m_actualDecoder->decodedSize().height()); |
- m_frameGenerator = ImageFrameGenerator::create(decodedSize, !isSingleFrame); |
+ m_frameGenerator = ImageFrameGenerator::create( |
+ decodedSize, m_actualDecoder->colorSpace(), !isSingleFrame); |
} |
void DeferredImageDecoder::prepareLazyDecodedFrames() { |
@@ -311,13 +312,6 @@ void DeferredImageDecoder::prepareLazyDecodedFrames() { |
} |
} |
-inline SkImageInfo imageInfoFrom(const SkISize& decodedSize, |
- bool knownToBeOpaque) { |
- return SkImageInfo::MakeN32( |
- decodedSize.width(), decodedSize.height(), |
- knownToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); |
-} |
- |
sk_sp<SkImage> DeferredImageDecoder::createFrameImageAtIndex( |
size_t index, |
bool knownToBeOpaque) { |
@@ -328,9 +322,14 @@ sk_sp<SkImage> DeferredImageDecoder::createFrameImageAtIndex( |
sk_sp<SkROBuffer> roBuffer(m_rwBuffer->newRBufferSnapshot()); |
RefPtr<SegmentReader> segmentReader = |
SegmentReader::createFromSkROBuffer(std::move(roBuffer)); |
+ |
+ SkImageInfo info = SkImageInfo::MakeN32( |
+ decodedSize.width(), decodedSize.height(), |
+ knownToBeOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType, |
+ m_frameGenerator->getColorSpace()); |
+ |
DecodingImageGenerator* generator = new DecodingImageGenerator( |
- m_frameGenerator, imageInfoFrom(decodedSize, knownToBeOpaque), |
- segmentReader.release(), m_allDataReceived, index, |
+ m_frameGenerator, info, segmentReader.release(), m_allDataReceived, index, |
m_frameData[index].m_uniqueID); |
sk_sp<SkImage> image = SkImage::MakeFromGenerator( |
generator); // SkImage takes ownership of the generator. |