aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpaceXformSteps.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2018-05-24 15:36:09 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-24 20:31:08 +0000
commit77418559ca0921a944007d084852408ee76273e5 (patch)
treee4a3f514209412786f7b70e12e7dfa904d82c361 /src/core/SkColorSpaceXformSteps.cpp
parenta06f215a7ddab3ce002a69d5b3187e628077c200 (diff)
skip transfer functions when not needed
Change-Id: I72e1084e6a14b3c1fa3f0a5c2100f13c6bcb24c7 Reviewed-on: https://skia-review.googlesource.com/130062 Commit-Queue: Mike Klein <mtklein@chromium.org> Auto-Submit: Mike Klein <mtklein@chromium.org> Reviewed-by: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/core/SkColorSpaceXformSteps.cpp')
-rw-r--r--src/core/SkColorSpaceXformSteps.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/SkColorSpaceXformSteps.cpp b/src/core/SkColorSpaceXformSteps.cpp
index c05bf6304e..08a59fc672 100644
--- a/src/core/SkColorSpaceXformSteps.cpp
+++ b/src/core/SkColorSpaceXformSteps.cpp
@@ -83,4 +83,23 @@ SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType sr
// Step II) if dst has linear blending, encode back using dst transfer function before storing
this->late_encode = !dstNL;
+
+ // Fill out all the transfer functions we'll use:
+ SkColorSpaceTransferFn srcTF, dstTF;
+ SkAssertResult(src->isNumericalTransferFn(&srcTF));
+ SkAssertResult(dst->isNumericalTransferFn(&dstTF));
+ this->srcTFInv = srcTF.invert();
+ this->dstTF = dstTF;
+ this->dstTFInv = dstTF.invert();
+
+ // If we linearize then immediately reencode with the same transfer function, skip both.
+ if ( this->linearize_src &&
+ !this->late_unpremul &&
+ !this->gamut_transform &&
+ this->early_encode &&
+ 0 == memcmp(&srcTF, &dstTF, sizeof(SkColorSpaceTransferFn)))
+ {
+ this->linearize_src = false;
+ this->early_encode = false;
+ }
}