| Index: src/codec/SkScaledCodec.cpp
|
| diff --git a/src/codec/SkScaledCodec.cpp b/src/codec/SkScaledCodec.cpp
|
| index 951ab27b1c73def82b545237fe485e4dab58390a..f44dc8effb770cee15894215905fad783e49c44c 100644
|
| --- a/src/codec/SkScaledCodec.cpp
|
| +++ b/src/codec/SkScaledCodec.cpp
|
| @@ -21,13 +21,13 @@ SkCodec* SkScaledCodec::NewFromStream(SkStream* stream) {
|
| return SkWebpCodec::NewFromStream(stream);
|
| }
|
|
|
| - SkAutoTDelete<SkScanlineDecoder> scanlineDecoder(SkScanlineDecoder::NewFromStream(stream));
|
| - if (nullptr == scanlineDecoder) {
|
| + SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream));
|
| + if (nullptr == codec) {
|
| return nullptr;
|
| }
|
|
|
| // wrap in new SkScaledCodec
|
| - return new SkScaledCodec(scanlineDecoder.detach());
|
| + return new SkScaledCodec(codec.detach());
|
| }
|
|
|
| SkCodec* SkScaledCodec::NewFromData(SkData* data) {
|
| @@ -37,9 +37,9 @@ SkCodec* SkScaledCodec::NewFromData(SkData* data) {
|
| return NewFromStream(new SkMemoryStream(data));
|
| }
|
|
|
| -SkScaledCodec::SkScaledCodec(SkScanlineDecoder* scanlineDecoder)
|
| - : INHERITED(scanlineDecoder->getInfo(), nullptr)
|
| - , fScanlineDecoder(scanlineDecoder)
|
| +SkScaledCodec::SkScaledCodec(SkCodec* codec)
|
| + : INHERITED(codec->getInfo(), nullptr)
|
| + , fCodec(codec)
|
| {}
|
|
|
| SkScaledCodec::~SkScaledCodec() {}
|
| @@ -78,12 +78,12 @@ static SkISize best_scaled_dimensions(const SkISize& origDims, const SkISize& na
|
| * Return a valid set of output dimensions for this decoder, given an input scale
|
| */
|
| SkISize SkScaledCodec::onGetScaledDimensions(float desiredScale) const {
|
| - SkISize nativeDimensions = fScanlineDecoder->getScaledDimensions(desiredScale);
|
| + SkISize nativeDimensions = fCodec->getScaledDimensions(desiredScale);
|
| // support scaling down by integer numbers. Ex: 1/2, 1/3, 1/4 ...
|
| SkISize scaledCodecDimensions;
|
| if (desiredScale > 0.5f) {
|
| // sampleSize = 1
|
| - scaledCodecDimensions = fScanlineDecoder->getInfo().dimensions();
|
| + scaledCodecDimensions = fCodec->getInfo().dimensions();
|
| }
|
| // sampleSize determines the step size between samples
|
| // Ex: sampleSize = 2, sample every second pixel in x and y directions
|
| @@ -185,19 +185,19 @@ SkCodec::Result SkScaledCodec::onGetPixels(const SkImageInfo& requestedInfo, voi
|
| return kUnimplemented;
|
| }
|
|
|
| - Result result = fScanlineDecoder->start(requestedInfo, &options, ctable, ctableCount);
|
| + Result result = fCodec->start(requestedInfo, &options, ctable, ctableCount);
|
| if (kSuccess == result) {
|
| // native decode supported
|
| - switch (fScanlineDecoder->getScanlineOrder()) {
|
| - case SkScanlineDecoder::kTopDown_SkScanlineOrder:
|
| - case SkScanlineDecoder::kBottomUp_SkScanlineOrder:
|
| - case SkScanlineDecoder::kNone_SkScanlineOrder:
|
| - return fScanlineDecoder->getScanlines(dst, requestedInfo.height(), rowBytes);
|
| - case SkScanlineDecoder::kOutOfOrder_SkScanlineOrder: {
|
| + switch (fCodec->getScanlineOrder()) {
|
| + case SkCodec::kTopDown_SkScanlineOrder:
|
| + case SkCodec::kBottomUp_SkScanlineOrder:
|
| + case SkCodec::kNone_SkScanlineOrder:
|
| + return fCodec->getScanlines(dst, requestedInfo.height(), rowBytes);
|
| + case SkCodec::kOutOfOrder_SkScanlineOrder: {
|
| for (int y = 0; y < requestedInfo.height(); y++) {
|
| - int dstY = fScanlineDecoder->getY();
|
| + int dstY = fCodec->getY();
|
| void* dstPtr = SkTAddOffset<void>(dst, rowBytes * dstY);
|
| - result = fScanlineDecoder->getScanlines(dstPtr, 1, rowBytes);
|
| + result = fCodec->getScanlines(dstPtr, 1, rowBytes);
|
| // FIXME (msarett): Make the SkCodec base class take care of filling
|
| // uninitialized pixels so we can return immediately on kIncompleteInput.
|
| if (kSuccess != result && kIncompleteInput != result) {
|
| @@ -217,38 +217,38 @@ SkCodec::Result SkScaledCodec::onGetPixels(const SkImageInfo& requestedInfo, voi
|
| // scaling requested
|
| int sampleX;
|
| int sampleY;
|
| - if (!scaling_supported(requestedInfo, fScanlineDecoder->getInfo(), &sampleX, &sampleY)) {
|
| + if (!scaling_supported(requestedInfo, fCodec->getInfo(), &sampleX, &sampleY)) {
|
| return kInvalidScale;
|
| }
|
| // set first sample pixel in y direction
|
| int Y0 = get_start_coord(sampleY);
|
|
|
| int dstHeight = requestedInfo.height();
|
| - int srcHeight = fScanlineDecoder->getInfo().height();
|
| + int srcHeight = fCodec->getInfo().height();
|
|
|
| SkImageInfo info = requestedInfo;
|
| - // use original height as scanlineDecoder does not support y sampling natively
|
| + // use original height as codec does not support y sampling natively
|
| info = info.makeWH(requestedInfo.width(), srcHeight);
|
|
|
| - // update scanlineDecoder with new info
|
| - result = fScanlineDecoder->start(info, &options, ctable, ctableCount);
|
| + // update codec with new info
|
| + result = fCodec->start(info, &options, ctable, ctableCount);
|
| if (kSuccess != result) {
|
| return result;
|
| }
|
|
|
| - switch(fScanlineDecoder->getScanlineOrder()) {
|
| - case SkScanlineDecoder::kTopDown_SkScanlineOrder: {
|
| - result = fScanlineDecoder->skipScanlines(Y0);
|
| + switch(fCodec->getScanlineOrder()) {
|
| + case SkCodec::kTopDown_SkScanlineOrder: {
|
| + result = fCodec->skipScanlines(Y0);
|
| if (kSuccess != result && kIncompleteInput != result) {
|
| return result;
|
| }
|
| for (int y = 0; y < dstHeight; y++) {
|
| - result = fScanlineDecoder->getScanlines(dst, 1, rowBytes);
|
| + result = fCodec->getScanlines(dst, 1, rowBytes);
|
| if (kSuccess != result && kIncompleteInput != result) {
|
| return result;
|
| }
|
| if (y < dstHeight - 1) {
|
| - result = fScanlineDecoder->skipScanlines(sampleY - 1);
|
| + result = fCodec->skipScanlines(sampleY - 1);
|
| if (kSuccess != result && kIncompleteInput != result) {
|
| return result;
|
| }
|
| @@ -257,18 +257,18 @@ SkCodec::Result SkScaledCodec::onGetPixels(const SkImageInfo& requestedInfo, voi
|
| }
|
| return result;
|
| }
|
| - case SkScanlineDecoder::kBottomUp_SkScanlineOrder:
|
| - case SkScanlineDecoder::kOutOfOrder_SkScanlineOrder: {
|
| + case SkCodec::kBottomUp_SkScanlineOrder:
|
| + case SkCodec::kOutOfOrder_SkScanlineOrder: {
|
| for (int y = 0; y < srcHeight; y++) {
|
| - int srcY = fScanlineDecoder->getY();
|
| + int srcY = fCodec->getY();
|
| if (is_coord_necessary(srcY, sampleY, dstHeight)) {
|
| void* dstPtr = SkTAddOffset<void>(dst, rowBytes * get_dst_coord(srcY, sampleY));
|
| - result = fScanlineDecoder->getScanlines(dstPtr, 1, rowBytes);
|
| + result = fCodec->getScanlines(dstPtr, 1, rowBytes);
|
| if (kSuccess != result && kIncompleteInput != result) {
|
| return result;
|
| }
|
| } else {
|
| - result = fScanlineDecoder->skipScanlines(1);
|
| + result = fCodec->skipScanlines(1);
|
| if (kSuccess != result && kIncompleteInput != result) {
|
| return result;
|
| }
|
| @@ -276,10 +276,10 @@ SkCodec::Result SkScaledCodec::onGetPixels(const SkImageInfo& requestedInfo, voi
|
| }
|
| return result;
|
| }
|
| - case SkScanlineDecoder::kNone_SkScanlineOrder: {
|
| + case SkCodec::kNone_SkScanlineOrder: {
|
| SkAutoMalloc storage(srcHeight * rowBytes);
|
| uint8_t* storagePtr = static_cast<uint8_t*>(storage.get());
|
| - result = fScanlineDecoder->getScanlines(storagePtr, srcHeight, rowBytes);
|
| + result = fCodec->getScanlines(storagePtr, srcHeight, rowBytes);
|
| if (kSuccess != result && kIncompleteInput != result) {
|
| return result;
|
| }
|
|
|