Changeset 64777 in webkit


Ignore:
Timestamp:
Aug 5, 2010 1:01:40 PM (14 years ago)
Author:
commit-queue@webkit.org
Message:

2010-08-05 Yong Li <yoli@rim.com>

Reviewed by Adam Treat.

Fix the problem that down-sampling code doesn't work
for some GIF's. GIF reader can call setSize() multiple times.
We should clear the scaling maps before adding new entries.
Also add a fast path to check if the size has changed since last time.

https://bugs.webkit.org/show_bug.cgi?id=43501

  • platform/image-decoders/ImageDecoder.cpp: (WebCore::ImageDecoder::prepareScaleDataIfNecessary):
  • platform/image-decoders/gif/GIFImageDecoder.cpp: (WebCore::GIFImageDecoder::setSize):
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r64770 r64777  
     12010-08-05  Yong Li  <yoli@rim.com>
     2
     3        Reviewed by Adam Treat.
     4
     5        Fix the problem that down-sampling code doesn't work
     6        for some GIF's. GIF reader can call setSize() multiple times.
     7        We should clear the scaling maps before adding new entries.
     8        Also add a fast path to check if the size has changed since last time.
     9
     10        https://bugs.webkit.org/show_bug.cgi?id=43501
     11
     12        * platform/image-decoders/ImageDecoder.cpp:
     13        (WebCore::ImageDecoder::prepareScaleDataIfNecessary):
     14        * platform/image-decoders/gif/GIFImageDecoder.cpp:
     15        (WebCore::GIFImageDecoder::setSize):
     16
    1172010-08-05  Ilya Tikhonovsky  <loislo@chromium.org>
    218
  • trunk/WebCore/platform/image-decoders/ImageDecoder.cpp

    r54978 r64777  
    220220void ImageDecoder::prepareScaleDataIfNecessary()
    221221{
     222    m_scaled = false;
     223    m_scaledColumns.clear();
     224    m_scaledRows.clear();
     225
    222226    int width = size().width();
    223227    int height = size().height();
    224228    int numPixels = height * width;
    225     if (m_maxNumPixels > 0 && numPixels > m_maxNumPixels) {
    226         m_scaled = true;
    227         double scale = sqrt(m_maxNumPixels / (double)numPixels);
    228         fillScaledValues(m_scaledColumns, scale, width);
    229         fillScaledValues(m_scaledRows, scale, height);
    230     } else if (m_scaled) {
    231         m_scaled = false;
    232         m_scaledColumns.clear();
    233         m_scaledRows.clear();
    234     }
     229    if (m_maxNumPixels <= 0 || numPixels <= m_maxNumPixels)
     230        return;
     231
     232    m_scaled = true;
     233    double scale = sqrt(m_maxNumPixels / (double)numPixels);
     234    fillScaledValues(m_scaledColumns, scale, width);
     235    fillScaledValues(m_scaledRows, scale, height);
    235236}
    236237
  • trunk/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp

    r61619 r64777  
    6262bool GIFImageDecoder::setSize(unsigned width, unsigned height)
    6363{
     64    if (ImageDecoder::isSizeAvailable() && size().width() == width && size().height() == height)
     65        return true;
     66
    6467    if (!ImageDecoder::setSize(width, height))
    6568        return false;
Note: See TracChangeset for help on using the changeset viewer.