| 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..ffb0daf7326dd4142480950dca6d3121403bca5a 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,17 @@ 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 shouldCallSetData = true;
|
| 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) {
|
| + *decoder = ImageDecoder::create(data, allDataReceived, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied).release();
|
| + // The newly created decoder just grabbed the data. No need to reset it.
|
| + shouldCallSetData = false;
|
| + }
|
|
|
| if (!*decoder)
|
| return false;
|
| @@ -280,7 +283,8 @@ bool ImageFrameGenerator::decode(SegmentReader* data, bool allDataReceived, size
|
| (*decoder)->setMemoryAllocator(allocator);
|
| }
|
|
|
| - (*decoder)->setData(data, allDataReceived);
|
| + if (shouldCallSetData)
|
| + (*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));
|
|
|
|
|