aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpaceXform_A2B.cpp
diff options
context:
space:
mode:
authorGravatar Ravi Mistry <rmistry@google.com>2016-12-17 01:26:51 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-12-17 01:27:10 +0000
commiteb733fbf56538838a36814c75cd03f917462cb22 (patch)
tree2ac19e158200809964bffad6d5ca1794c84c4d8f /src/core/SkColorSpaceXform_A2B.cpp
parent2ee084e73056b0ad76b721017f576168b7306da3 (diff)
Revert "WIP: Skia support library for ICC tasks"
This reverts commit fc8dc3194acb959ee5980b41766660ca0644bcab. Reason for revert: Breaks Build-Mac-Clang-Arm7-{Debug,Release}-iOS builds. Example tasks: * https://chromium-swarm.appspot.com/task?id=3322f668620b9e10&refresh=10 * https://chromium-swarm.appspot.com/task?id=332296146331e810&refresh=10 Original change's description: > WIP: Skia support library for ICC tasks > > As a starting point, this would be mostly trivial to implement using > SkColorSpace. > > This also would give us the flexibility to begin to move all of > the ICC related code from SkColorSpace to SkICC. > > What are the advantages of moving this away from SkColorSpace? > (1) A long term goal (once Chrome uses SkCodec), might be to > move SkColorSpace::MakeICC() out of the public API. That way, > we can guarantee that we can draw to/from *any* SkColorSpace. > (2) Keeps SkColorSpace separate from ICC-specific representations > like SkColorSpaceTransferFn etc. > > BUG=skia: > > Change-Id: Iddeb9903221fb57fbfc01218d8641c928b4a5165 > Reviewed-on: https://skia-review.googlesource.com/5676 > Commit-Queue: Matt Sarett <msarett@google.com> > Reviewed-by: Brian Osman <brianosman@google.com> > Reviewed-by: Mike Reed <reed@google.com> > TBR=mtklein@google.com,msarett@google.com,brianosman@google.com,reed@google.com,reviews@skia.org BUG=skia: NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Ibdf272fce25892402bd3e85595fb8814cdf59856 Reviewed-on: https://skia-review.googlesource.com/6232 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
Diffstat (limited to 'src/core/SkColorSpaceXform_A2B.cpp')
-rw-r--r--src/core/SkColorSpaceXform_A2B.cpp56
1 files changed, 34 insertions, 22 deletions
diff --git a/src/core/SkColorSpaceXform_A2B.cpp b/src/core/SkColorSpaceXform_A2B.cpp
index cb8dd57f9d..83f1d910ae 100644
--- a/src/core/SkColorSpaceXform_A2B.cpp
+++ b/src/core/SkColorSpaceXform_A2B.cpp
@@ -69,19 +69,35 @@ bool SkColorSpaceXform_A2B::onApply(ColorFormat dstFormat, void* dst, ColorForma
return true;
}
-static inline bool gamma_to_parametric(SkColorSpaceTransferFn* coeffs, const SkGammas& gammas,
- int channel) {
+static inline SkColorSpaceTransferFn value_to_parametric(float exp) {
+ return {exp, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f};
+}
+
+static inline SkColorSpaceTransferFn gammanamed_to_parametric(SkGammaNamed gammaNamed) {
+ switch (gammaNamed) {
+ case kLinear_SkGammaNamed:
+ return value_to_parametric(1.f);
+ case kSRGB_SkGammaNamed:
+ return {2.4f, (1.f / 1.055f), (0.055f / 1.055f), 0.f, 0.04045f, (1.f / 12.92f), 0.f};
+ case k2Dot2Curve_SkGammaNamed:
+ return value_to_parametric(2.2f);
+ default:
+ SkASSERT(false);
+ return {-1.f, -1.f, -1.f, -1.f, -1.f, -1.f, -1.f};
+ }
+}
+
+static inline SkColorSpaceTransferFn gamma_to_parametric(const SkGammas& gammas, int channel) {
switch (gammas.type(channel)) {
case SkGammas::Type::kNamed_Type:
- return named_to_parametric(coeffs, gammas.data(channel).fNamed);
+ return gammanamed_to_parametric(gammas.data(channel).fNamed);
case SkGammas::Type::kValue_Type:
- value_to_parametric(coeffs, gammas.data(channel).fValue);
- return true;
+ return value_to_parametric(gammas.data(channel).fValue);
case SkGammas::Type::kParam_Type:
- *coeffs = gammas.params(channel);
- return true;
+ return gammas.params(channel);
default:
- return false;
+ SkASSERT(false);
+ return {-1.f, -1.f, -1.f, -1.f, -1.f, -1.f, -1.f};
}
}
static inline SkColorSpaceTransferFn invert_parametric(const SkColorSpaceTransferFn& fn) {
@@ -167,10 +183,6 @@ SkColorSpaceXform_A2B::SkColorSpaceXform_A2B(SkColorSpace_A2B* srcSpace,
currentChannels = e.outputChannels();
switch (e.type()) {
case SkColorSpace_A2B::Element::Type::kGammaNamed:
- if (kLinear_SkGammaNamed == e.gammaNamed()) {
- break;
- }
-
// take the fast path for 3-channel named gammas
if (3 == currentChannels) {
if (k2Dot2Curve_SkGammaNamed == e.gammaNamed()) {
@@ -184,11 +196,12 @@ SkColorSpaceXform_A2B::SkColorSpaceXform_A2B(SkColorSpace_A2B* srcSpace,
break;
}
}
-
- SkCSXformPrintf("Gamma stage added: %s\n", debugGammaNamed[(int)e.gammaNamed()]);
- SkColorSpaceTransferFn fn;
- SkAssertResult(named_to_parametric(&fn, e.gammaNamed()));
- this->addTransferFns(fn, currentChannels);
+ if (kLinear_SkGammaNamed != e.gammaNamed()) {
+ SkCSXformPrintf("Gamma stage added: %s\n",
+ debugGammaNamed[(int)e.gammaNamed()]);
+ SkColorSpaceTransferFn fn = gammanamed_to_parametric(e.gammaNamed());
+ this->addTransferFns(fn, currentChannels);
+ }
break;
case SkColorSpace_A2B::Element::Type::kGammas: {
const SkGammas& gammas = e.gammas();
@@ -208,8 +221,7 @@ SkColorSpaceXform_A2B::SkColorSpaceXform_A2B(SkColorSpace_A2B* srcSpace,
this->addTableFn(table, channel);
gammaNeedsRef = true;
} else {
- SkColorSpaceTransferFn fn;
- SkAssertResult(gamma_to_parametric(&fn, gammas, channel));
+ SkColorSpaceTransferFn fn = gamma_to_parametric(gammas, channel);
this->addTransferFn(fn, channel);
}
}
@@ -289,9 +301,9 @@ SkColorSpaceXform_A2B::SkColorSpaceXform_A2B(SkColorSpace_A2B* srcSpace,
this->addTableFn(table, channel);
} else {
- SkColorSpaceTransferFn fn;
- SkAssertResult(gamma_to_parametric(&fn, gammas, channel));
- this->addTransferFn(invert_parametric(fn), channel);
+ SkColorSpaceTransferFn fn =
+ invert_parametric(gamma_to_parametric(gammas, channel));
+ this->addTransferFn(fn, channel);
}
}
}