| Index: src/image/SkImage_Raster.cpp
|
| diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
|
| index 5bd0e1d8f17b2977f860759c3496e6558b60fdc2..7f2f5c07ef71ed0e14348c72e4c71bb0d46b7fe9 100644
|
| --- a/src/image/SkImage_Raster.cpp
|
| +++ b/src/image/SkImage_Raster.cpp
|
| @@ -63,7 +63,7 @@ public:
|
| return true;
|
| }
|
|
|
| - SkImage_Raster(const SkImageInfo&, SkData*, size_t rb, SkColorTable*);
|
| + SkImage_Raster(const SkImageInfo&, sk_sp<SkData>, size_t rb, SkColorTable*);
|
| virtual ~SkImage_Raster();
|
|
|
| bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY, CachingHint) const override;
|
| @@ -71,7 +71,7 @@ public:
|
| SkData* onRefEncoded(GrContext*) const override;
|
| bool getROPixels(SkBitmap*, CachingHint) const override;
|
| GrTexture* asTextureRef(GrContext*, const GrTextureParams&) const override;
|
| - SkImage* onNewSubset(const SkIRect&) const override;
|
| + sk_sp<SkImage> onMakeSubset(const SkIRect&) const override;
|
|
|
| // exposed for SkSurface_Raster via SkNewImageFromPixelRef
|
| SkImage_Raster(const SkImageInfo&, SkPixelRef*, const SkIPoint& origin, size_t rowBytes);
|
| @@ -110,14 +110,13 @@ static void release_data(void* addr, void* context) {
|
| data->unref();
|
| }
|
|
|
| -SkImage_Raster::SkImage_Raster(const Info& info, SkData* data, size_t rowBytes,
|
| +SkImage_Raster::SkImage_Raster(const Info& info, sk_sp<SkData> data, size_t rowBytes,
|
| SkColorTable* ctable)
|
| : INHERITED(info.width(), info.height(), kNeedNewImageUniqueID)
|
| {
|
| - data->ref();
|
| void* addr = const_cast<void*>(data->data());
|
|
|
| - fBitmap.installPixels(info, addr, rowBytes, ctable, release_data, data);
|
| + fBitmap.installPixels(info, addr, rowBytes, ctable, release_data, data.release());
|
| fBitmap.setImmutable();
|
| fBitmap.lockPixels();
|
| }
|
| @@ -173,7 +172,7 @@ GrTexture* SkImage_Raster::asTextureRef(GrContext* ctx, const GrTextureParams& p
|
| return nullptr;
|
| }
|
|
|
| -SkImage* SkImage_Raster::onNewSubset(const SkIRect& subset) const {
|
| +sk_sp<SkImage> SkImage_Raster::onMakeSubset(const SkIRect& subset) const {
|
| // TODO : could consider heurist of sharing pixels, if subset is pretty close to complete
|
|
|
| SkImageInfo info = SkImageInfo::MakeN32(subset.width(), subset.height(), fBitmap.alphaType());
|
| @@ -184,25 +183,26 @@ SkImage* SkImage_Raster::onNewSubset(const SkIRect& subset) const {
|
| surface->getCanvas()->clear(0);
|
| surface->getCanvas()->drawImage(this, SkIntToScalar(-subset.x()), SkIntToScalar(-subset.y()),
|
| nullptr);
|
| - return surface->newImageSnapshot();
|
| + return sk_sp<SkImage>(surface->newImageSnapshot());
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -SkImage* SkImage::NewRasterCopy(const SkImageInfo& info, const void* pixels, size_t rowBytes,
|
| - SkColorTable* ctable) {
|
| +sk_sp<SkImage> SkImage::MakeRasterCopy(const SkPixmap& pmap) {
|
| size_t size;
|
| - if (!SkImage_Raster::ValidArgs(info, rowBytes, ctable != nullptr, &size) || !pixels) {
|
| + if (!SkImage_Raster::ValidArgs(pmap.info(), pmap.rowBytes(),
|
| + pmap.ctable() != nullptr, &size) || !pmap.addr()) {
|
| return nullptr;
|
| }
|
|
|
| // Here we actually make a copy of the caller's pixel data
|
| - SkAutoDataUnref data(SkData::NewWithCopy(pixels, size));
|
| - return new SkImage_Raster(info, data, rowBytes, ctable);
|
| + sk_sp<SkData> data(SkData::NewWithCopy(pmap.addr(), size));
|
| + return sk_make_sp<SkImage_Raster>(pmap.info(), std::move(data), pmap.rowBytes(), pmap.ctable());
|
| }
|
|
|
|
|
| -SkImage* SkImage::NewRasterData(const SkImageInfo& info, SkData* data, size_t rowBytes) {
|
| +sk_sp<SkImage> SkImage::MakeRasterData(const SkImageInfo& info, sk_sp<SkData> data,
|
| + size_t rowBytes) {
|
| size_t size;
|
| if (!SkImage_Raster::ValidArgs(info, rowBytes, false, &size) || !data) {
|
| return nullptr;
|
| @@ -214,30 +214,29 @@ SkImage* SkImage::NewRasterData(const SkImageInfo& info, SkData* data, size_t ro
|
| }
|
|
|
| SkColorTable* ctable = nullptr;
|
| - return new SkImage_Raster(info, data, rowBytes, ctable);
|
| + return sk_make_sp<SkImage_Raster>(info, std::move(data), rowBytes, ctable);
|
| }
|
|
|
| -SkImage* SkImage::NewFromRaster(const SkImageInfo& info, const void* pixels, size_t rowBytes,
|
| - RasterReleaseProc proc, ReleaseContext ctx) {
|
| +sk_sp<SkImage> SkImage::MakeFromRaster(const SkPixmap& pmap, RasterReleaseProc proc,
|
| + ReleaseContext ctx) {
|
| size_t size;
|
| - if (!SkImage_Raster::ValidArgs(info, rowBytes, false, &size) || !pixels) {
|
| + if (!SkImage_Raster::ValidArgs(pmap.info(), pmap.rowBytes(), false, &size) || !pmap.addr()) {
|
| return nullptr;
|
| }
|
|
|
| - SkColorTable* ctable = nullptr;
|
| - SkAutoDataUnref data(SkData::NewWithProc(pixels, size, proc, ctx));
|
| - return new SkImage_Raster(info, data, rowBytes, ctable);
|
| + sk_sp<SkData> data(SkData::NewWithProc(pmap.addr(), size, proc, ctx));
|
| + return sk_make_sp<SkImage_Raster>(pmap.info(), std::move(data), pmap.rowBytes(), pmap.ctable());
|
| }
|
|
|
| -SkImage* SkNewImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr,
|
| - const SkIPoint& pixelRefOrigin, size_t rowBytes) {
|
| +sk_sp<SkImage> SkMakeImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr,
|
| + const SkIPoint& pixelRefOrigin, size_t rowBytes) {
|
| if (!SkImage_Raster::ValidArgs(info, rowBytes, false, nullptr)) {
|
| return nullptr;
|
| }
|
| - return new SkImage_Raster(info, pr, pixelRefOrigin, rowBytes);
|
| + return sk_make_sp<SkImage_Raster>(info, pr, pixelRefOrigin, rowBytes);
|
| }
|
|
|
| -SkImage* SkNewImageFromRasterBitmap(const SkBitmap& bm, ForceCopyMode forceCopy) {
|
| +sk_sp<SkImage> SkMakeImageFromRasterBitmap(const SkBitmap& bm, ForceCopyMode forceCopy) {
|
| SkASSERT(nullptr == bm.getTexture());
|
|
|
| bool hasColorTable = false;
|
| @@ -250,16 +249,16 @@ SkImage* SkNewImageFromRasterBitmap(const SkBitmap& bm, ForceCopyMode forceCopy)
|
| return nullptr;
|
| }
|
|
|
| - SkImage* image = nullptr;
|
| + sk_sp<SkImage> image;
|
| if (kYes_ForceCopyMode == forceCopy || !bm.isImmutable()) {
|
| SkBitmap tmp(bm);
|
| tmp.lockPixels();
|
| - if (tmp.getPixels()) {
|
| - image = SkImage::NewRasterCopy(tmp.info(), tmp.getPixels(), tmp.rowBytes(),
|
| - tmp.getColorTable());
|
| + SkPixmap pmap;
|
| + if (tmp.getPixels() && tmp.peekPixels(&pmap)) {
|
| + image = SkImage::MakeRasterCopy(pmap);
|
| }
|
| } else {
|
| - image = new SkImage_Raster(bm);
|
| + image = sk_make_sp<SkImage_Raster>(bm);
|
| }
|
| return image;
|
| }
|
|
|