| Index: src/codec/SkBmpRLECodec.cpp
|
| diff --git a/src/codec/SkBmpRLECodec.cpp b/src/codec/SkBmpRLECodec.cpp
|
| index 05691cc0798481aa7cb2fdd7e4d1bc64ef930647..1b95acc830eb5178ef600de9ad5e48535b032f00 100644
|
| --- a/src/codec/SkBmpRLECodec.cpp
|
| +++ b/src/codec/SkBmpRLECodec.cpp
|
| @@ -201,7 +201,7 @@ size_t SkBmpRLECodec::checkForMoreData() {
|
| void SkBmpRLECodec::setPixel(void* dst, size_t dstRowBytes,
|
| const SkImageInfo& dstInfo, uint32_t x, uint32_t y,
|
| uint8_t index) {
|
| - if (is_coord_necessary(x, fSampleX, dstInfo.width())) {
|
| + if (dst && is_coord_necessary(x, fSampleX, dstInfo.width())) {
|
| // Set the row
|
| uint32_t row = this->getDstRow(y, dstInfo.height());
|
|
|
| @@ -234,7 +234,7 @@ void SkBmpRLECodec::setRGBPixel(void* dst, size_t dstRowBytes,
|
| const SkImageInfo& dstInfo, uint32_t x,
|
| uint32_t y, uint8_t red, uint8_t green,
|
| uint8_t blue) {
|
| - if (is_coord_necessary(x, fSampleX, dstInfo.width())) {
|
| + if (dst && is_coord_necessary(x, fSampleX, dstInfo.width())) {
|
| // Set the row
|
| uint32_t row = this->getDstRow(y, dstInfo.height());
|
|
|
| @@ -316,7 +316,9 @@ int SkBmpRLECodec::decodeRows(const SkImageInfo& info, void* dst, size_t dstRowB
|
| // Because of the need for transparent pixels, kN32 is the only color
|
| // type that makes sense for the destination format.
|
| SkASSERT(kN32_SkColorType == dstInfo.colorType());
|
| - SkSampler::Fill(dstInfo, dst, dstRowBytes, SK_ColorTRANSPARENT, opts.fZeroInitialized);
|
| + if (dst) {
|
| + SkSampler::Fill(dstInfo, dst, dstRowBytes, SK_ColorTRANSPARENT, opts.fZeroInitialized);
|
| + }
|
|
|
| // Adjust the height and the dst if the previous call to decodeRows() left us
|
| // with lines that need to be skipped.
|
| @@ -500,6 +502,13 @@ int SkBmpRLECodec::decodeRows(const SkImageInfo& info, void* dst, size_t dstRowB
|
| }
|
| }
|
|
|
| +bool SkBmpRLECodec::skipRows(int count) {
|
| + const SkImageInfo rowInfo = SkImageInfo::Make(this->getInfo().width(), count, kN32_SkColorType,
|
| + kUnpremul_SkAlphaType);
|
| +
|
| + return count == this->decodeRows(rowInfo, nullptr, 0, this->options());
|
| +}
|
| +
|
| // FIXME: Make SkBmpRLECodec have no knowledge of sampling.
|
| // Or it should do all sampling natively.
|
| // It currently is a hybrid that needs to know what SkScaledCodec is doing.
|
|
|