diff options
author | 2017-12-08 10:31:52 -0500 | |
---|---|---|
committer | 2017-12-08 15:58:00 +0000 | |
commit | 64f73764b7553148f7660e06b57d623542c63d5b (patch) | |
tree | de3a650b929eea1f43c4295ae5c3f4318b4d069c /src | |
parent | 7f5d5d2baba439a78a5a2e4f5149a17236ed84fe (diff) |
return data instead of bool
Bug: skia:
Change-Id: Id7c3044a2fce087703544c624c75a7756b9c62b4
Reviewed-on: https://skia-review.googlesource.com/82602
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkPicture.cpp | 9 | ||||
-rw-r--r-- | src/core/SkPictureCommon.h | 2 | ||||
-rw-r--r-- | src/core/SkWriteBuffer.cpp | 38 |
3 files changed, 25 insertions, 24 deletions
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp index e87439aad9..5442738368 100644 --- a/src/core/SkPicture.cpp +++ b/src/core/SkPicture.cpp @@ -273,14 +273,9 @@ bool SkPicture::PictureIOSecurityPrecautionsEnabled() { ////////////////////////////////////////////////////////////////////////////////////////////////// -bool PixelSerializer_SkSerialImageProc(SkImage* img, SkWStream* stream, void* ctx) { +sk_sp<SkData> PixelSerializer_SkSerialImageProc(SkImage* img, void* ctx) { SkASSERT(ctx); - sk_sp<SkData> enc = img->encodeToData(static_cast<SkPixelSerializer*>(ctx)); - if (enc) { - stream->write(enc->data(), enc->size()); - return true; - } - return false; + return img->encodeToData(static_cast<SkPixelSerializer*>(ctx)); } sk_sp<SkImage> ImageDeserializer_SkDeserialImageProc(const void* data, size_t length, void* ctx) { diff --git a/src/core/SkPictureCommon.h b/src/core/SkPictureCommon.h index 74d693f56b..c282f01fec 100644 --- a/src/core/SkPictureCommon.h +++ b/src/core/SkPictureCommon.h @@ -142,7 +142,7 @@ struct SkPathCounter { int fNumSlowPathsAndDashEffects; }; -bool PixelSerializer_SkSerialImageProc(SkImage*, SkWStream*, void* sk_pixelserializer); +sk_sp<SkData> PixelSerializer_SkSerialImageProc(SkImage*, void* pixelserializer); sk_sp<SkImage> ImageDeserializer_SkDeserialImageProc(const void*, size_t, void* imagedeserializer); #endif // SkPictureCommon_DEFINED diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp index 49cccd6783..bd1d64b76a 100644 --- a/src/core/SkWriteBuffer.cpp +++ b/src/core/SkWriteBuffer.cpp @@ -140,17 +140,18 @@ void SkBinaryWriteBuffer::writeImage(const SkImage* image) { this->writeInt(image->height()); auto write_data = [this](sk_sp<SkData> data, int sign) { - if (data) { - size_t size = data->size(); - if (size && sk_64_isS32(size)) { - this->write32(SkToS32(size) * sign); - this->writePad32(data->data(), size); // does nothing if size == 0 - this->write32(0); // origin-x - this->write32(0); // origin-y - return; - } + size_t size = data ? data->size() : 0; + if (!sk_64_isS32(size)) { + size = 0; // too big to store + } + if (size) { + this->write32(SkToS32(size) * sign); + this->writePad32(data->data(), size); // does nothing if size == 0 + this->write32(0); // origin-x + this->write32(0); // origin-y + } else { + this->write32(0); // signal no image } - this->write32(0); // no data or size too big }; /* @@ -159,14 +160,19 @@ void SkBinaryWriteBuffer::writeImage(const SkImage* image) { * <0 : negative (int32_t) of a custom encoded blob using SerialProcs * >0 : standard encoded blob size (use MakeFromEncoded) */ + sk_sp<SkData> data; + int sign = 1; // +1 signals standard encoder if (fProcs.fImageProc) { - SkDynamicMemoryWStream stream; - if (fProcs.fImageProc(const_cast<SkImage*>(image), &stream, fProcs.fImageCtx)) { - write_data(stream.detachAsData(), -1); // -1 signals custom encoder - return; - } + data = fProcs.fImageProc(const_cast<SkImage*>(image), fProcs.fImageCtx); + sign = -1; // +1 signals custom encoder + } + // We check data, since a custom proc can return nullptr, in which case we behave as if + // there was no custom proc. + if (!data) { + data = image->encodeToData(); + sign = 1; } - write_data(image->encodeToData(), 1); // +1 signals standard encoder + write_data(std::move(data), sign); } void SkBinaryWriteBuffer::writeTypeface(SkTypeface* obj) { |