aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpaceXformSteps.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2018-05-24 13:59:58 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-24 18:36:41 +0000
commit7d8276cbabab1357d0a5ac4f6bc37e4f6b0a80d3 (patch)
tree381a6f3db9f7cf83738ca0c80b8de491696a1885 /src/core/SkColorSpaceXformSteps.cpp
parent6968f9ce54a627254ff91206df6c78de99930c89 (diff)
skip gamut transform when identity
Change-Id: I3bb3ec19ee856ce4070a58a57b3bb8e8a170a5b9 Reviewed-on: https://skia-review.googlesource.com/130024 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.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/core/SkColorSpaceXformSteps.cpp b/src/core/SkColorSpaceXformSteps.cpp
index 0067a70934..cc69192bd9 100644
--- a/src/core/SkColorSpaceXformSteps.cpp
+++ b/src/core/SkColorSpaceXformSteps.cpp
@@ -58,7 +58,20 @@ SkColorSpaceXformSteps::SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType sr
this->late_unpremul = !srcNL && srcPM;
// Step 2) transform source colors into destination gamut
- this->gamut_transform = true;
+ this->gamut_transform = (src->toXYZD50Hash() != dst->toXYZD50Hash());
+
+ if (this->gamut_transform && src->toXYZD50() && dst->fromXYZD50()) {
+ auto xform = SkMatrix44(*src->toXYZD50(), *dst->fromXYZD50());
+ if (xform.get(3,0) == 0 && xform.get(3,1) == 0 && xform.get(3,2) == 0 &&
+ xform.get(3,3) == 1 &&
+ xform.get(0,3) == 0 && xform.get(1,3) == 0 && xform.get(2,3) == 0) {
+
+ for (int r = 0; r < 3; r++)
+ for (int c = 0; c < 3; c++) {
+ this->src_to_dst_matrix[3*r+c] = xform.get(r,c);
+ }
+ }
+ }
// Step 3) encode with dst transfer function if dst has non-linear blending
this->early_encode = dstNL;