Chromium Code Reviews| Index: dm/DMSrcSink.cpp |
| diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp |
| index 88371a8e28fdf68e1e0e5e041588a3a475e4adc1..6bed84d2166086a11aef99070b6edc4b152d3a5e 100644 |
| --- a/dm/DMSrcSink.cpp |
| +++ b/dm/DMSrcSink.cpp |
| @@ -8,7 +8,7 @@ |
| #include "DMSrcSink.h" |
| #include "SamplePipeControllers.h" |
| #include "SkCodec.h" |
| -#include "SkCodecTools.h" |
| +#include "SkCodecPriv.h" |
| #include "SkCommonFlags.h" |
| #include "SkData.h" |
| #include "SkDocument.h" |
| @@ -86,7 +86,7 @@ static SkBitmapRegionDecoderInterface* create_brd(Path path, |
| SkBitmapRegionDecoderInterface::Strategy strategy) { |
| SkAutoTUnref<SkData> encoded(SkData::NewFromFileName(path.c_str())); |
| if (!encoded) { |
| - return NULL; |
| + return nullptr; |
| } |
| return SkBitmapRegionDecoderInterface::CreateBitmapRegionDecoder(new SkMemoryStream(encoded), |
| strategy); |
| @@ -244,7 +244,7 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
| if (!encoded) { |
| return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
| } |
| - SkAutoTDelete<SkCodec> codec(NULL); |
| + SkAutoTDelete<SkCodec> codec(nullptr); |
| if (kScaledCodec_Mode == fMode) { |
| codec.reset(SkScaledCodec::NewFromData(encoded)); |
| // TODO (msarett): This should fall through to a fatal error once we support scaled |
| @@ -400,9 +400,6 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
| return SkStringPrintf("Image(%s) is too large (%d x %d)\n", fPath.c_str(), |
| largestSubsetDecodeInfo.width(), largestSubsetDecodeInfo.height()); |
| } |
| - const size_t rowBytes = decodeInfo.minRowBytes(); |
| - char* buffer = new char[largestSubsetDecodeInfo.height() * rowBytes]; |
| - SkAutoTDeleteArray<char> lineDeleter(buffer); |
| for (int col = 0; col < divisor; col++) { |
| //currentSubsetWidth may be larger than subsetWidth for rightmost subsets |
| const int currentSubsetWidth = (col + 1 == divisor) ? |
| @@ -414,10 +411,13 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
| subsetHeight + extraY : subsetHeight; |
| const int y = row * subsetHeight; |
| //create scanline decoder for each subset |
| - if (SkCodec::kSuccess != codec->startScanlineDecode(decodeInfo, NULL, colorPtr, |
| - colorCountPtr) |
| - // TODO (msarett): Support this mode for all scanline orderings. |
| - || SkCodec::kTopDown_SkScanlineOrder != codec->getScanlineOrder()) { |
| + SkCodec::Options options; |
| + SkIRect subset = SkIRect::MakeXYWH(x, 0, currentSubsetWidth, h); |
| + options.fSubset = ⊂ |
| + // TODO (msarett): Support this mode for all scanline orderings. |
| + if (SkCodec::kSuccess != codec->startScanlineDecode(decodeInfo, &options, |
| + colorPtr, colorCountPtr) || |
| + 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"); |
| @@ -433,22 +433,14 @@ Error CodecSrc::draw(SkCanvas* canvas) const { |
| codec->skipScanlines(y); |
| //create and set size of subsetBm |
| - SkBitmap subsetBm; |
| + SkBitmap bitmap; |
|
scroggo
2015/10/08 20:16:07
Why did you change this name? The comment above no
msarett
2015/10/09 20:03:44
Can't remember. Changing it back sorry.
|
| SkIRect bounds = SkIRect::MakeWH(currentSubsetWidth, currentSubsetHeight); |
| - SkAssertResult(largestSubsetBm.extractSubset(&subsetBm, bounds)); |
| - SkAutoLockPixels autlockSubsetBm(subsetBm, true); |
| - codec->getScanlines(buffer, currentSubsetHeight, rowBytes); |
| - |
| - const size_t bpp = decodeInfo.bytesPerPixel(); |
| - char* bufferRow = buffer; |
| - for (int subsetY = 0; subsetY < currentSubsetHeight; ++subsetY) { |
| - memcpy(subsetBm.getAddr(0, subsetY), bufferRow + x*bpp, |
| - currentSubsetWidth*bpp); |
| - bufferRow += rowBytes; |
| - } |
| - |
| - subsetBm.notifyPixelsChanged(); |
| - canvas->drawBitmap(subsetBm, SkIntToScalar(x), SkIntToScalar(y)); |
| + SkAssertResult(largestSubsetBm.extractSubset(&bitmap, bounds)); |
| + SkAutoLockPixels autolock(bitmap, true); |
| + codec->getScanlines(bitmap.getAddr(0, 0), currentSubsetHeight, |
| + bitmap.rowBytes()); |
| + bitmap.notifyPixelsChanged(); |
| + canvas->drawBitmap(bitmap, SkIntToScalar(x), SkIntToScalar(y)); |
| } |
| } |
| break; |