| Index: src/images/SkImageDecoder_libpng.cpp
|
| diff --git a/src/images/SkImageDecoder_libpng.cpp b/src/images/SkImageDecoder_libpng.cpp
|
| index efa4595545709a7b5de1063b6d5a66b23609f38a..aed49cf6ecb08e0d4d2ecd33ae2fac784ac82404 100644
|
| --- a/src/images/SkImageDecoder_libpng.cpp
|
| +++ b/src/images/SkImageDecoder_libpng.cpp
|
| @@ -47,6 +47,9 @@ public:
|
| virtual Format getFormat() const SK_OVERRIDE {
|
| return kPNG_Format;
|
| }
|
| +
|
| + virtual Format onGetFormat(SkStream*) const SK_OVERRIDE;
|
| +
|
| virtual ~SkPNGImageDecoder() {
|
| SkDELETE(fImageIndex);
|
| }
|
| @@ -1079,6 +1082,22 @@ bool SkPNGImageEncoder::doEncode(SkWStream* stream, const SkBitmap& bitmap,
|
| return true;
|
| }
|
|
|
| +static bool is_png(SkStream* stream) {
|
| + char buf[PNG_BYTES_TO_CHECK];
|
| + if (stream->read(buf, PNG_BYTES_TO_CHECK) == PNG_BYTES_TO_CHECK &&
|
| + !png_sig_cmp((png_bytep) buf, (png_size_t)0, PNG_BYTES_TO_CHECK)) {
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +SkImageDecoder::Format SkPNGImageDecoder::onGetFormat(SkStream* stream) const {
|
| + if (is_png(stream)) {
|
| + return kPNG_Format;
|
| + }
|
| + return kUnknown_Format;
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| DEFINE_DECODER_CREATOR(PNGImageDecoder);
|
| DEFINE_ENCODER_CREATOR(PNGImageEncoder);
|
| @@ -1087,9 +1106,7 @@ DEFINE_ENCODER_CREATOR(PNGImageEncoder);
|
| #include "SkTRegistry.h"
|
|
|
| SkImageDecoder* sk_libpng_dfactory(SkStream* stream) {
|
| - char buf[PNG_BYTES_TO_CHECK];
|
| - if (stream->read(buf, PNG_BYTES_TO_CHECK) == PNG_BYTES_TO_CHECK &&
|
| - !png_sig_cmp((png_bytep) buf, (png_size_t)0, PNG_BYTES_TO_CHECK)) {
|
| + if (is_png(stream)) {
|
| return SkNEW(SkPNGImageDecoder);
|
| }
|
| return NULL;
|
|
|