diff options
-rw-r--r-- | include/core/SkColorSpace.h | 8 | ||||
-rw-r--r-- | src/core/SkColorSpaceXform_skcms.cpp | 16 | ||||
-rw-r--r-- | tests/ColorSpaceTest.cpp | 2 | ||||
-rw-r--r-- | tests/ICCTest.cpp | 4 |
4 files changed, 16 insertions, 14 deletions
diff --git a/include/core/SkColorSpace.h b/include/core/SkColorSpace.h index 6d8408d3bd..2bc297efe0 100644 --- a/include/core/SkColorSpace.h +++ b/include/core/SkColorSpace.h @@ -130,7 +130,13 @@ public: /** * Create an SkColorSpace from a parsed (skcms) ICC profile. */ - static sk_sp<SkColorSpace> Make(const skcms_ICCProfile*); + static sk_sp<SkColorSpace> Make(const skcms_ICCProfile&); + + // TODO: cleanup in Chromium + static inline sk_sp<SkColorSpace> Make(const skcms_ICCProfile* p) { + SkASSERT(p); + return SkColorSpace::Make(*p); + } /** * Types of colorspaces. diff --git a/src/core/SkColorSpaceXform_skcms.cpp b/src/core/SkColorSpaceXform_skcms.cpp index 549db8f1a6..5305b9bffd 100644 --- a/src/core/SkColorSpaceXform_skcms.cpp +++ b/src/core/SkColorSpaceXform_skcms.cpp @@ -126,26 +126,22 @@ std::unique_ptr<SkColorSpaceXform> MakeSkcmsXform(SkColorSpace* src, SkColorSpac return skstd::make_unique<SkColorSpaceXform_skcms>(srcProfile, dstProfile, premulFormat); } -sk_sp<SkColorSpace> SkColorSpace::Make(const skcms_ICCProfile* profile) { - if (!profile) { +sk_sp<SkColorSpace> SkColorSpace::Make(const skcms_ICCProfile& profile) { + if (!profile.has_toXYZD50 || !profile.has_trc) { return nullptr; } - if (!profile->has_toXYZD50 || !profile->has_trc) { - return nullptr; - } - - if (skcms_ApproximatelyEqualProfiles(profile, skcms_sRGB_profile())) { + if (skcms_ApproximatelyEqualProfiles(&profile, skcms_sRGB_profile())) { return SkColorSpace::MakeSRGB(); } SkMatrix44 toXYZD50(SkMatrix44::kUninitialized_Constructor); - toXYZD50.set3x3RowMajorf(&profile->toXYZD50.vals[0][0]); + toXYZD50.set3x3RowMajorf(&profile.toXYZD50.vals[0][0]); if (!toXYZD50.invert(nullptr)) { return nullptr; } - const skcms_Curve* trc = profile->trc; + const skcms_Curve* trc = profile.trc; if (trc[0].table_entries || trc[1].table_entries || trc[2].table_entries || @@ -155,7 +151,7 @@ sk_sp<SkColorSpace> SkColorSpace::Make(const skcms_ICCProfile* profile) { } SkColorSpaceTransferFn skia_tf; - memcpy(&skia_tf, &profile->trc[0].parametric, sizeof(skia_tf)); + memcpy(&skia_tf, &profile.trc[0].parametric, sizeof(skia_tf)); return SkColorSpace::MakeRGB(skia_tf, toXYZD50); } diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp index e95c528ea5..d1eb75efe4 100644 --- a/tests/ColorSpaceTest.cpp +++ b/tests/ColorSpaceTest.cpp @@ -438,7 +438,7 @@ DEF_TEST(ColorSpace_IsSRGB, r) { #if defined(SK_USE_SKCMS) DEF_TEST(ColorSpace_skcms_IsSRGB, r) { - sk_sp<SkColorSpace> srgb = SkColorSpace::Make(skcms_sRGB_profile()); + sk_sp<SkColorSpace> srgb = SkColorSpace::Make(*skcms_sRGB_profile()); REPORTER_ASSERT(r, srgb->isSRGB()); } #endif diff --git a/tests/ICCTest.cpp b/tests/ICCTest.cpp index af01fc9ff8..e88255b2cd 100644 --- a/tests/ICCTest.cpp +++ b/tests/ICCTest.cpp @@ -36,7 +36,7 @@ skcms_ICCProfile parsed; REPORTER_ASSERT(r, skcms_Parse(profile->data(), profile->size(), &parsed)); - sk_sp<SkColorSpace> got = SkColorSpace::Make(&parsed); + sk_sp<SkColorSpace> got = SkColorSpace::Make(parsed); REPORTER_ASSERT(r, got); REPORTER_ASSERT(r, SkColorSpace::Equals(got.get(), test.want.get())); @@ -64,7 +64,7 @@ skcms_ICCProfile parsed; REPORTER_ASSERT(r, skcms_Parse(profile->data(), profile->size(), &parsed)); - auto got = SkColorSpace::Make(&parsed); + auto got = SkColorSpace::Make(parsed); auto want = SkColorSpace::MakeRGB(g2Dot2_TransferFn, SkColorSpace::kAdobeRGB_Gamut); REPORTER_ASSERT(r, SkColorSpace::Equals(got.get(), want.get())); } |