Chromium Code Reviews| Index: third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
| diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
| index b954a982e6fbc2decfe0c22117ab6573de011dc8..7c4305033ab347c78c63b46e8becce3bcc7c478e 100644 |
| --- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
| +++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp |
| @@ -159,7 +159,6 @@ bool GIFImageDecoder::HaveDecodedRow(size_t frame_index, |
| *current_address = color_table_iter[source_value]; |
| } else { |
| *current_address = 0; |
| - current_buffer_saw_alpha_ = true; |
| } |
| } |
| } else { |
| @@ -168,8 +167,6 @@ bool GIFImageDecoder::HaveDecodedRow(size_t frame_index, |
| if ((source_value != transparent_pixel) && |
| (source_value < color_table.size())) |
| *current_address = color_table_iter[source_value]; |
| - else |
| - current_buffer_saw_alpha_ = true; |
| } |
| } |
| @@ -191,10 +188,18 @@ bool GIFImageDecoder::FrameComplete(size_t frame_index) { |
| if (!InitFrameBuffer(frame_index)) |
| return SetFailed(); |
| - if (!current_buffer_saw_alpha_) |
| - CorrectAlphaWhenFrameBufferSawNoAlpha(frame_index); |
| + ImageFrame& buffer = frame_buffer_cache_[frame_index]; |
| + |
| + const GIFFrameContext* frame_context = reader_->FrameContext(frame_index); |
| + const size_t transparent_pixel = frame_context->TransparentPixel(); |
| + const GIFColorMap::Table& color_table = |
| + frame_context->LocalColorMap().IsDefined() |
| + ? frame_context->LocalColorMap().GetTable() |
| + : reader_->GlobalColorMap().GetTable(); |
| + buffer.SetHasAlpha(transparent_pixel != kNotFound && |
|
scroggo_chromium
2017/05/30 19:45:17
The first check is redundant - kNotFound is max si
cblume
2017/05/30 23:47:13
Done.
|
| + transparent_pixel <= color_table.size()); |
| - frame_buffer_cache_[frame_index].SetStatus(ImageFrame::kFrameComplete); |
| + buffer.SetStatus(ImageFrame::kFrameComplete); |
| return true; |
| } |
| @@ -269,10 +274,6 @@ void GIFImageDecoder::Parse(GIFParseQuery query) { |
| SetFailed(); |
| } |
| -void GIFImageDecoder::OnInitFrameBuffer(size_t frame_index) { |
| - current_buffer_saw_alpha_ = false; |
| -} |
| - |
| bool GIFImageDecoder::CanReusePreviousFrameBuffer(size_t frame_index) const { |
| DCHECK(frame_index < frame_buffer_cache_.size()); |
| return frame_buffer_cache_[frame_index].GetDisposalMethod() != |