Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index 96a0ab1a3ef08c04b9067ca2092e7defe77ea2ff..2e2255633538b4b4c9317fa76459c48891f5c834 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -25,7 +25,6 @@ |
#include "SkRecorder.h" |
#include "SkSVGCanvas.h" |
#include "SkScaledCodec.h" |
-#include "SkScanlineDecoder.h" |
#include "SkStream.h" |
#include "SkTLogic.h" |
#include "SkXMLWriter.h" |
@@ -238,18 +237,6 @@ bool CodecSrc::veto(SinkFlags flags) const { |
|| flags.approach != SinkFlags::kDirect; |
} |
-SkScanlineDecoder* start_scanline_decoder(SkData* encoded, const SkImageInfo& info, |
- SkPMColor* colorPtr, int* colorCountPtr) { |
- SkAutoTDelete<SkScanlineDecoder> scanlineDecoder(SkScanlineDecoder::NewFromData(encoded)); |
- if (nullptr == scanlineDecoder) { |
- return nullptr; |
- } |
- if (SkCodec::kSuccess != scanlineDecoder->start(info, NULL, colorPtr, colorCountPtr)) { |
- return nullptr; |
- } |
- return scanlineDecoder.detach(); |
-} |
- |
Error CodecSrc::draw(SkCanvas* canvas) const { |
SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(fPath.c_str())); |
if (!encoded) { |
@@ -348,25 +335,24 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
break; |
} |
case kScanline_Mode: { |
- SkAutoTDelete<SkScanlineDecoder> scanlineDecoder( |
- start_scanline_decoder(encoded.get(), decodeInfo, colorPtr, colorCountPtr)); |
- if (nullptr == scanlineDecoder) { |
+ if (SkCodec::kSuccess != codec->startScanlineDecode(decodeInfo, NULL, colorPtr, |
+ colorCountPtr)) { |
return Error::Nonfatal("Could not start scanline decoder"); |
} |
SkCodec::Result result = SkCodec::kUnimplemented; |
- switch (scanlineDecoder->getScanlineOrder()) { |
- case SkScanlineDecoder::kTopDown_SkScanlineOrder: |
- case SkScanlineDecoder::kBottomUp_SkScanlineOrder: |
- case SkScanlineDecoder::kNone_SkScanlineOrder: |
- result = scanlineDecoder->getScanlines(bitmap.getAddr(0, 0), |
+ switch (codec->getScanlineOrder()) { |
+ case SkCodec::kTopDown_SkScanlineOrder: |
+ case SkCodec::kBottomUp_SkScanlineOrder: |
+ case SkCodec::kNone_SkScanlineOrder: |
+ result = codec->getScanlines(bitmap.getAddr(0, 0), |
decodeInfo.height(), bitmap.rowBytes()); |
break; |
- case SkScanlineDecoder::kOutOfOrder_SkScanlineOrder: { |
+ case SkCodec::kOutOfOrder_SkScanlineOrder: { |
for (int y = 0; y < decodeInfo.height(); y++) { |
- int dstY = scanlineDecoder->getY(); |
+ int dstY = codec->nextScanline(); |
void* dstPtr = bitmap.getAddr(0, dstY); |
- result = scanlineDecoder->getScanlines(dstPtr, 1, bitmap.rowBytes()); |
+ result = codec->getScanlines(dstPtr, 1, bitmap.rowBytes()); |
if (SkCodec::kSuccess != result && SkCodec::kIncompleteInput != result) { |
return SkStringPrintf("%s failed with error message %d", |
fPath.c_str(), (int) result); |
@@ -432,11 +418,10 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
subsetHeight + extraY : subsetHeight; |
const int y = row * subsetHeight; |
//create scanline decoder for each subset |
- SkAutoTDelete<SkScanlineDecoder> decoder(start_scanline_decoder(encoded.get(), |
- decodeInfo, colorPtr, colorCountPtr)); |
- // TODO (msarett): Support this mode for all scanline orderings. |
- if (nullptr == decoder || SkScanlineDecoder::kTopDown_SkScanlineOrder != |
- decoder->getScanlineOrder()) { |
+ if (SkCodec::kSuccess != codec->startScanlineDecode(decodeInfo, NULL, colorPtr, |
+ colorCountPtr) |
+ // TODO (msarett): Support this mode for all scanline orderings. |
+ || SkCodec::kTopDown_SkScanlineOrder != codec->getScanlineOrder()) { |
if (x == 0 && y == 0) { |
//first try, image may not be compatible |
return Error::Nonfatal("Could not start top-down scanline decoder"); |
@@ -445,7 +430,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
} |
} |
//skip to first line of subset |
- const SkCodec::Result skipResult = decoder->skipScanlines(y); |
+ const SkCodec::Result skipResult = codec->skipScanlines(y); |
switch (skipResult) { |
case SkCodec::kSuccess: |
case SkCodec::kIncompleteInput: |
@@ -461,7 +446,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
SkAssertResult(largestSubsetBm.extractSubset(&subsetBm, bounds)); |
SkAutoLockPixels autlockSubsetBm(subsetBm, true); |
const SkCodec::Result subsetResult = |
- decoder->getScanlines(buffer, currentSubsetHeight, rowBytes); |
+ codec->getScanlines(buffer, currentSubsetHeight, rowBytes); |
switch (subsetResult) { |
case SkCodec::kSuccess: |
case SkCodec::kIncompleteInput: |
@@ -501,10 +486,9 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
const int numStripes = (height + stripeHeight - 1) / stripeHeight; |
// Decode odd stripes |
- SkAutoTDelete<SkScanlineDecoder> decoder( |
- start_scanline_decoder(encoded.get(), decodeInfo, colorPtr, colorCountPtr)); |
- if (nullptr == decoder || |
- SkScanlineDecoder::kTopDown_SkScanlineOrder != decoder->getScanlineOrder()) { |
+ if (SkCodec::kSuccess != codec->startScanlineDecode(decodeInfo, NULL, colorPtr, |
+ colorCountPtr) |
+ || SkCodec::kTopDown_SkScanlineOrder != codec->getScanlineOrder()) { |
// This mode was designed to test the new skip scanlines API in libjpeg-turbo. |
// Jpegs have kTopDown_SkScanlineOrder, and at this time, it is not interesting |
// to run this test for image types that do not have this scanline ordering. |
@@ -513,7 +497,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
for (int i = 0; i < numStripes; i += 2) { |
// Skip a stripe |
const int linesToSkip = SkTMin(stripeHeight, height - i * stripeHeight); |
- SkCodec::Result result = decoder->skipScanlines(linesToSkip); |
+ SkCodec::Result result = codec->skipScanlines(linesToSkip); |
switch (result) { |
case SkCodec::kSuccess: |
case SkCodec::kIncompleteInput: |
@@ -526,7 +510,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
const int startY = (i + 1) * stripeHeight; |
const int linesToRead = SkTMin(stripeHeight, height - startY); |
if (linesToRead > 0) { |
- result = decoder->getScanlines(bitmap.getAddr(0, startY), |
+ result = codec->getScanlines(bitmap.getAddr(0, startY), |
linesToRead, bitmap.rowBytes()); |
switch (result) { |
case SkCodec::kSuccess: |
@@ -539,8 +523,8 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
} |
// Decode even stripes |
- const SkCodec::Result startResult = decoder->start(decodeInfo, nullptr, colorPtr, |
- colorCountPtr); |
+ const SkCodec::Result startResult = codec->startScanlineDecode(decodeInfo, nullptr, |
+ colorPtr, colorCountPtr); |
if (SkCodec::kSuccess != startResult) { |
return "Failed to restart scanline decoder with same parameters."; |
} |
@@ -548,7 +532,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
// Read a stripe |
const int startY = i * stripeHeight; |
const int linesToRead = SkTMin(stripeHeight, height - startY); |
- SkCodec::Result result = decoder->getScanlines(bitmap.getAddr(0, startY), |
+ SkCodec::Result result = codec->getScanlines(bitmap.getAddr(0, startY), |
linesToRead, bitmap.rowBytes()); |
switch (result) { |
case SkCodec::kSuccess: |
@@ -561,7 +545,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
// Skip a stripe |
const int linesToSkip = SkTMin(stripeHeight, height - (i + 1) * stripeHeight); |
if (linesToSkip > 0) { |
- result = decoder->skipScanlines(linesToSkip); |
+ result = codec->skipScanlines(linesToSkip); |
switch (result) { |
case SkCodec::kSuccess: |
case SkCodec::kIncompleteInput: |