| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Apple Computer, Inc. | 2 * Copyright (C) 2006 Apple Computer, Inc. |
| 3 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. | 3 * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. |
| 4 * | 4 * |
| 5 * Portions are Copyright (C) 2001 mozilla.org | 5 * Portions are Copyright (C) 2001 mozilla.org |
| 6 * | 6 * |
| 7 * Other contributors: | 7 * Other contributors: |
| 8 * Stuart Parmenter <stuart@mozilla.com> | 8 * Stuart Parmenter <stuart@mozilla.com> |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 * version of this file under the LGPL, indicate your decision by | 32 * version of this file under the LGPL, indicate your decision by |
| 33 * deletingthe provisions above and replace them with the notice and | 33 * deletingthe provisions above and replace them with the notice and |
| 34 * other provisions required by the MPL or the GPL, as the case may be. | 34 * other provisions required by the MPL or the GPL, as the case may be. |
| 35 * If you do not delete the provisions above, a recipient may use your | 35 * If you do not delete the provisions above, a recipient may use your |
| 36 * version of this file under any of the LGPL, the MPL or the GPL. | 36 * version of this file under any of the LGPL, the MPL or the GPL. |
| 37 */ | 37 */ |
| 38 | 38 |
| 39 #include "platform/image-decoders/png/PNGImageDecoder.h" | 39 #include "platform/image-decoders/png/PNGImageDecoder.h" |
| 40 | 40 |
| 41 #include "png.h" | 41 #include "png.h" |
| 42 #include "wtf/PtrUtil.h" | |
| 43 #include <memory> | |
| 44 | 42 |
| 45 #if !defined(PNG_LIBPNG_VER_MAJOR) || !defined(PNG_LIBPNG_VER_MINOR) | 43 #if !defined(PNG_LIBPNG_VER_MAJOR) || !defined(PNG_LIBPNG_VER_MINOR) |
| 46 #error version error: compile against a versioned libpng. | 44 #error version error: compile against a versioned libpng. |
| 47 #endif | 45 #endif |
| 48 #if USE(QCMSLIB) | 46 #if USE(QCMSLIB) |
| 49 #include "qcms.h" | 47 #include "qcms.h" |
| 50 #endif | 48 #endif |
| 51 | 49 |
| 52 #if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MIN
OR >= 4) | 50 #if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MIN
OR >= 4) |
| 53 #define JMPBUF(png_ptr) png_jmpbuf(png_ptr) | 51 #define JMPBUF(png_ptr) png_jmpbuf(png_ptr) |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 png_infop infoPtr() const { return m_info; } | 135 png_infop infoPtr() const { return m_info; } |
| 138 | 136 |
| 139 size_t getReadOffset() const { return m_readOffset; } | 137 size_t getReadOffset() const { return m_readOffset; } |
| 140 void setReadOffset(size_t offset) { m_readOffset = offset; } | 138 void setReadOffset(size_t offset) { m_readOffset = offset; } |
| 141 size_t currentBufferSize() const { return m_currentBufferSize; } | 139 size_t currentBufferSize() const { return m_currentBufferSize; } |
| 142 bool decodingSizeOnly() const { return m_decodingSizeOnly; } | 140 bool decodingSizeOnly() const { return m_decodingSizeOnly; } |
| 143 void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; } | 141 void setHasAlpha(bool hasAlpha) { m_hasAlpha = hasAlpha; } |
| 144 bool hasAlpha() const { return m_hasAlpha; } | 142 bool hasAlpha() const { return m_hasAlpha; } |
| 145 | 143 |
| 146 png_bytep interlaceBuffer() const { return m_interlaceBuffer.get(); } | 144 png_bytep interlaceBuffer() const { return m_interlaceBuffer.get(); } |
| 147 void createInterlaceBuffer(int size) { m_interlaceBuffer = wrapArrayUnique(n
ew png_byte[size]); } | 145 void createInterlaceBuffer(int size) { m_interlaceBuffer = adoptArrayPtr(new
png_byte[size]); } |
| 148 #if USE(QCMSLIB) | 146 #if USE(QCMSLIB) |
| 149 png_bytep rowBuffer() const { return m_rowBuffer.get(); } | 147 png_bytep rowBuffer() const { return m_rowBuffer.get(); } |
| 150 void createRowBuffer(int size) { m_rowBuffer = wrapArrayUnique(new png_byte[
size]); } | 148 void createRowBuffer(int size) { m_rowBuffer = adoptArrayPtr(new png_byte[si
ze]); } |
| 151 #endif | 149 #endif |
| 152 | 150 |
| 153 private: | 151 private: |
| 154 png_structp m_png; | 152 png_structp m_png; |
| 155 png_infop m_info; | 153 png_infop m_info; |
| 156 PNGImageDecoder* m_decoder; | 154 PNGImageDecoder* m_decoder; |
| 157 size_t m_readOffset; | 155 size_t m_readOffset; |
| 158 size_t m_currentBufferSize; | 156 size_t m_currentBufferSize; |
| 159 bool m_decodingSizeOnly; | 157 bool m_decodingSizeOnly; |
| 160 bool m_hasAlpha; | 158 bool m_hasAlpha; |
| 161 std::unique_ptr<png_byte[]> m_interlaceBuffer; | 159 OwnPtr<png_byte[]> m_interlaceBuffer; |
| 162 #if USE(QCMSLIB) | 160 #if USE(QCMSLIB) |
| 163 std::unique_ptr<png_byte[]> m_rowBuffer; | 161 OwnPtr<png_byte[]> m_rowBuffer; |
| 164 #endif | 162 #endif |
| 165 }; | 163 }; |
| 166 | 164 |
| 167 PNGImageDecoder::PNGImageDecoder(AlphaOption alphaOption, GammaAndColorProfileOp
tion colorOptions, size_t maxDecodedBytes, size_t offset) | 165 PNGImageDecoder::PNGImageDecoder(AlphaOption alphaOption, GammaAndColorProfileOp
tion colorOptions, size_t maxDecodedBytes, size_t offset) |
| 168 : ImageDecoder(alphaOption, colorOptions, maxDecodedBytes) | 166 : ImageDecoder(alphaOption, colorOptions, maxDecodedBytes) |
| 169 , m_offset(offset) | 167 , m_offset(offset) |
| 170 { | 168 { |
| 171 } | 169 } |
| 172 | 170 |
| 173 PNGImageDecoder::~PNGImageDecoder() | 171 PNGImageDecoder::~PNGImageDecoder() |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 { | 421 { |
| 424 return decoder->frameIsCompleteAtIndex(0); | 422 return decoder->frameIsCompleteAtIndex(0); |
| 425 } | 423 } |
| 426 | 424 |
| 427 void PNGImageDecoder::decode(bool onlySize) | 425 void PNGImageDecoder::decode(bool onlySize) |
| 428 { | 426 { |
| 429 if (failed()) | 427 if (failed()) |
| 430 return; | 428 return; |
| 431 | 429 |
| 432 if (!m_reader) | 430 if (!m_reader) |
| 433 m_reader = wrapUnique(new PNGImageReader(this, m_offset)); | 431 m_reader = adoptPtr(new PNGImageReader(this, m_offset)); |
| 434 | 432 |
| 435 // If we couldn't decode the image but have received all the data, decoding | 433 // If we couldn't decode the image but have received all the data, decoding |
| 436 // has failed. | 434 // has failed. |
| 437 if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) | 435 if (!m_reader->decode(*m_data, onlySize) && isAllDataReceived()) |
| 438 setFailed(); | 436 setFailed(); |
| 439 | 437 |
| 440 // If decoding is done or failed, we don't need the PNGImageReader anymore. | 438 // If decoding is done or failed, we don't need the PNGImageReader anymore. |
| 441 if (isComplete(this) || failed()) | 439 if (isComplete(this) || failed()) |
| 442 m_reader.reset(); | 440 m_reader.reset(); |
| 443 } | 441 } |
| 444 | 442 |
| 445 } // namespace blink | 443 } // namespace blink |
| OLD | NEW |