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