aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/codec/SkCodecImageGenerator.cpp
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-03-24 16:31:19 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-03 18:32:42 +0000
commitd531ca038fac8acb3320a78c393c002ca59768fe (patch)
tree2d9891fae706bf8aa7972dda94b01cb6a56cf45c /src/codec/SkCodecImageGenerator.cpp
parent8576014d8a8b799b30dbee4b9d86571fc4781807 (diff)
Use SkTransferFunctionBehavior in SkImageGenerator
This fixes SkColorSpaceXformCanvas gms that expect non-linear premuls from the codec. BUG=skia: Change-Id: I5dc236d0cd760c23605a26e9c33ddb18955f9231 Reviewed-on: https://skia-review.googlesource.com/10164 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/codec/SkCodecImageGenerator.cpp')
-rw-r--r--src/codec/SkCodecImageGenerator.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/codec/SkCodecImageGenerator.cpp b/src/codec/SkCodecImageGenerator.cpp
index 56ca21eb76..6467033371 100644
--- a/src/codec/SkCodecImageGenerator.cpp
+++ b/src/codec/SkCodecImageGenerator.cpp
@@ -37,8 +37,19 @@ SkData* SkCodecImageGenerator::onRefEncodedData(GrContext* ctx) {
bool SkCodecImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
SkPMColor ctable[], int* ctableCount) {
- SkCodec::Result result = fCodec->getPixels(info, pixels, rowBytes, nullptr, ctable,
- ctableCount);
+ Options opts;
+ opts.fColorTable = ctable;
+ opts.fColorTableCount = ctableCount;
+ opts.fBehavior = SkTransferFunctionBehavior::kRespect;
+ return this->onGetPixels(info, pixels, rowBytes, opts);
+}
+
+bool SkCodecImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, size_t rowBytes,
+ const Options& opts) {
+ SkCodec::Options codecOpts;
+ codecOpts.fPremulBehavior = opts.fBehavior;
+ SkCodec::Result result = fCodec->getPixels(info, pixels, rowBytes, &codecOpts, opts.fColorTable,
+ opts.fColorTableCount);
switch (result) {
case SkCodec::kSuccess:
case SkCodec::kIncompleteInput: