aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/imagegeneratorexternal.cpp
diff options
context:
space:
mode:
authorGravatar Florin Malita <fmalita@chromium.org>2016-11-23 10:49:20 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-25 00:12:32 +0000
commit58cda8fa495225bbcb3d93bdd7f81ec515402475 (patch)
tree6c6dd374be3a738c93259653ac50652dacb0b5ce /gm/imagegeneratorexternal.cpp
parentdb0199b31752d42031b930504b134d6efd82be5d (diff)
External image generator API: return an SkPixmap instead of SkImage
R=reed@google.com BUG=skia:5806 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5134 Change-Id: Ib0215f63b67f4d5b619ebe1f1b70c7d95e604871 Reviewed-on: https://skia-review.googlesource.com/5134 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'gm/imagegeneratorexternal.cpp')
-rw-r--r--gm/imagegeneratorexternal.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/gm/imagegeneratorexternal.cpp b/gm/imagegeneratorexternal.cpp
index 7427dd424e..b6e86c4126 100644
--- a/gm/imagegeneratorexternal.cpp
+++ b/gm/imagegeneratorexternal.cpp
@@ -14,6 +14,10 @@
namespace {
+void release_proc(void*, void* releaseCtx) {
+ reinterpret_cast<SkImage*>(releaseCtx)->unref();
+}
+
class ExternalGenerator : public SkImageGenerator {
public:
ExternalGenerator(const SkISize size)
@@ -53,10 +57,11 @@ protected:
const SkScalar scale = SkTMin(scaleSize.width(), scaleSize.height());
const int lvl = SkScalarFloorToInt(-SkScalarLog2(scale));
- rec->fImage = fMips[SkTPin(lvl, 0, fMips.count())];
+ const sk_sp<SkImage>& img = fMips[SkTPin(lvl, 0, fMips.count())];
+ SkAssertResult(img->peekPixels(&rec->fPixmap));
const SkRect origBounds = SkRect::Make(this->getInfo().bounds());
- const SkRect newBounds = SkRect::Make(rec->fImage->bounds());
+ const SkRect newBounds = SkRect::Make(img->bounds());
SkMatrix srcMap = SkMatrix::MakeScale(newBounds.width() / origBounds.width(),
newBounds.height() / origBounds.height());
@@ -65,6 +70,9 @@ protected:
rec->fQuality = kLow_SkFilterQuality;
+ rec->fReleaseProc = release_proc;
+ rec->fReleaseCtx = SkRef(img.get());
+
return true;
}