Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index fd1331366dd34b07761e57e5c5e91e13dc4cea9f..f883a4f3d0f348122b6ce20a460a0a4fdfb11b25 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -158,11 +158,13 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
break; |
} |
case kScanline_Mode: { |
- SkAutoTDelete<SkScanlineDecoder> scanlineDecoder(codec->getScanlineDecoder( |
- decodeInfo, NULL, colorPtr, colorCountPtr)); |
- if (NULL == scanlineDecoder) { |
+ SkAutoTDelete<SkScanlineDecoder> scanlineDecoder( |
+ SkScanlineDecoder::NewFromData(encoded)); |
+ if (NULL == scanlineDecoder || SkCodec::kSuccess != |
+ scanlineDecoder->reset(decodeInfo, NULL, colorPtr, colorCountPtr)) { |
return Error::Nonfatal("Cannot use scanline decoder for all images"); |
} |
+ |
const SkCodec::Result result = scanlineDecoder->getScanlines( |
bitmap.getAddr(0, 0), decodeInfo.height(), bitmap.rowBytes()); |
switch (result) { |
@@ -221,8 +223,11 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
const int y = row * subsetHeight; |
//create scanline decoder for each subset |
SkAutoTDelete<SkScanlineDecoder> subsetScanlineDecoder( |
- codec->getScanlineDecoder(decodeInfo, NULL, colorPtr, colorCountPtr)); |
- if (NULL == subsetScanlineDecoder) { |
+ SkScanlineDecoder::NewFromData(encoded)); |
+ if (NULL == subsetScanlineDecoder || SkCodec::kSuccess != |
+ subsetScanlineDecoder->reset( |
+ decodeInfo, NULL, colorPtr, colorCountPtr)) |
+ { |
if (x == 0 && y == 0) { |
//first try, image may not be compatible |
return Error::Nonfatal("Cannot use scanline decoder for all images"); |
@@ -287,9 +292,9 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
const int numStripes = (height + stripeHeight - 1) / stripeHeight; |
// Decode odd stripes |
- SkAutoTDelete<SkScanlineDecoder> decoder( |
- codec->getScanlineDecoder(decodeInfo, NULL, colorPtr, colorCountPtr)); |
- if (NULL == decoder) { |
+ SkAutoTDelete<SkScanlineDecoder> decoder(SkScanlineDecoder::NewFromData(encoded)); |
+ if (NULL == decoder || SkCodec::kSuccess != |
+ decoder->reset(decodeInfo, NULL, colorPtr, colorCountPtr)) { |
return Error::Nonfatal("Cannot use scanline decoder for all images"); |
} |
for (int i = 0; i < numStripes; i += 2) { |
@@ -321,9 +326,10 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
} |
// Decode even stripes |
- decoder.reset(codec->getScanlineDecoder(decodeInfo, NULL, colorPtr, colorCountPtr)); |
- if (NULL == decoder) { |
- return "Failed to create second scanline decoder."; |
+ const SkCodec::Result resetResult = decoder->reset(decodeInfo, NULL, colorPtr, |
+ colorCountPtr); |
+ if (SkCodec::kSuccess != resetResult) { |
+ return "Failed to reset scanline decoder with same parameters."; |
} |
for (int i = 0; i < numStripes; i += 2) { |
// Read a stripe |