Index: src/codec/SkCodec.cpp |
diff --git a/src/codec/SkCodec.cpp b/src/codec/SkCodec.cpp |
index 9b0feae78fb9d724401c64b6dbc6e18261c5153c..ec36bc75e94e00edd22b857b179a9033a95fe5c1 100644 |
--- a/src/codec/SkCodec.cpp |
+++ b/src/codec/SkCodec.cpp |
@@ -7,33 +7,24 @@ |
#include "SkCodec.h" |
#include "SkData.h" |
-#include "SkCodec_libbmp.h" |
#include "SkCodec_libpng.h" |
#include "SkStream.h" |
-struct DecoderProc { |
- bool (*IsFormat)(SkStream*); |
- SkCodec* (*NewFromStream)(SkStream*); |
-}; |
- |
-static const DecoderProc gDecoderProcs[] = { |
- { SkPngCodec::IsPng, SkPngCodec::NewFromStream }, |
- { SkBmpCodec::IsBmp, SkBmpCodec::NewFromStream } |
-}; |
- |
SkCodec* SkCodec::NewFromStream(SkStream* stream) { |
if (!stream) { |
return NULL; |
} |
- for (DecoderProc proc : gDecoderProcs) { |
- const bool correctFormat = proc.IsFormat(stream); |
- if (!stream->rewind()) { |
- return NULL; |
- } |
- if (correctFormat) { |
- return proc.NewFromStream(stream); |
- } |
+ SkAutoTDelete<SkStream> streamDeleter(stream); |
+ const bool isPng = SkPngCodec::IsPng(stream); |
+ // TODO: Avoid rewinding. |
+ if (!stream->rewind()) { |
+ return NULL; |
+ } |
+ if (isPng) { |
+ streamDeleter.detach(); |
+ return SkPngCodec::NewFromStream(stream); |
} |
+ // TODO: Check other image types. |
return NULL; |
} |