OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
159 void WEBPImageDecoder::onSetData(SegmentReader*) | 159 void WEBPImageDecoder::onSetData(SegmentReader*) |
160 { | 160 { |
161 m_haveAlreadyParsedThisData = false; | 161 m_haveAlreadyParsedThisData = false; |
162 } | 162 } |
163 | 163 |
164 int WEBPImageDecoder::repetitionCount() const | 164 int WEBPImageDecoder::repetitionCount() const |
165 { | 165 { |
166 return failed() ? cAnimationLoopOnce : m_repetitionCount; | 166 return failed() ? cAnimationLoopOnce : m_repetitionCount; |
167 } | 167 } |
168 | 168 |
169 bool WEBPImageDecoder::frameIsCompleteAtIndex(size_t index) const | 169 bool WEBPImageDecoder::frameIsFullyReceivedAtIndex(size_t index) const |
170 { | 170 { |
171 if (!m_demux || m_demuxState <= WEBP_DEMUX_PARSING_HEADER) | 171 if (!m_demux || m_demuxState <= WEBP_DEMUX_PARSING_HEADER) |
172 return false; | 172 return ImageDecoder::frameIsFullyReceivedAtIndex(index); |
173 if (!(m_formatFlags & ANIMATION_FLAG)) | 173 return ((m_formatFlags & ANIMATION_FLAG) && index < m_frameBufferCache.size( )) || ImageDecoder::frameIsFullyReceivedAtIndex(index); |
scroggo_chromium
2016/05/16 20:32:08
I brought this up previously, but I don't think yo
aleksandar.stojiljkovic
2016/05/22 15:41:53
I refactored it a bit, but it is still based on in
scroggo_chromium
2016/05/23 16:40:42
That's not obvious to me. An entry is created base
aleksandar.stojiljkovic
2016/05/24 11:08:24
This confused me too. Notice in WEBPImageDecoder::
scroggo_chromium
2016/05/24 13:55:14
Very confusing. Can you add a comment?
aleksandar.stojiljkovic
2016/05/24 19:24:34
Done.
| |
174 return ImageDecoder::frameIsCompleteAtIndex(index); | |
175 bool frameIsLoadedAtIndex = index < m_frameBufferCache.size(); | |
176 return frameIsLoadedAtIndex; | |
177 } | 174 } |
178 | 175 |
179 float WEBPImageDecoder::frameDurationAtIndex(size_t index) const | 176 float WEBPImageDecoder::frameDurationAtIndex(size_t index) const |
180 { | 177 { |
181 return index < m_frameBufferCache.size() ? m_frameBufferCache[index].duratio n() : 0; | 178 return index < m_frameBufferCache.size() ? m_frameBufferCache[index].duratio n() : 0; |
182 } | 179 } |
183 | 180 |
184 bool WEBPImageDecoder::updateDemuxer() | 181 bool WEBPImageDecoder::updateDemuxer() |
185 { | 182 { |
186 if (failed()) | 183 if (failed()) |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
493 m_decoderBuffer.u.RGBA.rgba = reinterpret_cast<uint8_t*>(buffer.getAddr(fram eRect.x(), frameRect.y())); | 490 m_decoderBuffer.u.RGBA.rgba = reinterpret_cast<uint8_t*>(buffer.getAddr(fram eRect.x(), frameRect.y())); |
494 | 491 |
495 switch (WebPIUpdate(m_decoder, dataBytes, dataSize)) { | 492 switch (WebPIUpdate(m_decoder, dataBytes, dataSize)) { |
496 case VP8_STATUS_OK: | 493 case VP8_STATUS_OK: |
497 applyPostProcessing(frameIndex); | 494 applyPostProcessing(frameIndex); |
498 buffer.setHasAlpha((m_formatFlags & ALPHA_FLAG) || m_frameBackgroundHasA lpha); | 495 buffer.setHasAlpha((m_formatFlags & ALPHA_FLAG) || m_frameBackgroundHasA lpha); |
499 buffer.setStatus(ImageFrame::FrameComplete); | 496 buffer.setStatus(ImageFrame::FrameComplete); |
500 clearDecoder(); | 497 clearDecoder(); |
501 return true; | 498 return true; |
502 case VP8_STATUS_SUSPENDED: | 499 case VP8_STATUS_SUSPENDED: |
503 if (!isAllDataReceived() && !frameIsCompleteAtIndex(frameIndex)) { | 500 if (!isAllDataReceived() && !frameIsFullyReceivedAtIndex(frameIndex)) { |
504 applyPostProcessing(frameIndex); | 501 applyPostProcessing(frameIndex); |
505 return false; | 502 return false; |
506 } | 503 } |
507 // FALLTHROUGH | 504 // FALLTHROUGH |
508 default: | 505 default: |
509 clear(); | 506 clear(); |
510 return setFailed(); | 507 return setFailed(); |
511 } | 508 } |
512 } | 509 } |
513 | 510 |
514 } // namespace blink | 511 } // namespace blink |
OLD | NEW |