Index: src/images/SkImageDecoder_libbmp.cpp |
diff --git a/src/images/SkImageDecoder_libbmp.cpp b/src/images/SkImageDecoder_libbmp.cpp |
index 488eddce1edb203065ce063db82e449c169db99f..68b58f5f8fd7485948ca681a9908b927ef2752c7 100644 |
--- a/src/images/SkImageDecoder_libbmp.cpp |
+++ b/src/images/SkImageDecoder_libbmp.cpp |
@@ -23,6 +23,8 @@ public: |
return kBMP_Format; |
} |
+ virtual Format onGetFormat(SkStream*) const SK_OVERRIDE; |
+ |
protected: |
virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode mode) SK_OVERRIDE; |
@@ -34,14 +36,18 @@ private: |
DEFINE_DECODER_CREATOR(BMPImageDecoder); |
/////////////////////////////////////////////////////////////////////////////// |
-static SkImageDecoder* sk_libbmp_dfactory(SkStream* stream) { |
+static bool is_bmp(SkStream* stream) { |
static const char kBmpMagic[] = { 'B', 'M' }; |
char buffer[sizeof(kBmpMagic)]; |
- if (stream->read(buffer, sizeof(kBmpMagic)) == sizeof(kBmpMagic) && |
- !memcmp(buffer, kBmpMagic, sizeof(kBmpMagic))) { |
+ return stream->read(buffer, sizeof(kBmpMagic)) == sizeof(kBmpMagic) && |
+ !memcmp(buffer, kBmpMagic, sizeof(kBmpMagic)); |
+} |
+ |
+static SkImageDecoder* sk_libbmp_dfactory(SkStream* stream) { |
+ if (is_bmp(stream)) { |
return SkNEW(SkBMPImageDecoder); |
} |
return NULL; |
@@ -79,6 +85,13 @@ private: |
bool fJustBounds; |
}; |
+SkImageDecoder::Format SkBMPImageDecoder::onGetFormat(SkStream* stream) const { |
+ if (is_bmp(stream)) { |
+ return kBMP_Format; |
+ } |
+ return kUnknown_Format; |
+} |
+ |
bool SkBMPImageDecoder::onDecode(SkStream* stream, SkBitmap* bm, Mode mode) { |
size_t length = stream->getLength(); |