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

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

Issue 1460523002: GIF decoding to Index8, unit tests and misusing unit test as benchmark (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Skia:onGetColorType related implementation. Fix part of Leon's review comments. Created 5 years 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 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK ***** 2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * 4 *
5 * The contents of this file are subject to the Mozilla Public License Version 5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with 6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at 7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/ 8 * http://www.mozilla.org/MPL/
9 * 9 *
10 * Software distributed under the License is distributed on an "AS IS" basis, 10 * Software distributed under the License is distributed on an "AS IS" basis,
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 336
337 m_lzwContext = adoptPtr(new GIFLZWContext(client, this)); 337 m_lzwContext = adoptPtr(new GIFLZWContext(client, this));
338 if (!m_lzwContext->prepareToDecode()) { 338 if (!m_lzwContext->prepareToDecode()) {
339 m_lzwContext.clear(); 339 m_lzwContext.clear();
340 return false; 340 return false;
341 } 341 }
342 342
343 m_currentLzwBlock = 0; 343 m_currentLzwBlock = 0;
344 } 344 }
345 345
346 if (m_lzwContext->hasRemainingRows()) {
347 if (!client->initFrameBuffer(m_frameId))
348 return false;
349 }
350
346 // Some bad GIFs have extra blocks beyond the last row, which we don't want to decode. 351 // Some bad GIFs have extra blocks beyond the last row, which we don't want to decode.
347 while (m_currentLzwBlock < m_lzwBlocks.size() && m_lzwContext->hasRemainingR ows()) { 352 while (m_currentLzwBlock < m_lzwBlocks.size() && m_lzwContext->hasRemainingR ows()) {
348 size_t blockPosition = m_lzwBlocks[m_currentLzwBlock].blockPosition; 353 size_t blockPosition = m_lzwBlocks[m_currentLzwBlock].blockPosition;
349 size_t blockSize = m_lzwBlocks[m_currentLzwBlock].blockSize; 354 size_t blockSize = m_lzwBlocks[m_currentLzwBlock].blockSize;
350 if (blockPosition + blockSize > reader->size()) 355 if (blockPosition + blockSize > reader->size())
351 return false; 356 return false;
352 357
353 while (blockSize) { 358 while (blockSize) {
354 const char* segment = 0; 359 const char* segment = 0;
355 size_t segmentLength = reader->getSomeData(segment, blockPosition); 360 size_t segmentLength = reader->getSomeData(segment, blockPosition);
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 rowIter = rowBuffer.begin(); 846 rowIter = rowBuffer.begin();
842 rowsRemaining = m_frameContext->height(); 847 rowsRemaining = m_frameContext->height();
843 848
844 // Clearing the whole suffix table lets us be more tolerant of bad data. 849 // Clearing the whole suffix table lets us be more tolerant of bad data.
845 for (int i = 0; i < clearCode; ++i) { 850 for (int i = 0; i < clearCode; ++i) {
846 suffix[i] = i; 851 suffix[i] = i;
847 suffixLength[i] = 1; 852 suffixLength[i] = 1;
848 } 853 }
849 return true; 854 return true;
850 } 855 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698