Changeset 28925 in webkit


Ignore:
Timestamp:
Dec 20, 2007 7:56:09 PM (16 years ago)
Author:
alp@webkit.org
Message:

2007-12-20 Peter Kasting <zerodpx@gmail.com>

Reviewed by Alp Toker.

http://bugs.webkit.org/show_bug.cgi?id=16508
Fix regression in GIFImageDecoder.cpp: "Haeberli hack" led to wrongly
decoded transparent areas.

  • platform/image-decoders/gif/GIFImageDecoder.cpp: (WebCore::GIFImageDecoder::haveDecodedRow):
  • platform/image-decoders/gif/GIFImageDecoder.h:
  • platform/image-decoders/gif/GIFImageReader.cpp: (GIFImageReader::output_row):
Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r28924 r28925  
     12007-12-20  Peter Kasting  <zerodpx@gmail.com>
     2
     3        Reviewed by Alp Toker.
     4
     5        http://bugs.webkit.org/show_bug.cgi?id=16508
     6        Fix regression in GIFImageDecoder.cpp: "Haeberli hack" led to wrongly
     7        decoded transparent areas.
     8
     9        * platform/image-decoders/gif/GIFImageDecoder.cpp:
     10        (WebCore::GIFImageDecoder::haveDecodedRow):
     11        * platform/image-decoders/gif/GIFImageDecoder.h:
     12        * platform/image-decoders/gif/GIFImageReader.cpp:
     13        (GIFImageReader::output_row):
     14
    1152007-12-20  Justin Garcia  <justin.garcia@apple.com>
    216
  • trunk/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp

    r28114 r28925  
    279279                                     unsigned char* rowEnd,
    280280                                     unsigned rowNumber,  // The row index
    281                                      unsigned repeatCount) // How many times to repeat the row
     281                                     unsigned repeatCount,  // How many times to repeat the row
     282                                     bool writeTransparentPixels)
    282283{
    283284    // Initialize the frame if necessary.
     
    318319        } else {
    319320            m_currentBufferSawAlpha = true;
     321            // We may or may not need to write transparent pixels to the buffer.
     322            // If we're compositing against a previous image, it's wrong, and if
     323            // we're writing atop a cleared, fully transparent buffer, it's
     324            // unnecessary; but if we're decoding an interlaced gif and
     325            // displaying it "Haeberli"-style, we must write these for passes
     326            // beyond the first, or the initial passes will "show through" the
     327            // later ones.
     328            if (writeTransparentPixels)
     329                RGBA32Buffer::setRGBA(*currDst, 0, 0, 0, 0);
    320330        }
    321331        currDst++;
  • trunk/WebCore/platform/image-decoders/gif/GIFImageDecoder.h

    r28068 r28925  
    6565    void decodingHalted(unsigned bytesLeft);
    6666    void haveDecodedRow(unsigned frameIndex, unsigned char* rowBuffer, unsigned char* rowEnd, unsigned rowNumber,
    67                         unsigned repeatCount);
     67                        unsigned repeatCount, bool writeTransparentPixels);
    6868    void frameComplete(unsigned frameIndex, unsigned frameDuration, RGBA32Buffer::FrameDisposalMethod disposalMethod);
    6969    void gifComplete();
  • trunk/WebCore/platform/image-decoders/gif/GIFImageReader.cpp

    r28068 r28925  
    162162  if (clientptr && frame_reader)
    163163    clientptr->haveDecodedRow(images_count - 1, frame_reader->rowbuf, frame_reader->rowend,
    164                               drow_start, drow_end - drow_start + 1);
     164                              drow_start, drow_end - drow_start + 1,
     165                              gs->progressive_display && gs->interlaced && gs->ipass > 1);
    165166
    166167  gs->rowp = gs->rowbuf;
Note: See TracChangeset for help on using the changeset viewer.