diff options
author | Mike Reed <reed@google.com> | 2017-07-11 11:20:21 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-11 15:43:21 +0000 |
commit | dc799550e2d9965aa5b7cda496465b2a76b310a5 (patch) | |
tree | 9f5f2a1c9da5bbeab2363bae6bd8cd933019dfc3 /src | |
parent | f02fa6ffe72c596b87e277193ed82d288dbee18f (diff) |
Change image encode api to return sk_sp
Bug: skia:
Change-Id: I238289bc630be27795cb1384955dd6e887597c05
Reviewed-on: https://skia-review.googlesource.com/22208
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/c/sk_surface.cpp | 2 | ||||
-rw-r--r-- | src/core/SkWriteBuffer.cpp | 4 | ||||
-rw-r--r-- | src/image/SkImage.cpp | 32 | ||||
-rw-r--r-- | src/pdf/SkPDFBitmap.cpp | 4 | ||||
-rw-r--r-- | src/pipe/SkPipeCanvas.cpp | 4 |
5 files changed, 30 insertions, 16 deletions
diff --git a/src/c/sk_surface.cpp b/src/c/sk_surface.cpp index 7e1fb3d3ea..a77f61e85f 100644 --- a/src/c/sk_surface.cpp +++ b/src/c/sk_surface.cpp @@ -233,7 +233,7 @@ sk_image_t* sk_image_new_from_encoded(const sk_data_t* cdata, const sk_irect_t* } sk_data_t* sk_image_encode(const sk_image_t* cimage) { - return ToData(AsImage(cimage)->encode()); + return ToData(AsImage(cimage)->encodeToData().release()); } void sk_image_ref(const sk_image_t* cimage) { diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp index 3322e8a8c8..43a63c9638 100644 --- a/src/core/SkWriteBuffer.cpp +++ b/src/core/SkWriteBuffer.cpp @@ -156,7 +156,7 @@ void SkBinaryWriteBuffer::writeBitmap(const SkBitmap& bitmap) { // see if the caller wants to manually encode SkPixmap result; if (fPixelSerializer && bitmap.peekPixels(&result)) { - sk_sp<SkData> data(fPixelSerializer->encode(result)); + sk_sp<SkData> data = fPixelSerializer->encodeToData(result); if (data) { // if we have to "encode" the bitmap, then we assume there is no // offset to share, since we are effectively creating a new pixelref @@ -178,7 +178,7 @@ void SkBinaryWriteBuffer::writeImage(const SkImage* image) { this->writeInt(image->width()); this->writeInt(image->height()); - sk_sp<SkData> encoded(image->encode(this->getPixelSerializer())); + sk_sp<SkData> encoded = image->encodeToData(this->getPixelSerializer()); if (encoded && encoded->size() > 0) { write_encoded_bitmap(this, encoded.get(), SkIPoint::Make(0, 0)); return; diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 7ec7b35156..b12234989d 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -94,21 +94,21 @@ sk_sp<SkShader> SkImage::makeShader(SkShader::TileMode tileX, SkShader::TileMode return SkImageShader::Make(sk_ref_sp(const_cast<SkImage*>(this)), tileX, tileY, localMatrix); } -SkData* SkImage::encode(SkEncodedImageFormat type, int quality) const { +sk_sp<SkData> SkImage::encodeToData(SkEncodedImageFormat type, int quality) const { SkBitmap bm; SkColorSpace* legacyColorSpace = nullptr; if (as_IB(this)->getROPixels(&bm, legacyColorSpace)) { SkDynamicMemoryWStream buf; - return SkEncodeImage(&buf, bm, type, quality) ? buf.detachAsData().release() : nullptr; + return SkEncodeImage(&buf, bm, type, quality) ? buf.detachAsData() : nullptr; } return nullptr; } -SkData* SkImage::encode(SkPixelSerializer* serializer) const { - sk_sp<SkData> encoded(this->refEncoded()); +sk_sp<SkData> SkImage::encodeToData(SkPixelSerializer* serializer) const { + sk_sp<SkData> encoded(this->refEncodedData()); if (encoded && (!serializer || serializer->useEncodedData(encoded->data(), encoded->size()))) { - return encoded.release(); + return encoded; } SkBitmap bm; @@ -116,19 +116,19 @@ SkData* SkImage::encode(SkPixelSerializer* serializer) const { SkColorSpace* legacyColorSpace = nullptr; if (as_IB(this)->getROPixels(&bm, legacyColorSpace) && bm.peekPixels(&pmap)) { if (serializer) { - return serializer->encode(pmap); + return serializer->encodeToData(pmap); } else { SkDynamicMemoryWStream buf; return SkEncodeImage(&buf, pmap, SkEncodedImageFormat::kPNG, 100) - ? buf.detachAsData().release() : nullptr; + ? buf.detachAsData() : nullptr; } } return nullptr; } -SkData* SkImage::refEncoded() const { - return as_IB(this)->onRefEncoded(); +sk_sp<SkData> SkImage::refEncodedData() const { + return sk_sp<SkData>(as_IB(this)->onRefEncoded()); } sk_sp<SkImage> SkImage::MakeFromEncoded(sk_sp<SkData> encoded, const SkIRect* subset) { @@ -138,6 +138,20 @@ sk_sp<SkImage> SkImage::MakeFromEncoded(sk_sp<SkData> encoded, const SkIRect* su return SkImage::MakeFromGenerator(SkImageGenerator::MakeFromEncoded(encoded), subset); } +#ifdef SK_SUPPORT_LEGACY_IMAGE_ENCODE_API +SkData* SkImage::encode(SkEncodedImageFormat format, int quality) const { + return this->encodeToData(format, quality).release(); +} +SkData* SkImage::encode(SkPixelSerializer* serial) const { + return this->encodeToData(serial).release(); +} +SkData* SkImage::refEncoded() const { + return this->refEncodedData().release(); +} +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////// + const char* SkImage::toString(SkString* str) const { str->appendf("image: (id:%d (%d, %d) %s)", this->uniqueID(), this->width(), this->height(), this->isOpaque() ? "opaque" : ""); diff --git a/src/pdf/SkPDFBitmap.cpp b/src/pdf/SkPDFBitmap.cpp index fa09be33e6..68d5272277 100644 --- a/src/pdf/SkPDFBitmap.cpp +++ b/src/pdf/SkPDFBitmap.cpp @@ -479,7 +479,7 @@ void PDFJpegBitmap::emitObject(SkWStream* stream, sk_sp<SkPDFObject> SkPDFCreateBitmapObject(sk_sp<SkImage> image, SkPixelSerializer* pixelSerializer) { SkASSERT(image); - sk_sp<SkData> data(image->refEncoded()); + sk_sp<SkData> data = image->refEncodedData(); SkJFIFInfo info; if (data && SkIsJFIF(data.get(), &info) && (!pixelSerializer || @@ -502,7 +502,7 @@ sk_sp<SkPDFObject> SkPDFCreateBitmapObject(sk_sp<SkImage> image, SkPixmap pmap; SkColorSpace* legacyColorSpace = nullptr; if (as_IB(image.get())->getROPixels(&bm, legacyColorSpace) && bm.peekPixels(&pmap)) { - data.reset(pixelSerializer->encode(pmap)); + data = pixelSerializer->encodeToData(pmap); if (data && SkIsJFIF(data.get(), &info)) { bool yuv = info.fType == SkJFIFInfo::kYCbCr; if (info.fSize == image->dimensions()) { // Sanity check. diff --git a/src/pipe/SkPipeCanvas.cpp b/src/pipe/SkPipeCanvas.cpp index 7b665d9968..226a95725c 100644 --- a/src/pipe/SkPipeCanvas.cpp +++ b/src/pipe/SkPipeCanvas.cpp @@ -828,9 +828,9 @@ protected: static sk_sp<SkData> default_image_serializer(SkImage* image) { A8Serializer serial; - sk_sp<SkData> data(image->encode(&serial)); + sk_sp<SkData> data = image->encodeToData(&serial); if (!data) { - data.reset(image->encode()); + data = image->encodeToData(); } return data; } |