aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image/SkImage.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-09-28 09:58:41 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-28 09:58:41 -0700
commitc9e190ddac3d193e89e580ea3819a55c28f15e61 (patch)
tree0ed534fa007d732ad9d90f33f604e0e845ee2ce4 /src/image/SkImage.cpp
parent25a5b0dd0c9e94d508b8a9f4de1f977e63775bd1 (diff)
Revert of change pixel-serializer to support reencoding existing data (patchset #5 id:80001 of https://codereview.chromium.org/1373683003/ )
Reason for revert: Need to somehow get access to encoders in chrome -- link error on the roll since SkImageEncoder is not built as part of chrome. Original issue's description: > change pixel-serializer to support reencoding existing data > > Trying to evolve this interface so it can > - support rich set of backend-encoders (including ones like ETC1 that can cheaply convert to KXT > - allow for encoding images as well as bitmaps (e.g. for picture serialization) > - perhaps replace SkImageEncoder as an API (assuming we create a factory that returns a serializer given a format) > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/13f48dc85aa68a60da66aaf39c93d527d11d1278 TBR=scroggo@google.com,msarett@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1371983003
Diffstat (limited to 'src/image/SkImage.cpp')
-rw-r--r--src/image/SkImage.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 240c06e63b..ee76a7ea39 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -74,14 +74,6 @@ SkShader* SkImage::newShader(SkShader::TileMode tileX,
}
SkData* SkImage::encode(SkImageEncoder::Type type, int quality) const {
- SkAutoDataUnref encoded(this->refEncoded());
- if (encoded) {
- SkAutoDataUnref reencoded(SkImageEncoder::ReencodeData(encoded, type));
- if (reencoded) {
- return reencoded.detach();
- }
- }
-
SkBitmap bm;
if (as_IB(this)->getROPixels(&bm)) {
return SkImageEncoder::EncodeData(bm, type, quality);
@@ -93,6 +85,10 @@ namespace {
class DefaultSerializer : public SkPixelSerializer {
protected:
+ bool onUseEncodedData(const void *data, size_t len) override {
+ return true;
+ }
+
SkData* onEncodePixels(const SkImageInfo& info, const void* pixels, size_t rowBytes) override {
return SkImageEncoder::EncodeData(info, pixels, rowBytes, SkImageEncoder::kPNG_Type, 100);
}
@@ -105,17 +101,15 @@ SkData* SkImage::encode(SkPixelSerializer* serializer) const {
SkPixelSerializer* effectiveSerializer = serializer ? serializer : &defaultSerializer;
SkAutoTUnref<SkData> encoded(this->refEncoded());
- if (encoded) {
- encoded.reset(effectiveSerializer->reencodeData(encoded));
- if (encoded) {
- return encoded.detach();
- }
+ if (encoded && effectiveSerializer->useEncodedData(encoded->data(), encoded->size())) {
+ return encoded.detach();
}
SkBitmap bm;
SkAutoPixmapUnlock apu;
if (as_IB(this)->getROPixels(&bm) && bm.requestLock(&apu)) {
- return effectiveSerializer->encodePixels(apu.pixmap());
+ const SkPixmap& pmap = apu.pixmap();
+ return effectiveSerializer->encodePixels(pmap.info(), pmap.addr(), pmap.rowBytes());
}
return nullptr;