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