Chromium Code Reviews| Index: src/images/SkImageDecoder_libbmp.cpp |
| diff --git a/src/images/SkImageDecoder_libbmp.cpp b/src/images/SkImageDecoder_libbmp.cpp |
| index 6c5ae27c478a22e13b3b62d77e59f0776ad45b23..e078d327f3e8581eeacc4cf7aa0d0f8144dfe0a2 100644 |
| --- a/src/images/SkImageDecoder_libbmp.cpp |
| +++ b/src/images/SkImageDecoder_libbmp.cpp |
| @@ -92,35 +92,19 @@ private: |
| bool fJustBounds; |
| }; |
| +// Defined in SkImageDecoder.cpp |
| +extern size_t copy_stream_to_storage(SkAutoMalloc* storage, SkStream* stream); |
|
djsollen
2013/08/19 16:57:20
why not make it a protected method on SkImageDecod
scroggo
2013/08/19 18:45:55
Done.
|
| + |
| bool SkBMPImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { |
| // First read the entire stream, so that all of the data can be passed to |
| // the BmpDecoderHelper. |
| - // Byte length of all of the data. |
| - size_t length; |
| // Allocated space used to hold the data. |
| SkAutoMalloc storage; |
| - |
| - if (stream->hasLength()) { |
| - length = stream->getLength(); |
| - void* dst = storage.reset(length); |
| - if (stream->read(dst, length) != length) { |
| - return false; |
| - } |
| - } else { |
| - SkDynamicMemoryWStream tempStream; |
| - // Arbitrary buffer size. |
| - const size_t bufferSize = 256 * 1024; // 256 KB |
| - char buffer[bufferSize]; |
| - length = 0; |
| - do { |
| - size_t bytesRead = stream->read(buffer, bufferSize); |
| - tempStream.write(buffer, bytesRead); |
| - length += bytesRead; |
| - SkASSERT(tempStream.bytesWritten() == length); |
| - } while (!stream->isAtEnd()); |
| - void* dst = storage.reset(length); |
| - tempStream.copyTo(dst); |
| + // Byte length of all of the data. |
| + const size_t length = copy_stream_to_storage(&storage, stream); |
| + if (0 == length) { |
| + return 0; |
| } |
| const bool justBounds = SkImageDecoder::kDecodeBounds_Mode == mode; |