diff options
author | 2018-04-24 15:00:59 -0400 | |
---|---|---|
committer | 2018-04-24 19:38:16 +0000 | |
commit | 7886995ae92a5fcd8f10ab19581678b38f7cc969 (patch) | |
tree | 99939172d36fb31aea93f63e6a8e5a9e472e6937 /src/core | |
parent | 47728258b05a1ae040ed03aee53eabbaa0acbc5a (diff) |
Make SkColorSpace::Make(skcms_ICCProfile) stricter
Don't do any modification to the incoming profile.
Basically, if you want this to succeed, call
skcms_EnsureUsableAsDestinationWithSingleCurve first.
Change-Id: Iafe3fd3c82c2fb2cc0e42b1968a69bf605be241c
Reviewed-on: https://skia-review.googlesource.com/123521
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkColorSpaceXform_skcms.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/core/SkColorSpaceXform_skcms.cpp b/src/core/SkColorSpaceXform_skcms.cpp index 936f7e4dd5..bc5b3a23dc 100644 --- a/src/core/SkColorSpaceXform_skcms.cpp +++ b/src/core/SkColorSpaceXform_skcms.cpp @@ -133,12 +133,23 @@ sk_sp<SkColorSpace> SkColorSpace::Make(const skcms_ICCProfile* profile) { return nullptr; } - skcms_TransferFunction tf = skcms_BestSingleCurve(profile); - SkColorSpaceTransferFn skia_tf; - memcpy(&skia_tf, &tf, sizeof(skia_tf)); - SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); toXYZD50.set3x3RowMajorf(&profile->toXYZD50.vals[0][0]); + if (!toXYZD50.invert(nullptr)) { + return nullptr; + } + + const skcms_Curve* trc = profile->trc; + if (trc[0].table_entries || + trc[1].table_entries || + trc[2].table_entries || + memcmp(&trc[0].parametric, &trc[1].parametric, sizeof(trc[0].parametric)) || + memcmp(&trc[0].parametric, &trc[2].parametric, sizeof(trc[0].parametric))) { + return nullptr; + } + + SkColorSpaceTransferFn skia_tf; + memcpy(&skia_tf, &profile->trc[0].parametric, sizeof(skia_tf)); return SkColorSpace::MakeRGB(skia_tf, toXYZD50); } |