Index: src/codec/SkCodec_wbmp.cpp |
diff --git a/src/codec/SkCodec_wbmp.cpp b/src/codec/SkCodec_wbmp.cpp |
index 22f2bacce0d22f4fb4246a7f8c06338c1f09be17..61f64219c1af8ed1d85fb34823934e0ea15389f5 100644 |
--- a/src/codec/SkCodec_wbmp.cpp |
+++ b/src/codec/SkCodec_wbmp.cpp |
@@ -107,7 +107,8 @@ SkCodec::Result SkWbmpCodec::onGetPixels(const SkImageInfo& info, |
size_t rowBytes, |
const Options& options, |
SkPMColor ctable[], |
- int* ctableCount) { |
+ int* ctableCount, |
+ int* incompleteScanlines) { |
if (!this->rewindIfNeeded()) { |
return kCouldNotRewind; |
} |
@@ -140,6 +141,7 @@ SkCodec::Result SkWbmpCodec::onGetPixels(const SkImageInfo& info, |
for (int y = 0; y < size.height(); ++y) { |
Result rowResult = this->readRow(src.get()); |
if (kSuccess != rowResult) { |
+ *incompleteScanlines = size.height() - y; |
return rowResult; |
} |
swizzler->swizzle(dstRow, src.get()); |
@@ -169,24 +171,24 @@ public: |
* Takes ownership of all pointer paramters. |
*/ |
SkWbmpScanlineDecoder(SkWbmpCodec* codec) |
- : INHERITED(codec->getInfo()) |
+ : INHERITED(codec, codec->getInfo()) |
, fCodec(codec) |
, fColorTable(nullptr) |
, fSwizzler(nullptr) |
, fSrcBuffer(codec->fSrcRowBytes) |
{} |
- SkCodec::Result onGetScanlines(void* dst, int count, size_t dstRowBytes) override { |
+ uint32_t onGetScanlines(void* dst, int count, size_t dstRowBytes) override { |
void* dstRow = dst; |
for (int y = 0; y < count; ++y) { |
SkCodec::Result rowResult = fCodec->readRow(fSrcBuffer.get()); |
if (SkCodec::kSuccess != rowResult) { |
- return rowResult; |
+ return y; |
} |
fSwizzler->swizzle(dstRow, fSrcBuffer.get()); |
dstRow = SkTAddOffset<void>(dstRow, dstRowBytes); |
} |
- return SkCodec::kSuccess; |
+ return count; |
} |
SkCodec::Result onStart(const SkImageInfo& dstInfo, |
@@ -232,7 +234,7 @@ public: |
} |
private: |
- SkAutoTDelete<SkWbmpCodec> fCodec; |
+ SkWbmpCodec* fCodec; // Owned by parent class |
SkAutoTUnref<SkColorTable> fColorTable; |
SkAutoTDelete<SkSwizzler> fSwizzler; |
SkAutoTMalloc<uint8_t> fSrcBuffer; |