| 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;
|
| }
|
|
|
|
|