Index: dm/DMSrcSink.cpp |
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
index b1e280d289b1fcfde5af751bdf6e641b1963164f..69c1e0ba481aa0b4c6c8a35edc5cfe5424935aa3 100644 |
--- a/dm/DMSrcSink.cpp |
+++ b/dm/DMSrcSink.cpp |
@@ -642,10 +642,9 @@ Name CodecSrc::name() const { |
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
-AndroidCodecSrc::AndroidCodecSrc(Path path, Mode mode, CodecSrc::DstColorType dstColorType, |
+AndroidCodecSrc::AndroidCodecSrc(Path path, CodecSrc::DstColorType dstColorType, |
SkAlphaType dstAlphaType, int sampleSize) |
: fPath(path) |
- , fMode(mode) |
, fDstColorType(dstColorType) |
, fDstAlphaType(dstAlphaType) |
, fSampleSize(sampleSize) |
@@ -712,84 +711,17 @@ Error AndroidCodecSrc::draw(SkCanvas* canvas) const { |
options.fColorCount = colorCountPtr; |
options.fSampleSize = fSampleSize; |
- switch (fMode) { |
- case kFullImage_Mode: { |
- switch (codec->getAndroidPixels(decodeInfo, bitmap.getPixels(), bitmap.rowBytes(), |
- &options)) { |
- case SkCodec::kSuccess: |
- case SkCodec::kIncompleteInput: |
- break; |
- default: |
- return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str()); |
- } |
- premultiply_if_necessary(bitmap); |
- swap_rb_if_necessary(bitmap, fDstColorType); |
- canvas->drawBitmap(bitmap, 0, 0); |
- return ""; |
- } |
- case kDivisor_Mode: { |
- const int width = codec->getInfo().width(); |
- const int height = codec->getInfo().height(); |
- const int divisor = 2; |
- if (width < divisor || height < divisor) { |
- return Error::Nonfatal("Divisor is larger than image dimension."); |
- } |
- |
- // Keep track of the final decoded dimensions. |
- int finalScaledWidth = 0; |
- int finalScaledHeight = 0; |
- for (int x = 0; x < divisor; x++) { |
- for (int y = 0; y < divisor; y++) { |
- // Calculate the subset dimensions |
- int subsetWidth = width / divisor; |
- int subsetHeight = height / divisor; |
- const int left = x * subsetWidth; |
- const int top = y * subsetHeight; |
- |
- // Increase the size of the last subset in each row or column, when the |
- // divisor does not divide evenly into the image dimensions |
- subsetWidth += (x + 1 == divisor) ? (width % divisor) : 0; |
- subsetHeight += (y + 1 == divisor) ? (height % divisor) : 0; |
- SkIRect subset = SkIRect::MakeXYWH(left, top, subsetWidth, subsetHeight); |
- if (!codec->getSupportedSubset(&subset)) { |
- return "Could not get supported subset to decode."; |
- } |
- options.fSubset = ⊂ |
- const int scaledWidthOffset = subset.left() / fSampleSize; |
- const int scaledHeightOffset = subset.top() / fSampleSize; |
- void* pixels = bitmap.getAddr(scaledWidthOffset, scaledHeightOffset); |
- SkISize scaledSubsetSize = codec->getSampledSubsetDimensions(fSampleSize, |
- subset); |
- SkImageInfo subsetDecodeInfo = decodeInfo.makeWH(scaledSubsetSize.width(), |
- scaledSubsetSize.height()); |
- |
- if (x + 1 == divisor && y + 1 == divisor) { |
- finalScaledWidth = scaledWidthOffset + scaledSubsetSize.width(); |
- finalScaledHeight = scaledHeightOffset + scaledSubsetSize.height(); |
- } |
- |
- switch (codec->getAndroidPixels(subsetDecodeInfo, pixels, bitmap.rowBytes(), |
- &options)) { |
- case SkCodec::kSuccess: |
- case SkCodec::kIncompleteInput: |
- break; |
- default: |
- return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str()); |
- } |
- } |
- } |
- |
- SkRect rect = SkRect::MakeXYWH(0, 0, (SkScalar) finalScaledWidth, |
- (SkScalar) finalScaledHeight); |
- premultiply_if_necessary(bitmap); |
- swap_rb_if_necessary(bitmap, fDstColorType); |
- canvas->drawBitmapRect(bitmap, rect, rect, nullptr); |
- return ""; |
- } |
+ switch (codec->getAndroidPixels(decodeInfo, bitmap.getPixels(), bitmap.rowBytes(), &options)) { |
+ case SkCodec::kSuccess: |
+ case SkCodec::kIncompleteInput: |
+ break; |
default: |
- SkASSERT(false); |
- return "Error: Should not be reached."; |
+ return SkStringPrintf("Couldn't getPixels %s.", fPath.c_str()); |
} |
+ premultiply_if_necessary(bitmap); |
+ swap_rb_if_necessary(bitmap, fDstColorType); |
+ canvas->drawBitmap(bitmap, 0, 0); |
+ return ""; |
} |
SkISize AndroidCodecSrc::size() const { |