Index: src/core/SkPictureData.cpp |
diff --git a/src/core/SkPictureData.cpp b/src/core/SkPictureData.cpp |
index 873c0c4a1d913c9e78205273bde25ef14aad721e..f86fa816776237f82cf05d2a071fb12c684c7863 100644 |
--- a/src/core/SkPictureData.cpp |
+++ b/src/core/SkPictureData.cpp |
@@ -365,7 +365,7 @@ static uint32_t pictInfoFlagsToReadBufferFlags(uint32_t pictInfoFlags) { |
bool SkPictureData::parseStreamTag(SkStream* stream, |
uint32_t tag, |
uint32_t size, |
- SkPicture::InstallPixelRefProc proc, |
+ SkImageDeserializer* factory, |
SkTypefacePlayback* topLevelTFPlayback) { |
/* |
* By the time we encounter BUFFER_SIZE_TAG, we need to have already seen |
@@ -418,7 +418,7 @@ bool SkPictureData::parseStreamTag(SkStream* stream, |
fPictureCount = 0; |
fPictureRefs = new const SkPicture* [size]; |
for (uint32_t i = 0; i < size; i++) { |
- fPictureRefs[i] = SkPicture::MakeFromStream(stream, proc, topLevelTFPlayback).release(); |
+ fPictureRefs[i] = SkPicture::MakeFromStream(stream, factory, topLevelTFPlayback).release(); |
if (!fPictureRefs[i]) { |
return false; |
} |
@@ -440,7 +440,7 @@ bool SkPictureData::parseStreamTag(SkStream* stream, |
return false; |
} |
fFactoryPlayback->setupBuffer(buffer); |
- buffer.setBitmapDecoder(proc); |
+ buffer.setImageDeserializer(factory); |
if (fTFPlayback.count() > 0) { |
// .skp files <= v43 have typefaces serialized with each sub picture. |
@@ -467,7 +467,11 @@ bool SkPictureData::parseStreamTag(SkStream* stream, |
} |
static const SkImage* create_image_from_buffer(SkReadBuffer& buffer) { |
- return buffer.readImage(); |
+ return buffer.readImage().release(); |
+} |
+ |
+static const SkImage* create_bitmap_image_from_buffer(SkReadBuffer& buffer) { |
+ return buffer.readBitmapAsImage().release(); |
} |
// Need a shallow wrapper to return const SkPicture* to match the other factories, |
@@ -517,16 +521,23 @@ bool new_array_from_buffer(SkReadBuffer& buffer, uint32_t inCount, |
bool SkPictureData::parseBufferTag(SkReadBuffer& buffer, uint32_t tag, uint32_t size) { |
switch (tag) { |
case SK_PICT_BITMAP_BUFFER_TAG: { |
+#if 0 |
const int count = SkToInt(size); |
fBitmaps.reset(count); |
for (int i = 0; i < count; ++i) { |
SkBitmap* bm = &fBitmaps[i]; |
- if (buffer.readBitmap(bm)) { |
+ if (buffer.legacy_readBitmap(bm)) { |
bm->setImmutable(); |
} else { |
return false; |
} |
} |
+#else |
+ if (!new_array_from_buffer(buffer, size, &fBitmapImageRefs, &fBitmapImageCount, |
+ create_bitmap_image_from_buffer)) { |
+ return false; |
+ } |
+#endif |
} break; |
case SK_PICT_PAINT_BUFFER_TAG: { |
const int count = SkToInt(size); |
@@ -585,14 +596,14 @@ bool SkPictureData::parseBufferTag(SkReadBuffer& buffer, uint32_t tag, uint32_t |
SkPictureData* SkPictureData::CreateFromStream(SkStream* stream, |
const SkPictInfo& info, |
- SkPicture::InstallPixelRefProc proc, |
+ SkImageDeserializer* factory, |
SkTypefacePlayback* topLevelTFPlayback) { |
SkAutoTDelete<SkPictureData> data(new SkPictureData(info)); |
if (!topLevelTFPlayback) { |
topLevelTFPlayback = &data->fTFPlayback; |
} |
- if (!data->parseStream(stream, proc, topLevelTFPlayback)) { |
+ if (!data->parseStream(stream, factory, topLevelTFPlayback)) { |
return nullptr; |
} |
return data.release(); |
@@ -610,7 +621,7 @@ SkPictureData* SkPictureData::CreateFromBuffer(SkReadBuffer& buffer, |
} |
bool SkPictureData::parseStream(SkStream* stream, |
- SkPicture::InstallPixelRefProc proc, |
+ SkImageDeserializer* factory, |
SkTypefacePlayback* topLevelTFPlayback) { |
for (;;) { |
uint32_t tag = stream->readU32(); |
@@ -619,7 +630,7 @@ bool SkPictureData::parseStream(SkStream* stream, |
} |
uint32_t size = stream->readU32(); |
- if (!this->parseStreamTag(stream, tag, size, proc, topLevelTFPlayback)) { |
+ if (!this->parseStreamTag(stream, tag, size, factory, topLevelTFPlayback)) { |
return false; // we're invalid |
} |
} |