| Index: src/core/SkWriteBuffer.cpp
|
| diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp
|
| index 1799df1714b15e4faab98afba9c65fbd9d6e92da..1dfe0b3972c62b6b8e68cc6f6d92dc8782935b97 100644
|
| --- a/src/core/SkWriteBuffer.cpp
|
| +++ b/src/core/SkWriteBuffer.cpp
|
| @@ -186,15 +186,13 @@
|
| SkPixelRef* pixelRef = bitmap.pixelRef();
|
| if (pixelRef) {
|
| // see if the pixelref already has an encoded version
|
| - SkAutoDataUnref encodedData(pixelRef->refEncodedData());
|
| - if (encodedData) {
|
| + SkAutoDataUnref existingData(pixelRef->refEncodedData());
|
| + if (existingData.get() != nullptr) {
|
| // Assumes that if the client did not set a serializer, they are
|
| // happy to get the encoded data.
|
| - if (fPixelSerializer) {
|
| - encodedData.reset(fPixelSerializer->reencodeData(encodedData));
|
| - }
|
| - if (encodedData) {
|
| - write_encoded_bitmap(this, encodedData, bitmap.pixelRefOrigin());
|
| + if (!fPixelSerializer || fPixelSerializer->useEncodedData(existingData->data(),
|
| + existingData->size())) {
|
| + write_encoded_bitmap(this, existingData, bitmap.pixelRefOrigin());
|
| return;
|
| }
|
| }
|
| @@ -202,9 +200,12 @@
|
| // see if the caller wants to manually encode
|
| SkAutoPixmapUnlock result;
|
| if (fPixelSerializer && bitmap.requestLock(&result)) {
|
| + const SkPixmap& pmap = result.pixmap();
|
| SkASSERT(nullptr == fBitmapHeap);
|
| - SkAutoDataUnref data(fPixelSerializer->encodePixels(result.pixmap()));
|
| - if (data) {
|
| + SkAutoDataUnref data(fPixelSerializer->encodePixels(pmap.info(),
|
| + pmap.addr(),
|
| + pmap.rowBytes()));
|
| + if (data.get() != nullptr) {
|
| // if we have to "encode" the bitmap, then we assume there is no
|
| // offset to share, since we are effectively creating a new pixelref
|
| write_encoded_bitmap(this, data, SkIPoint::Make(0, 0));
|
|
|