OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2006 Apple Computer, 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 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
76 // stream. In these cases we should just loop once. | 76 // stream. In these cases we should just loop once. |
77 if (isAllDataReceived() && parseCompleted() && m_reader->imagesCount() == 1) | 77 if (isAllDataReceived() && parseCompleted() && m_reader->imagesCount() == 1) |
78 m_repetitionCount = cAnimationNone; | 78 m_repetitionCount = cAnimationNone; |
79 else if (failed() || (m_reader && (!m_reader->imagesCount()))) | 79 else if (failed() || (m_reader && (!m_reader->imagesCount()))) |
80 m_repetitionCount = cAnimationLoopOnce; | 80 m_repetitionCount = cAnimationLoopOnce; |
81 else if (m_reader && m_reader->loopCount() != cLoopCountNotSeen) | 81 else if (m_reader && m_reader->loopCount() != cLoopCountNotSeen) |
82 m_repetitionCount = m_reader->loopCount(); | 82 m_repetitionCount = m_reader->loopCount(); |
83 return m_repetitionCount; | 83 return m_repetitionCount; |
84 } | 84 } |
85 | 85 |
86 bool GIFImageDecoder::frameIsCompleteAtIndex(size_t index) const | 86 bool GIFImageDecoder::frameIsFullyReceivedAtIndex(size_t index) const |
87 { | 87 { |
88 return m_reader && (index < m_reader->imagesCount()) && m_reader->frameConte xt(index)->isComplete(); | 88 ASSERT(m_haveUpdatedFrameCount); |
89 return (m_reader && (index < m_reader->imagesCount()) && m_reader->frameCont ext(index)->isComplete()) | |
90 || ImageDecoder::frameIsFullyReceivedAtIndex(index); | |
89 } | 91 } |
90 | 92 |
91 float GIFImageDecoder::frameDurationAtIndex(size_t index) const | 93 float GIFImageDecoder::frameDurationAtIndex(size_t index) const |
92 { | 94 { |
93 return (m_reader && (index < m_reader->imagesCount()) && | 95 return (m_reader && (index < m_reader->imagesCount()) && |
94 m_reader->frameContext(index)->isHeaderDefined()) ? | 96 m_reader->frameContext(index)->isHeaderDefined()) ? |
95 m_reader->frameContext(index)->delayTime() : 0; | 97 m_reader->frameContext(index)->delayTime() : 0; |
96 } | 98 } |
97 | 99 |
98 bool GIFImageDecoder::setFailed() | 100 bool GIFImageDecoder::setFailed() |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
288 { | 290 { |
289 ImageFrame* buffer = &m_frameBufferCache[index]; | 291 ImageFrame* buffer = &m_frameBufferCache[index]; |
290 const GIFFrameContext* frameContext = m_reader->frameContext(index); | 292 const GIFFrameContext* frameContext = m_reader->frameContext(index); |
291 buffer->setOriginalFrameRect(intersection(frameContext->frameRect(), IntRect (IntPoint(), size()))); | 293 buffer->setOriginalFrameRect(intersection(frameContext->frameRect(), IntRect (IntPoint(), size()))); |
292 buffer->setDuration(frameContext->delayTime()); | 294 buffer->setDuration(frameContext->delayTime()); |
293 buffer->setDisposalMethod(frameContext->getDisposalMethod()); | 295 buffer->setDisposalMethod(frameContext->getDisposalMethod()); |
294 buffer->setRequiredPreviousFrameIndex(findRequiredPreviousFrame(index, false )); | 296 buffer->setRequiredPreviousFrameIndex(findRequiredPreviousFrame(index, false )); |
295 } | 297 } |
296 | 298 |
297 void GIFImageDecoder::decode(size_t index) | 299 void GIFImageDecoder::decode(size_t index) |
298 { | 300 { |
scroggo_chromium
2016/06/02 21:00:14
Maybe assert here that we've updated the frame cou
aleksandar.stojiljkovic
2016/06/03 19:33:57
Done.
| |
299 parse(GIFFrameCountQuery); | |
300 | |
301 if (failed()) | 301 if (failed()) |
302 return; | 302 return; |
303 | 303 |
304 Vector<size_t> framesToDecode; | 304 Vector<size_t> framesToDecode; |
305 size_t frameToDecode = index; | 305 size_t frameToDecode = index; |
306 do { | 306 do { |
307 framesToDecode.append(frameToDecode); | 307 framesToDecode.append(frameToDecode); |
308 frameToDecode = m_frameBufferCache[frameToDecode].requiredPreviousFrameI ndex(); | 308 frameToDecode = m_frameBufferCache[frameToDecode].requiredPreviousFrameI ndex(); |
309 } while (frameToDecode != kNotFound && m_frameBufferCache[frameToDecode].get Status() != ImageFrame::FrameComplete); | 309 } while (frameToDecode != kNotFound && m_frameBufferCache[frameToDecode].get Status() != ImageFrame::FrameComplete); |
310 | 310 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
368 | 368 |
369 // Update our status to be partially complete. | 369 // Update our status to be partially complete. |
370 buffer->setStatus(ImageFrame::FramePartial); | 370 buffer->setStatus(ImageFrame::FramePartial); |
371 | 371 |
372 // Reset the alpha pixel tracker for this frame. | 372 // Reset the alpha pixel tracker for this frame. |
373 m_currentBufferSawAlpha = false; | 373 m_currentBufferSawAlpha = false; |
374 return true; | 374 return true; |
375 } | 375 } |
376 | 376 |
377 } // namespace blink | 377 } // namespace blink |
OLD | NEW |