Chromium Code Reviews| Index: src/image/SkImage_Raster.cpp |
| diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp |
| index 5bd0e1d8f17b2977f860759c3496e6558b60fdc2..2f0894fd936cc8d35282c4eeeae133b7a2f99b3a 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(), data, pmap.rowBytes(), pmap.ctable()); |
|
f(malita)
2016/03/10 18:12:15
move(data)?
reed1
2016/03/10 19:12:56
Done.
|
| } |
| -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, data, rowBytes, ctable); |
|
f(malita)
2016/03/10 18:12:15
move(data)?
reed1
2016/03/10 19:12:56
Done.
|
| } |
| -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(), data, pmap.rowBytes(), pmap.ctable()); |
|
f(malita)
2016/03/10 18:12:15
move(data)?
reed1
2016/03/10 19:12:56
Done.
|
| } |
| -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; |
| } |