Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp

Issue 1962563002: Fix ImageDecoder::frameIsCompleteAtIndex - fully received instead of decoded. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 DCHECK(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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 {
299 parse(GIFFrameCountQuery); 301 DCHECK(haveUpdatedFrameCount());
300
301 if (failed()) 302 if (failed())
302 return; 303 return;
303 304
304 Vector<size_t> framesToDecode; 305 Vector<size_t> framesToDecode;
305 size_t frameToDecode = index; 306 size_t frameToDecode = index;
306 do { 307 do {
307 framesToDecode.append(frameToDecode); 308 framesToDecode.append(frameToDecode);
308 frameToDecode = m_frameBufferCache[frameToDecode].requiredPreviousFrameI ndex(); 309 frameToDecode = m_frameBufferCache[frameToDecode].requiredPreviousFrameI ndex();
309 } while (frameToDecode != kNotFound && m_frameBufferCache[frameToDecode].get Status() != ImageFrame::FrameComplete); 310 } while (frameToDecode != kNotFound && m_frameBufferCache[frameToDecode].get Status() != ImageFrame::FrameComplete);
310 311
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 369
369 // Update our status to be partially complete. 370 // Update our status to be partially complete.
370 buffer->setStatus(ImageFrame::FramePartial); 371 buffer->setStatus(ImageFrame::FramePartial);
371 372
372 // Reset the alpha pixel tracker for this frame. 373 // Reset the alpha pixel tracker for this frame.
373 m_currentBufferSawAlpha = false; 374 m_currentBufferSawAlpha = false;
374 return true; 375 return true;
375 } 376 }
376 377
377 } // namespace blink 378 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698