| Index: src/pipe/SkGPipeRead.cpp
|
| diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp
|
| index f47f3bfe657875d8fb8d16ada4294f06c3cf7162..090168aff19c921b49c0109804682eeabfd275e3 100644
|
| --- a/src/pipe/SkGPipeRead.cpp
|
| +++ b/src/pipe/SkGPipeRead.cpp
|
| @@ -132,7 +132,16 @@ public:
|
| } else {
|
| bm = fBitmaps[index];
|
| }
|
| - bm->unflatten(*fReader);
|
| + // When adding bitmaps, never use the bitmap storage. Bitmaps will always
|
| + // be either unflattened or decoded. Since bitmap storage takes priority in
|
| + // readBitmap, remove the bitmap storage and set it back afterwards.
|
| + SkBitmapHeapReader* storage = fReader->getBitmapStorage();
|
| + // The storage must be either this or the fSharedHeap, depending on fFlags.
|
| + SkASSERT((shouldFlattenBitmaps(fFlags) && this == storage)
|
| + || (!shouldFlattenBitmaps(fFlags) && fSharedHeap == storage && storage != NULL));
|
| + fReader->setBitmapStorage(NULL);
|
| + fReader->readBitmap(bm);
|
| + fReader->setBitmapStorage(storage);
|
| }
|
|
|
| /**
|
| @@ -772,12 +781,14 @@ SkGPipeState::~SkGPipeState() {
|
| SkGPipeReader::SkGPipeReader() {
|
| fCanvas = NULL;
|
| fState = NULL;
|
| + fProc = NULL;
|
| }
|
|
|
| SkGPipeReader::SkGPipeReader(SkCanvas* target) {
|
| fCanvas = NULL;
|
| this->setCanvas(target);
|
| fState = NULL;
|
| + fProc = NULL;
|
| }
|
|
|
| void SkGPipeReader::setCanvas(SkCanvas *target) {
|
| @@ -805,6 +816,7 @@ SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length,
|
|
|
| const ReadProc* table = gReadTable;
|
| SkOrderedReadBuffer reader(data, length);
|
| + reader.setBitmapDecoder(fProc);
|
| SkCanvas* canvas = fCanvas;
|
| Status status = kEOF_Status;
|
|
|
|
|