| Index: src/core/SkReadBuffer.cpp
|
| diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp
|
| index c32c7bd658672b3531900f3484363251223f91e1..3f21078b1f17a384eee6222b8a4cbf3e13e18e2a 100644
|
| --- a/src/core/SkReadBuffer.cpp
|
| +++ b/src/core/SkReadBuffer.cpp
|
| @@ -191,7 +191,7 @@ uint32_t SkReadBuffer::getArrayCount() {
|
| return *(uint32_t*)fReader.peek();
|
| }
|
|
|
| -void SkReadBuffer::readBitmap(SkBitmap* bitmap) {
|
| +bool SkReadBuffer::readBitmap(SkBitmap* bitmap) {
|
| const int width = this->readInt();
|
| const int height = this->readInt();
|
| // The writer stored a boolean value to determine whether an SkBitmapHeap was used during
|
| @@ -204,7 +204,7 @@ void SkReadBuffer::readBitmap(SkBitmap* bitmap) {
|
| if (fBitmapStorage) {
|
| *bitmap = *fBitmapStorage->getBitmap(index);
|
| fBitmapStorage->releaseRef(index);
|
| - return;
|
| + return true;
|
| } else {
|
| // The bitmap was stored in a heap, but there is no way to access it. Set an error and
|
| // fall through to use a place holder bitmap.
|
| @@ -239,7 +239,7 @@ void SkReadBuffer::readBitmap(SkBitmap* bitmap) {
|
| #endif // DEBUG_NON_DETERMINISTIC_ASSERT
|
| // If the width and height match, there should be no offset.
|
| SkASSERT(0 == xOffset && 0 == yOffset);
|
| - return;
|
| + return true;
|
| }
|
|
|
| // This case can only be reached if extractSubset was called, so
|
| @@ -255,7 +255,7 @@ void SkReadBuffer::readBitmap(SkBitmap* bitmap) {
|
| SkIRect subset = SkIRect::MakeXYWH(xOffset, yOffset, width, height);
|
| if (bitmap->extractSubset(&subsetBm, subset)) {
|
| bitmap->swap(subsetBm);
|
| - return;
|
| + return true;
|
| }
|
| }
|
| // This bitmap was encoded when written, but we are unable to decode, possibly due to
|
| @@ -264,13 +264,20 @@ void SkReadBuffer::readBitmap(SkBitmap* bitmap) {
|
| "Could not decode bitmap. Resulting bitmap will be red.");
|
| } else {
|
| // A size of zero means the SkBitmap was simply flattened.
|
| - bitmap->unflatten(*this);
|
| - return;
|
| + if (this->isVersionLT(kNoMoreBitmapFlatten_Version)) {
|
| + SkBitmap tmp;
|
| + tmp.unflatten(*this);
|
| + // just throw this guy away
|
| + } else {
|
| + if (SkBitmap::ReadRawPixels(this, bitmap)) {
|
| + return true;
|
| + }
|
| + }
|
| }
|
| }
|
| // Could not read the SkBitmap. Use a placeholder bitmap.
|
| - bitmap->allocPixels(SkImageInfo::MakeN32Premul(width, height));
|
| - bitmap->eraseColor(SK_ColorRED);
|
| + bitmap->setConfig(SkImageInfo::MakeUnknown(width, height));
|
| + return false;
|
| }
|
|
|
| SkTypeface* SkReadBuffer::readTypeface() {
|
|
|