| Index: dm/DMSrcSink.cpp
|
| diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
|
| index 5ca66c50e207c4809f41396e907d354d4d78a17d..3de6e06ed9428345b458dab00e536f070233c5f7 100644
|
| --- a/dm/DMSrcSink.cpp
|
| +++ b/dm/DMSrcSink.cpp
|
| @@ -9,11 +9,12 @@
|
| #include "SkOSFile.h"
|
| #include "SkPictureRecorder.h"
|
| #include "SkRandom.h"
|
| -#include "SkSVGCanvas.h"
|
| +#include "SkScanlineDecoder.h"
|
| #include "SkStream.h"
|
| +#include "SkSVGCanvas.h"
|
| #include "SkXMLWriter.h"
|
|
|
| -DEFINE_bool(codec, false, "Use SkCodec instead of SkImageDecoder");
|
| +DEFINE_bool(codec, true, "Use SkCodec instead of SkImageDecoder");
|
|
|
| namespace DM {
|
|
|
| @@ -68,19 +69,29 @@ Error ImageSrc::draw(SkCanvas* canvas) const {
|
| info.width(), info.height());
|
| }
|
| SkAutoLockPixels alp(bitmap);
|
| - const SkImageGenerator::Result result = codec->getPixels(info, bitmap.getPixels(),
|
| - bitmap.rowBytes());
|
| - switch (result) {
|
| - case SkImageGenerator::kSuccess:
|
| - // We consider incomplete to be valid, since we should still decode what is
|
| - // available.
|
| - case SkImageGenerator::kIncompleteInput:
|
| - break;
|
| - case SkImageGenerator::kInvalidConversion:
|
| - return Error::Nonfatal("Incompatible colortype conversion");
|
| - default:
|
| - // Everything else is considered a failure.
|
| - return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str());
|
| + SkAutoTDelete<SkScanlineDecoder> scanlineDecoder(codec->getScanlineDecoder(info));
|
| + if (NULL == scanlineDecoder) {
|
| + return Error::Nonfatal("Cannot use scanline decoder for all images");
|
| + }
|
| +
|
| + for (int y = 0; y < info.height(); ++y) {
|
| + const SkImageGenerator::Result result =
|
| + scanlineDecoder->getNextScanline(bitmap.getAddr(0, y));
|
| + switch (result) {
|
| + case SkImageGenerator::kSuccess:
|
| + // We consider incomplete to be valid, since we should still decode what is
|
| + // available.
|
| + case SkImageGenerator::kIncompleteInput:
|
| + break;
|
| + default:
|
| + // Everything else is considered a failure.
|
| + return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str());
|
| + }
|
| + }
|
| +
|
| + const SkImageGenerator::Result result = scanlineDecoder->finish();
|
| + if (result != SkImageGenerator::kSuccess) {
|
| + return SkStringPrintf("failed in finish!");
|
| }
|
| } else {
|
| if (!SkImageDecoder::DecodeMemory(encoded->data(), encoded->size(), &bitmap,
|
|
|