Changeset 25368 in webkit
- Timestamp:
- Sep 4, 2007 11:10:54 PM (17 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r25360 r25368 1 2007-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 1 34 2007-09-04 David Hyatt <hyatt@apple.com> 2 35 -
trunk/WebCore/platform/graphics/cairo/ImageSourceCairo.cpp
r25295 r25368 117 117 if (!m_decoder) 118 118 return; 119 m_decoder->setData(data ->buffer(), allDataReceived);119 m_decoder->setData(data, allDataReceived); 120 120 } 121 121 -
trunk/WebCore/platform/image-decoders/ImageDecoder.h
r17208 r25368 30 30 #include "IntRect.h" 31 31 #include "ImageSource.h" 32 #include "SharedBuffer.h" 32 33 #include <wtf/Vector.h> 33 34 … … 47 48 {} 48 49 50 const RGBA32Array& bytes() const { return m_bytes; } 49 51 RGBA32Array& bytes() { return m_bytes; } 50 52 const IntRect& rect() const { return m_rect; } 51 unsigned height() { return m_height; }53 unsigned height() const { return m_height; } 52 54 FrameStatus status() const { return m_status; } 53 55 unsigned duration() const { return m_duration; } … … 100 102 101 103 // 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; } 103 105 104 106 // Whether or not the size information has been decoded yet. … … 128 130 129 131 protected: 130 Vector<char> m_data; // The encoded data.132 RefPtr<SharedBuffer> m_data; // The encoded data. 131 133 Vector<RGBA32Buffer> m_frameBufferCache; 132 134 bool m_sizeAvailable; -
trunk/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp
r25293 r25368 95 95 96 96 // Take the data and store it. 97 void GIFImageDecoder::setData( const Vector<char>&data, bool allDataReceived)97 void GIFImageDecoder::setData(SharedBuffer* data, bool allDataReceived) 98 98 { 99 99 if (m_failed) … … 139 139 // ImageIO does on Mac right now (it also crawls all the data again). 140 140 GIFImageDecoderPrivate reader; 141 reader.decode(m_data , GIFFrameCountQuery);141 reader.decode(m_data->buffer(), GIFFrameCountQuery); 142 142 m_frameCountValid = true; 143 143 m_frameBufferCache.resize(reader.frameCount()); … … 175 175 return; 176 176 177 m_failed = !m_reader->decode(m_data , query, haltAtFrame);177 m_failed = !m_reader->decode(m_data->buffer(), query, haltAtFrame); 178 178 179 179 if (m_failed) { … … 192 192 void GIFImageDecoder::decodingHalted(unsigned bytesLeft) 193 193 { 194 m_reader->setReadOffset(m_data .size() - bytesLeft);194 m_reader->setReadOffset(m_data->size() - bytesLeft); 195 195 } 196 196 … … 258 258 IntRect prevRect = previousBuffer->rect(); 259 259 unsigned end = prevRect.y() + prevRect.height(); 260 unsigned* src;261 260 262 261 // Given that we allocate buffers to be the same size as previous buffers, -
trunk/WebCore/platform/image-decoders/gif/GIFImageDecoder.h
r14818 r25368 41 41 42 42 // Take the data and store it. 43 virtual void setData( const Vector<char>&data, bool allDataReceived);43 virtual void setData(SharedBuffer* data, bool allDataReceived); 44 44 45 45 // Whether or not the size information has been decoded yet. -
trunk/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
r19478 r25368 394 394 395 395 // Take the data and store it. 396 void JPEGImageDecoder::setData( const Vector<char>&data, bool allDataReceived)396 void JPEGImageDecoder::setData(SharedBuffer* data, bool allDataReceived) 397 397 { 398 398 if (m_failed) … … 444 444 return; 445 445 446 m_failed = !m_reader->decode(m_data , sizeOnly);446 m_failed = !m_reader->decode(m_data->buffer(), sizeOnly); 447 447 448 448 if (m_failed || (!m_frameBufferCache.isEmpty() && m_frameBufferCache[0].status() == RGBA32Buffer::FrameComplete)) { -
trunk/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h
r14818 r25368 41 41 42 42 // Take the data and store it. 43 virtual void setData( const Vector<char>&data, bool allDataReceived);43 virtual void setData(SharedBuffer* data, bool allDataReceived); 44 44 45 45 // Whether or not the size information has been decoded yet. -
trunk/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp
r25294 r25368 145 145 146 146 // Take the data and store it. 147 void PNGImageDecoder::setData( const Vector<char>&data, bool allDataReceived)147 void PNGImageDecoder::setData(SharedBuffer* data, bool allDataReceived) 148 148 { 149 149 if (m_failed) … … 192 192 return; 193 193 194 m_reader->decode(m_data , sizeOnly);194 m_reader->decode(m_data->buffer(), sizeOnly); 195 195 196 196 if (m_failed || (m_frameBufferCache[0].status() == RGBA32Buffer::FrameComplete)) { … … 289 289 if (reader()->decodingSizeOnly()) { 290 290 // 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); 292 292 png->buffer_size = 0; 293 293 } … … 366 366 unsigned* dst = buffer.bytes().data() + rowIndex * width; 367 367 bool sawAlpha = false; 368 for ( unsignedi = 0; i < width; i++) {368 for (int i = 0; i < width; i++) { 369 369 unsigned red = *row++; 370 370 unsigned green = *row++; -
trunk/WebCore/platform/image-decoders/png/PNGImageDecoder.h
r14818 r25368 41 41 42 42 // Take the data and store it. 43 virtual void setData( const Vector<char>&data, bool allDataReceived);43 virtual void setData(SharedBuffer* data, bool allDataReceived); 44 44 45 45 // Whether or not the size information has been decoded yet.
Note: See TracChangeset
for help on using the changeset viewer.