194 SkPicture::SkPicture(SkStream* stream) : SkRefCnt() {
195 const uint32_t pictureVersion = stream->readU32();
196 if (pictureVersion != PICTURE_VERSION_ICS &&
197 pictureVersion != PICTURE_VERSION_JB) {
198 sk_throw();
199 }
200
201 fWidth = stream->readU32();
202 fHeight = stream->readU32();
203
204 fRecord = NULL;
205 fPlayback = NULL;
206
207 if (stream->readBool()) {
208 fPlayback = SkNEW_ARGS(SkPicturePlayback, (stream, pictureVersion));
209 }
210 }
395 SkPicturePlayback::SkPicturePlayback(SkStream* stream, uint32_t pictureVersion) {
396 this->init();
397
398 int i;
399
400 {
401 size_t size = readTagSize(stream, PICT_READER_TAG);
402 void* storage = sk_malloc_throw(size);
403 stream->read(storage, size);
404 fReader.setMemory(storage, size);
405 fReader.setPictureVersion(pictureVersion);
406 }
407
408 int factoryCount = readTagSize(stream, PICT_FACTORY_TAG);
409 fFactoryPlayback = SkNEW_ARGS(SkFactoryPlayback, (factoryCount));
410 for (i = 0; i < factoryCount; i++) {
411 SkString str;
412 int len = stream->readPackedUInt();
413 str.resize(len);
414 stream->read(str.writable_str(), len);
415
416 fFactoryPlayback->base()[i] = SkFlattenable::NameToFactory(str.c_str());
417 }