| Index: src/pipe/SkPipeReader.cpp
|
| diff --git a/src/pipe/SkPipeReader.cpp b/src/pipe/SkPipeReader.cpp
|
| index d4375486d09a62c7da26c27440b072105355fc21..52ca69c3b1e13dc2ed7c641e50e81c567ec64519 100644
|
| --- a/src/pipe/SkPipeReader.cpp
|
| +++ b/src/pipe/SkPipeReader.cpp
|
| @@ -689,7 +689,7 @@ static sk_sp<SkImage> make_from_encoded(const sk_sp<SkData>& data) {
|
| return image;
|
| }
|
|
|
| -static void defineImage_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanvas* canvas) {
|
| +static void defineImage_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanvas*) {
|
| SkASSERT(SkPipeVerb::kDefineImage == unpack_verb(packedVerb));
|
| SkPipeInflator* inflator = (SkPipeInflator*)reader.getInflator();
|
| uint32_t extra = unpack_verb_extra(packedVerb);
|
| @@ -867,27 +867,40 @@ sk_sp<SkPicture> SkPipeDeserializer::readPicture(const void* data, size_t size)
|
|
|
| sk_sp<SkImage> SkPipeDeserializer::readImage(const void* data, size_t size) {
|
| if (size < sizeof(uint32_t)) {
|
| + SkDebugf("-------- data length too short for readImage %d\n", size);
|
| return nullptr;
|
| }
|
|
|
| - uint32_t header;
|
| - memcpy(&header, data, 4); size -= 4; data = (const char*)data + 4;
|
| - if (kDefineImage_ExtPipeVerb != header) {
|
| - return nullptr;
|
| - }
|
| + const uint32_t* ptr = (const uint32_t*)data;
|
| + uint32_t packedVerb = *ptr++;
|
| + size -= 4;
|
|
|
| - SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures,
|
| - &fImpl->fTypefaces, &fImpl->fFactories,
|
| - fImpl->fTFDeserializer);
|
| - SkPipeReader reader(this, data, size);
|
| - reader.setInflator(&inflator);
|
| - return sk_sp<SkImage>(reader.readImage());
|
| + switch (unpack_verb(packedVerb)) {
|
| + case SkPipeVerb::kWriteImage:
|
| + break;
|
| + case SkPipeVerb::kDefineImage: {
|
| + SkPipeInflator inflator(&fImpl->fImages, &fImpl->fPictures,
|
| + &fImpl->fTypefaces, &fImpl->fFactories,
|
| + fImpl->fTFDeserializer);
|
| + SkPipeReader reader(this, ptr, size);
|
| + reader.setInflator(&inflator);
|
| + defineImage_handler(reader, packedVerb, nullptr);
|
| + } break;
|
| + default:
|
| + SkDebugf("-------- unexpected verb for readImage %d\n", unpack_verb(packedVerb));
|
| + return nullptr;
|
| + }
|
| + int index = unpack_verb_extra(packedVerb);
|
| + if (0 == index) {
|
| + return nullptr; // writer failed
|
| + }
|
| + return sk_ref_sp(fImpl->fImages.get(index - 1));
|
| }
|
|
|
| static bool do_playback(SkPipeReader& reader, SkCanvas* canvas, int* endPictureIndex) {
|
| int indent = 0;
|
|
|
| - const bool showEachVerb = false;
|
| + const bool showEachVerb = true;
|
| int counter = 0;
|
| while (!reader.eof()) {
|
| uint32_t prevOffset = reader.offset();
|
|
|