Chromium Code Reviews| 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)); |