Index: third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp |
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp |
index 099c7fc42ed311ed31e29be646decb453ef1bc42..4268c65c69825d0d3c1782ca2ac349655a191b7b 100644 |
--- a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp |
@@ -160,12 +160,11 @@ bool ImageFrameGenerator::decodeToYUV(SegmentReader* data, size_t index, const S |
return false; |
} |
- std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(ImageDecoder::determineImageType(*data), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied); |
+ std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(data, true, |
+ ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied); |
// getYUVComponentSizes was already called and was successful, so ImageDecoder::create must succeed. |
ASSERT(decoder); |
- decoder->setData(data, true); |
- |
std::unique_ptr<ImagePlanes> imagePlanes = wrapUnique(new ImagePlanes(planes, rowBytes)); |
decoder->setImagePlanes(std::move(imagePlanes)); |
@@ -261,13 +260,16 @@ bool ImageFrameGenerator::decode(SegmentReader* data, bool allDataReceived, size |
// Try to create an ImageDecoder if we are not given one. |
ASSERT(decoder); |
bool newDecoder = false; |
+ bool newNonFactoryDecoder = false; |
Peter Kasting
2016/08/19 23:04:58
Nit: This is only checked in a negation below, so
f(malita)
2016/08/22 01:51:15
Done.
|
if (!*decoder) { |
newDecoder = true; |
if (m_imageDecoderFactory) |
*decoder = m_imageDecoderFactory->create().release(); |
- if (!*decoder) |
- *decoder = ImageDecoder::create(ImageDecoder::determineImageType(*data), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied).release(); |
+ if (!*decoder) { |
+ newNonFactoryDecoder = true; |
+ *decoder = ImageDecoder::create(data, allDataReceived, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied).release(); |
+ } |
if (!*decoder) |
return false; |
@@ -280,7 +282,9 @@ bool ImageFrameGenerator::decode(SegmentReader* data, bool allDataReceived, size |
(*decoder)->setMemoryAllocator(allocator); |
} |
- (*decoder)->setData(data, allDataReceived); |
+ // If we just created a non-factory decoder, it already grabbed the data. No need to reset. |
+ if (!newNonFactoryDecoder) |
+ (*decoder)->setData(data, allDataReceived); |
ImageFrame* frame = (*decoder)->frameBufferAtIndex(index); |
// For multi-frame image decoders, we need to know how many frames are |
@@ -327,12 +331,12 @@ bool ImageFrameGenerator::getYUVComponentSizes(SegmentReader* data, SkYUVSizeInf |
if (m_yuvDecodingFailed) |
return false; |
- std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(ImageDecoder::determineImageType(*data), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied); |
+ std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(data, true, |
+ ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied); |
if (!decoder) |
return false; |
// Setting a dummy ImagePlanes object signals to the decoder that we want to do YUV decoding. |
- decoder->setData(data, true); |
std::unique_ptr<ImagePlanes> dummyImagePlanes = wrapUnique(new ImagePlanes); |
decoder->setImagePlanes(std::move(dummyImagePlanes)); |