Changeset 25368 in webkit


Ignore:
Timestamp:
Sep 4, 2007 11:10:54 PM (17 years ago)
Author:
bdash
Message:

2007-09-04 Marvin Decker <marv.decker@gmail.com>

Reviewed by Maciej Stachowiak.

http://bugs.webkit.org/show_bug.cgi?id=15072
Bug 15072: Fix ImageDecoder.cpp to not copy incoming data

Change ImageDecoder::setData to take a SharedBuffer*.

  • platform/graphics/cairo/ImageSourceCairo.cpp: (WebCore::ImageSource::setData):
  • platform/image-decoders/ImageDecoder.h: (WebCore::RGBA32Buffer::bytes): (WebCore::RGBA32Buffer::height): (WebCore::ImageDecoder::setData):
  • platform/image-decoders/gif/GIFImageDecoder.cpp: (WebCore::GIFImageDecoder::setData): (WebCore::GIFImageDecoder::frameCount): (WebCore::GIFImageDecoder::decode): (WebCore::GIFImageDecoder::decodingHalted): (WebCore::GIFImageDecoder::initFrameBuffer):
  • platform/image-decoders/gif/GIFImageDecoder.h:
  • platform/image-decoders/jpeg/JPEGImageDecoder.cpp: (WebCore::JPEGImageDecoder::setData): (WebCore::JPEGImageDecoder::decode):
  • platform/image-decoders/jpeg/JPEGImageDecoder.h:
  • platform/image-decoders/png/PNGImageDecoder.cpp: (WebCore::PNGImageDecoder::setData): (WebCore::PNGImageDecoder::decode): (WebCore::PNGImageDecoder::headerAvailable): (WebCore::PNGImageDecoder::rowAvailable):
  • platform/image-decoders/png/PNGImageDecoder.h:
Location:
trunk/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r25360 r25368  
     12007-09-04  Marvin Decker  <marv.decker@gmail.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        http://bugs.webkit.org/show_bug.cgi?id=15072
     6        Bug 15072: Fix ImageDecoder.cpp to not copy incoming data
     7
     8        Change ImageDecoder::setData to take a SharedBuffer*.
     9
     10        * platform/graphics/cairo/ImageSourceCairo.cpp:
     11        (WebCore::ImageSource::setData):
     12        * platform/image-decoders/ImageDecoder.h:
     13        (WebCore::RGBA32Buffer::bytes):
     14        (WebCore::RGBA32Buffer::height):
     15        (WebCore::ImageDecoder::setData):
     16        * platform/image-decoders/gif/GIFImageDecoder.cpp:
     17        (WebCore::GIFImageDecoder::setData):
     18        (WebCore::GIFImageDecoder::frameCount):
     19        (WebCore::GIFImageDecoder::decode):
     20        (WebCore::GIFImageDecoder::decodingHalted):
     21        (WebCore::GIFImageDecoder::initFrameBuffer):
     22        * platform/image-decoders/gif/GIFImageDecoder.h:
     23        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
     24        (WebCore::JPEGImageDecoder::setData):
     25        (WebCore::JPEGImageDecoder::decode):
     26        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
     27        * platform/image-decoders/png/PNGImageDecoder.cpp:
     28        (WebCore::PNGImageDecoder::setData):
     29        (WebCore::PNGImageDecoder::decode):
     30        (WebCore::PNGImageDecoder::headerAvailable):
     31        (WebCore::PNGImageDecoder::rowAvailable):
     32        * platform/image-decoders/png/PNGImageDecoder.h:
     33
    1342007-09-04  David Hyatt  <hyatt@apple.com>
    235
  • trunk/WebCore/platform/graphics/cairo/ImageSourceCairo.cpp

    r25295 r25368  
    117117    if (!m_decoder)
    118118        return;
    119     m_decoder->setData(data->buffer(), allDataReceived);
     119    m_decoder->setData(data, allDataReceived);
    120120}
    121121
  • trunk/WebCore/platform/image-decoders/ImageDecoder.h

    r17208 r25368  
    3030#include "IntRect.h"
    3131#include "ImageSource.h"
     32#include "SharedBuffer.h"
    3233#include <wtf/Vector.h>
    3334
     
    4748    {}
    4849
     50    const RGBA32Array& bytes() const { return m_bytes; }
    4951    RGBA32Array& bytes() { return m_bytes; }
    5052    const IntRect& rect() const { return m_rect; }
    51     unsigned height() { return m_height; }
     53    unsigned height() const { return m_height; }
    5254    FrameStatus status() const { return m_status; }
    5355    unsigned duration() const { return m_duration; }
     
    100102
    101103    // All specific decoder plugins must do something with the data they are given.
    102     virtual void setData(const Vector<char>& data, bool allDataReceived) { m_data = data; }
     104    virtual void setData(SharedBuffer* data, bool allDataReceived) { m_data = data; }
    103105
    104106    // Whether or not the size information has been decoded yet.
     
    128130
    129131protected:
    130     Vector<char> m_data; // The encoded data.
     132    RefPtr<SharedBuffer> m_data; // The encoded data.
    131133    Vector<RGBA32Buffer> m_frameBufferCache;
    132134    bool m_sizeAvailable;
  • trunk/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp

    r25293 r25368  
    9595
    9696// Take the data and store it.
    97 void GIFImageDecoder::setData(const Vector<char>& data, bool allDataReceived)
     97void GIFImageDecoder::setData(SharedBuffer* data, bool allDataReceived)
    9898{
    9999    if (m_failed)
     
    139139        // ImageIO does on Mac right now (it also crawls all the data again).
    140140        GIFImageDecoderPrivate reader;
    141         reader.decode(m_data, GIFFrameCountQuery);
     141        reader.decode(m_data->buffer(), GIFFrameCountQuery);
    142142        m_frameCountValid = true;
    143143        m_frameBufferCache.resize(reader.frameCount());
     
    175175        return;
    176176
    177     m_failed = !m_reader->decode(m_data, query, haltAtFrame);
     177    m_failed = !m_reader->decode(m_data->buffer(), query, haltAtFrame);
    178178   
    179179    if (m_failed) {
     
    192192void GIFImageDecoder::decodingHalted(unsigned bytesLeft)
    193193{
    194     m_reader->setReadOffset(m_data.size() - bytesLeft);
     194    m_reader->setReadOffset(m_data->size() - bytesLeft);
    195195}
    196196
     
    258258                IntRect prevRect = previousBuffer->rect();
    259259                unsigned end = prevRect.y() + prevRect.height();
    260                 unsigned* src;
    261260
    262261                // Given that we allocate buffers to be the same size as previous buffers,
  • trunk/WebCore/platform/image-decoders/gif/GIFImageDecoder.h

    r14818 r25368  
    4141
    4242    // Take the data and store it.
    43     virtual void setData(const Vector<char>& data, bool allDataReceived);
     43    virtual void setData(SharedBuffer* data, bool allDataReceived);
    4444
    4545    // Whether or not the size information has been decoded yet.
  • trunk/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp

    r19478 r25368  
    394394
    395395// Take the data and store it.
    396 void JPEGImageDecoder::setData(const Vector<char>& data, bool allDataReceived)
     396void JPEGImageDecoder::setData(SharedBuffer* data, bool allDataReceived)
    397397{
    398398    if (m_failed)
     
    444444        return;
    445445
    446     m_failed = !m_reader->decode(m_data, sizeOnly);
     446    m_failed = !m_reader->decode(m_data->buffer(), sizeOnly);
    447447
    448448    if (m_failed || (!m_frameBufferCache.isEmpty() && m_frameBufferCache[0].status() == RGBA32Buffer::FrameComplete)) {
  • trunk/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h

    r14818 r25368  
    4141
    4242    // Take the data and store it.
    43     virtual void setData(const Vector<char>& data, bool allDataReceived);
     43    virtual void setData(SharedBuffer* data, bool allDataReceived);
    4444
    4545    // Whether or not the size information has been decoded yet.
  • trunk/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp

    r25294 r25368  
    145145
    146146// Take the data and store it.
    147 void PNGImageDecoder::setData(const Vector<char>& data, bool allDataReceived)
     147void PNGImageDecoder::setData(SharedBuffer* data, bool allDataReceived)
    148148{
    149149    if (m_failed)
     
    192192        return;
    193193
    194     m_reader->decode(m_data, sizeOnly);
     194    m_reader->decode(m_data->buffer(), sizeOnly);
    195195   
    196196    if (m_failed || (m_frameBufferCache[0].status() == RGBA32Buffer::FrameComplete)) {
     
    289289    if (reader()->decodingSizeOnly()) {
    290290        // If we only needed the size, halt the reader.     
    291         reader()->setReadOffset(m_data.size() - png->buffer_size);
     291        reader()->setReadOffset(m_data->size() - png->buffer_size);
    292292        png->buffer_size = 0;
    293293    }
     
    366366    unsigned* dst = buffer.bytes().data() + rowIndex * width;
    367367    bool sawAlpha = false;
    368     for (unsigned i = 0; i < width; i++) {
     368    for (int i = 0; i < width; i++) {
    369369        unsigned red = *row++;
    370370        unsigned green = *row++;
  • trunk/WebCore/platform/image-decoders/png/PNGImageDecoder.h

    r14818 r25368  
    4141
    4242    // Take the data and store it.
    43     virtual void setData(const Vector<char>& data, bool allDataReceived);
     43    virtual void setData(SharedBuffer* data, bool allDataReceived);
    4444
    4545    // Whether or not the size information has been decoded yet.
Note: See TracChangeset for help on using the changeset viewer.