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, |