[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

pkasting at chromium.org pkasting at chromium.org
Thu Apr 8 02:22:43 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 6568f9aa6aae7c2a8888cf4e8e7b7be96c32794a
Author: pkasting at chromium.org <pkasting at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Mar 15 20:08:33 2010 +0000

    Clean up more bits of the open-source image decoders.  In addition to
    simplifying things somewhat, this makes all the decoders the same in
    terms of how they construct "image reader" subclasses and init scale
    data.
    
    Reviewed by Adam Barth.
    
    https://bugs.webkit.org/show_bug.cgi?id=36040
    
    No functional change, so no tests.
    
    * platform/image-decoders/ImageDecoder.h: Reorder a few declarations to try and group/order members slightly better.
    (WebCore::ImageDecoder::ImageDecoder):
    * platform/image-decoders/gif/GIFImageDecoder.cpp: Move reader construction into decode().  Prep scale data in setSize().  Remove useless comment.
    (WebCore::GIFImageDecoder::setData):
    (WebCore::GIFImageDecoder::setSize):
    (WebCore::GIFImageDecoder::frameBufferAtIndex):
    (WebCore::GIFImageDecoder::decode):
    * platform/image-decoders/gif/GIFImageDecoder.h: Prep scale data in setSize().
    * platform/image-decoders/gif/GIFImageReader.cpp: Prep scale data in setSize().
    (GIFImageReader::read):
    * platform/image-decoders/ico/ICOImageDecoder.cpp: Shorten code.
    (WebCore::ICOImageDecoder::setSize):
    * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Fix style.  Move reader construction into decode().
    (WebCore::JPEGImageReader::close):
    (WebCore::JPEGImageReader::skipBytes):
    (WebCore::JPEGImageDecoder::decode):
    * platform/image-decoders/jpeg/JPEGImageDecoder.h: Move reader construction into decode().
    (WebCore::JPEGImageDecoder::filenameExtension):
    * platform/image-decoders/png/PNGImageDecoder.cpp: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().  Remove useless comment.
    (WebCore::PNGImageReader::PNGImageReader):
    (WebCore::PNGImageReader::close):
    (WebCore::PNGImageReader::decode):
    (WebCore::PNGImageDecoder::setSize):
    (WebCore::PNGImageDecoder::frameBufferAtIndex):
    (WebCore::PNGImageDecoder::headerAvailable):
    (WebCore::PNGImageDecoder::pngComplete):
    (WebCore::PNGImageDecoder::decode):
    * platform/image-decoders/png/PNGImageDecoder.h: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().
    (WebCore::PNGImageDecoder::filenameExtension):
    (WebCore::PNGImageDecoder::isComplete):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@56007 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index a1b0ec8..5b06cee 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,47 @@
+2010-03-11  Peter Kasting  <pkasting at google.com>
+
+        Reviewed by Adam Barth.
+
+        Clean up more bits of the open-source image decoders.  In addition to
+        simplifying things somewhat, this makes all the decoders the same in
+        terms of how they construct "image reader" subclasses and init scale
+        data.
+
+        https://bugs.webkit.org/show_bug.cgi?id=36040
+
+        No functional change, so no tests.
+
+        * platform/image-decoders/ImageDecoder.h: Reorder a few declarations to try and group/order members slightly better.
+        (WebCore::ImageDecoder::ImageDecoder):
+        * platform/image-decoders/gif/GIFImageDecoder.cpp: Move reader construction into decode().  Prep scale data in setSize().  Remove useless comment.
+        (WebCore::GIFImageDecoder::setData):
+        (WebCore::GIFImageDecoder::setSize):
+        (WebCore::GIFImageDecoder::frameBufferAtIndex):
+        (WebCore::GIFImageDecoder::decode):
+        * platform/image-decoders/gif/GIFImageDecoder.h: Prep scale data in setSize().
+        * platform/image-decoders/gif/GIFImageReader.cpp: Prep scale data in setSize().
+        (GIFImageReader::read):
+        * platform/image-decoders/ico/ICOImageDecoder.cpp: Shorten code.
+        (WebCore::ICOImageDecoder::setSize):
+        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Fix style.  Move reader construction into decode().
+        (WebCore::JPEGImageReader::close):
+        (WebCore::JPEGImageReader::skipBytes):
+        (WebCore::JPEGImageDecoder::decode):
+        * platform/image-decoders/jpeg/JPEGImageDecoder.h: Move reader construction into decode().
+        (WebCore::JPEGImageDecoder::filenameExtension):
+        * platform/image-decoders/png/PNGImageDecoder.cpp: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().  Remove useless comment.
+        (WebCore::PNGImageReader::PNGImageReader):
+        (WebCore::PNGImageReader::close):
+        (WebCore::PNGImageReader::decode):
+        (WebCore::PNGImageDecoder::setSize):
+        (WebCore::PNGImageDecoder::frameBufferAtIndex):
+        (WebCore::PNGImageDecoder::headerAvailable):
+        (WebCore::PNGImageDecoder::pngComplete):
+        (WebCore::PNGImageDecoder::decode):
+        * platform/image-decoders/png/PNGImageDecoder.h: Move reader construction into decode().  Track completion on decoder, not reader.  Prep scale data in setSize().
+        (WebCore::PNGImageDecoder::filenameExtension):
+        (WebCore::PNGImageDecoder::isComplete):
+
 2010-03-15  Philippe Normand  <pnormand at igalia.com>
 
         Reviewed by  Gustavo Noronha Silva.
diff --git a/WebCore/platform/image-decoders/ImageDecoder.h b/WebCore/platform/image-decoders/ImageDecoder.h
index 4a81d0b..d526e5e 100644
--- a/WebCore/platform/image-decoders/ImageDecoder.h
+++ b/WebCore/platform/image-decoders/ImageDecoder.h
@@ -205,8 +205,8 @@ namespace WebCore {
         ImageDecoder()
             : m_scaled(false)
             , m_sizeAvailable(false)
-            , m_isAllDataReceived(false)
             , m_maxNumPixels(-1)
+            , m_isAllDataReceived(false)
             , m_failed(false)
         {
         }
@@ -325,10 +325,10 @@ namespace WebCore {
         int scaledY(int origY, int searchStart = 0);
 
         RefPtr<SharedBuffer> m_data; // The encoded data.
+        Vector<RGBA32Buffer> m_frameBufferCache;
+        bool m_scaled;
         Vector<int> m_scaledColumns;
         Vector<int> m_scaledRows;
-        bool m_scaled;
-        Vector<RGBA32Buffer> m_frameBufferCache;
 
     private:
         // Some code paths compute the size of the image as "width * height * 4"
@@ -344,8 +344,8 @@ namespace WebCore {
 
         IntSize m_size;
         bool m_sizeAvailable;
-        bool m_isAllDataReceived;
         int m_maxNumPixels;
+        bool m_isAllDataReceived;
         bool m_failed;
     };
 
diff --git a/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp b/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
index f56b357..5965ae4 100644
--- a/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
@@ -49,9 +49,6 @@ void GIFImageDecoder::setData(SharedBuffer* data, bool allDataReceived)
 
     // We need to rescan the frame count, as the new data may have changed it.
     m_alreadyScannedThisDataForFrameCount = false;
-
-    if (!m_reader && !failed())
-        m_reader.set(new GIFImageReader(this));
 }
 
 bool GIFImageDecoder::isSizeAvailable()
@@ -62,6 +59,15 @@ bool GIFImageDecoder::isSizeAvailable()
     return ImageDecoder::isSizeAvailable();
 }
 
+bool GIFImageDecoder::setSize(unsigned width, unsigned height)
+{
+    if (!ImageDecoder::setSize(width, height))
+        return false;
+
+    prepareScaleDataIfNecessary();
+    return true;
+}
+
 size_t GIFImageDecoder::frameCount()
 {
     if (!m_alreadyScannedThisDataForFrameCount) {
@@ -109,7 +115,7 @@ RGBA32Buffer* GIFImageDecoder::frameBufferAtIndex(size_t index)
 
     RGBA32Buffer& frame = m_frameBufferCache[index];
     if (frame.status() != RGBA32Buffer::FrameComplete)
-        decode(index + 1, GIFFullQuery); // Decode this frame.
+        decode(index + 1, GIFFullQuery);
     return &frame;
 }
 
@@ -163,15 +169,6 @@ void GIFImageDecoder::clearFrameBufferCache(size_t clearBeforeFrame)
     }
 }
 
-bool GIFImageDecoder::sizeNowAvailable(unsigned width, unsigned height)
-{
-    if (!setSize(width, height))
-        return false;
-
-    prepareScaleDataIfNecessary();
-    return true;
-}
-
 void GIFImageDecoder::decodingHalted(unsigned bytesLeft)
 {
     m_readOffset = m_data->size() - bytesLeft;
@@ -291,9 +288,12 @@ void GIFImageDecoder::gifComplete()
 
 void GIFImageDecoder::decode(unsigned haltAtFrame, GIFQuery query)
 {
-    if (failed() || !m_reader)
+    if (failed())
         return;
 
+    if (!m_reader)
+        m_reader.set(new GIFImageReader(this));
+
     if (!m_reader->read((const unsigned char*)m_data->data() + m_readOffset, m_data->size() - m_readOffset, query, haltAtFrame))
         setFailed();
 
diff --git a/WebCore/platform/image-decoders/gif/GIFImageDecoder.h b/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
index 0aa5387..28a9a59 100644
--- a/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
+++ b/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
@@ -45,13 +45,13 @@ namespace WebCore {
         virtual String filenameExtension() const { return "gif"; }
         virtual void setData(SharedBuffer* data, bool allDataReceived);
         virtual bool isSizeAvailable();
+        virtual bool setSize(unsigned width, unsigned height);
         virtual size_t frameCount();
         virtual int repetitionCount() const;
         virtual RGBA32Buffer* frameBufferAtIndex(size_t index);
         virtual void clearFrameBufferCache(size_t clearBeforeFrame);
 
         // Callbacks from the GIF reader.
-        bool sizeNowAvailable(unsigned width, unsigned height);
         void decodingHalted(unsigned bytesLeft);
         bool haveDecodedRow(unsigned frameIndex, unsigned char* rowBuffer, unsigned char* rowEnd, unsigned rowNumber, unsigned repeatCount, bool writeTransparentPixels);
         void frameComplete(unsigned frameIndex, unsigned frameDuration, RGBA32Buffer::FrameDisposalMethod disposalMethod);
diff --git a/WebCore/platform/image-decoders/gif/GIFImageReader.cpp b/WebCore/platform/image-decoders/gif/GIFImageReader.cpp
index 755a48d..677853e 100644
--- a/WebCore/platform/image-decoders/gif/GIFImageReader.cpp
+++ b/WebCore/platform/image-decoders/gif/GIFImageReader.cpp
@@ -519,7 +519,7 @@ bool GIFImageReader::read(const unsigned char *buf, unsigned len,
       screen_height = GETINT16(q + 2);
 
       // CALLBACK: Inform the decoderplugin of our size.
-      if (clientptr && !clientptr->sizeNowAvailable(screen_width, screen_height))
+      if (clientptr && !clientptr->setSize(screen_width, screen_height))
         return false;
       
       screen_bgcolor = q[5];
@@ -746,7 +746,7 @@ bool GIFImageReader::read(const unsigned char *buf, unsigned len,
         y_offset = 0;
 
         // CALLBACK: Inform the decoderplugin of our size.
-        if (clientptr && !clientptr->sizeNowAvailable(screen_width, screen_height))
+        if (clientptr && !clientptr->setSize(screen_width, screen_height))
           return false;
       }
 
diff --git a/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp b/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
index fe6a30b..325c506 100644
--- a/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp
@@ -88,14 +88,9 @@ IntSize ICOImageDecoder::frameSizeAtIndex(size_t index) const
 
 bool ICOImageDecoder::setSize(unsigned width, unsigned height)
 {
-    if (m_frameSize.isEmpty())
-        return ImageDecoder::setSize(width, height);
-
     // The size calculated inside the BMPImageReader had better match the one in
     // the icon directory.
-    if (IntSize(width, height) != m_frameSize)
-        setFailed();
-    return !failed();
+    return m_frameSize.isEmpty() ? ImageDecoder::setSize(width, height) : ((IntSize(width, height) == m_frameSize) || setFailed());
 }
 
 size_t ICOImageDecoder::frameCount()
diff --git a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
index 14d5e18..3d9fb8e 100644
--- a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
@@ -131,7 +131,8 @@ public:
         close();
     }
 
-    void close() {
+    void close()
+    {
         decoder_source_mgr* src = (decoder_source_mgr*)m_info.src;
         if (src)
             fastFree(src);
@@ -140,13 +141,14 @@ public:
         jpeg_destroy_decompress(&m_info);
     }
 
-    void skipBytes(long num_bytes) {
+    void skipBytes(long numBytes)
+    {
         decoder_source_mgr* src = (decoder_source_mgr*)m_info.src;
-        long bytesToSkip = std::min(num_bytes, (long)src->pub.bytes_in_buffer);
+        long bytesToSkip = std::min(numBytes, (long)src->pub.bytes_in_buffer);
         src->pub.bytes_in_buffer -= (size_t)bytesToSkip;
         src->pub.next_input_byte += bytesToSkip;
 
-        m_bytesToSkip = std::max(num_bytes - bytesToSkip, static_cast<long>(0));
+        m_bytesToSkip = std::max(numBytes - bytesToSkip, static_cast<long>(0));
     }
 
     bool decode(const Vector<char>& data, bool onlySize)
@@ -378,17 +380,6 @@ JPEGImageDecoder::~JPEGImageDecoder()
 {
 }
 
-void JPEGImageDecoder::setData(SharedBuffer* data, bool allDataReceived)
-{
-    if (failed())
-        return;
-
-    ImageDecoder::setData(data, allDataReceived);
-
-    if (!m_reader && !failed())
-        m_reader.set(new JPEGImageReader(this));
-}
-
 bool JPEGImageDecoder::isSizeAvailable()
 {
     if (!ImageDecoder::isSizeAvailable())
@@ -490,9 +481,12 @@ void JPEGImageDecoder::jpegComplete()
 
 void JPEGImageDecoder::decode(bool onlySize)
 {
-    if (failed() || !m_reader)
+    if (failed())
         return;
 
+    if (!m_reader)
+        m_reader.set(new JPEGImageReader(this));
+
     if (!m_reader->decode(m_data->buffer(), onlySize))
         setFailed();
 
diff --git a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
index 2a95dbe..45e14bc 100644
--- a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
+++ b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
@@ -42,7 +42,6 @@ namespace WebCore {
 
         // ImageDecoder
         virtual String filenameExtension() const { return "jpg"; }
-        virtual void setData(SharedBuffer* data, bool allDataReceived);
         virtual bool isSizeAvailable();
         virtual bool setSize(unsigned width, unsigned height);
         virtual RGBA32Buffer* frameBufferAtIndex(size_t index);
diff --git a/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp b/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
index 79fdab5..de01d55 100644
--- a/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
+++ b/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -95,7 +95,6 @@ public:
         , m_decodingSizeOnly(false)
         , m_interlaceBuffer(0)
         , m_hasAlpha(false)
-        , m_hasFinishedDecoding(false)
         , m_currentBufferSize(0)
     {
         m_png = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, decodingFailed, decodingWarning);
@@ -116,13 +115,10 @@ public:
         delete[] m_interlaceBuffer;
         m_interlaceBuffer = 0;
         m_readOffset = 0;
-        m_hasFinishedDecoding = false;
     }
 
     unsigned currentBufferSize() const { return m_currentBufferSize; }
 
-    void setComplete() { m_hasFinishedDecoding = true; }
-
     void decode(const SharedBuffer& data, bool sizeOnly)
     {
         m_decodingSizeOnly = sizeOnly;
@@ -143,10 +139,10 @@ public:
             // We explicitly specify the superclass isSizeAvailable() because we
             // merely want to check if we've managed to set the size, not
             // (recursively) trigger additional decoding if we haven't.
-            if ((sizeOnly && decoder->ImageDecoder::isSizeAvailable()) || m_hasFinishedDecoding)
+            if (sizeOnly ? decoder->ImageDecoder::isSizeAvailable() : decoder->isComplete())
                 return;
         }
-        if (!m_hasFinishedDecoding && decoder->isAllDataReceived())
+        if (!decoder->isComplete() && decoder->isAllDataReceived())
             decoder->pngComplete();
     }
 
@@ -168,7 +164,6 @@ private:
     png_infop m_info;
     png_bytep m_interlaceBuffer;
     bool m_hasAlpha;
-    bool m_hasFinishedDecoding;
     unsigned m_currentBufferSize;
 };
 
@@ -180,16 +175,6 @@ PNGImageDecoder::~PNGImageDecoder()
 {
 }
 
-void PNGImageDecoder::setData(SharedBuffer* data, bool allDataReceived)
-{
-    if (failed())
-        return;
-
-    ImageDecoder::setData(data, allDataReceived);
-
-    if (!m_reader && !failed())
-        m_reader.set(new PNGImageReader(this));
-}
 bool PNGImageDecoder::isSizeAvailable()
 {
     if (!ImageDecoder::isSizeAvailable())
@@ -198,6 +183,15 @@ bool PNGImageDecoder::isSizeAvailable()
     return ImageDecoder::isSizeAvailable();
 }
 
+bool PNGImageDecoder::setSize(unsigned width, unsigned height)
+{
+    if (!ImageDecoder::setSize(width, height))
+        return false;
+
+    prepareScaleDataIfNecessary();
+    return true;
+}
+
 RGBA32Buffer* PNGImageDecoder::frameBufferAtIndex(size_t index)
 {
     if (index)
@@ -208,7 +202,7 @@ RGBA32Buffer* PNGImageDecoder::frameBufferAtIndex(size_t index)
 
     RGBA32Buffer& frame = m_frameBufferCache[0];
     if (frame.status() != RGBA32Buffer::FrameComplete)
-        decode(false); // Decode this frame.
+        decode(false);
     return &frame;
 }
 
@@ -226,13 +220,9 @@ void PNGImageDecoder::headerAvailable()
     }
     
     // We can fill in the size now that the header is available.
-    if (!ImageDecoder::isSizeAvailable()) {
-        if (!setSize(width, height)) {
-            // Size unreasonable, bail out.
-            longjmp(png->jmpbuf, 1);
-            return;
-        }
-        prepareScaleDataIfNecessary();
+    if (!setSize(width, height)) {
+        longjmp(png->jmpbuf, 1);
+        return;
     }
 
     int bitDepth, colorType, interlaceType, compressionType, filterType, channels;
@@ -369,20 +359,21 @@ void PNGImageDecoder::rowAvailable(unsigned char* rowBuffer, unsigned rowIndex,
 
 void PNGImageDecoder::pngComplete()
 {
-    m_reader->setComplete();
-
     if (!m_frameBufferCache.isEmpty())
         m_frameBufferCache.first().setStatus(RGBA32Buffer::FrameComplete);
 }
 
 void PNGImageDecoder::decode(bool onlySize)
 {
-    if (failed() || !m_reader)
+    if (failed())
         return;
 
+    if (!m_reader)
+        m_reader.set(new PNGImageReader(this));
+
     m_reader->decode(*m_data, onlySize);
     
-    if (failed() || (!m_frameBufferCache.isEmpty() && m_frameBufferCache[0].status() == RGBA32Buffer::FrameComplete))
+    if (failed() || isComplete())
         m_reader.clear();
 }
 
diff --git a/WebCore/platform/image-decoders/png/PNGImageDecoder.h b/WebCore/platform/image-decoders/png/PNGImageDecoder.h
index c3b33bd..3f0602c 100644
--- a/WebCore/platform/image-decoders/png/PNGImageDecoder.h
+++ b/WebCore/platform/image-decoders/png/PNGImageDecoder.h
@@ -41,8 +41,8 @@ namespace WebCore {
 
         // ImageDecoder
         virtual String filenameExtension() const { return "png"; }
-        virtual void setData(SharedBuffer* data, bool allDataReceived);
         virtual bool isSizeAvailable();
+        virtual bool setSize(unsigned width, unsigned height);
         virtual RGBA32Buffer* frameBufferAtIndex(size_t index);
 
         // Callbacks from libpng
@@ -50,6 +50,11 @@ namespace WebCore {
         void rowAvailable(unsigned char* rowBuffer, unsigned rowIndex, int interlacePass);
         void pngComplete();
 
+        bool isComplete() const
+        {
+            return !m_frameBufferCache.isEmpty() && (m_frameBufferCache.first().status() == RGBA32Buffer::FrameComplete);
+        }
+
     private:
         // Decodes the image.  If |onlySize| is true, stops decoding after
         // calculating the image size.

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list