diff options
author | msarett <msarett@google.com> | 2016-09-28 11:15:27 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-28 11:15:27 -0700 |
commit | 7802c3db24effa6f3186bff7490a2a8dd85d2a70 (patch) | |
tree | 7b567fbaf9fd54ebdddd48e970bbf56b027930bd | |
parent | e08c1d35bab4a3995234f2a226da9eb9775a98ad (diff) |
Move toXYZD50() to SkColorSpace_Base
SkColorSpace needs to become more versatile, in order to support
profiles that cannot specified with just a "to XYZ D50" matrix.
This a just first step to clean up the public API.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2381553002
Review-Url: https://codereview.chromium.org/2381553002
-rw-r--r-- | include/core/SkColorSpace.h | 9 | ||||
-rw-r--r-- | src/core/SkColorSpace.cpp | 20 | ||||
-rw-r--r-- | src/core/SkColorSpaceXform.cpp | 2 | ||||
-rw-r--r-- | src/core/SkColorSpace_Base.h | 2 | ||||
-rw-r--r-- | src/gpu/GrColorSpaceXform.cpp | 2 | ||||
-rw-r--r-- | tests/ColorSpaceTest.cpp | 4 | ||||
-rw-r--r-- | tests/SurfaceTest.cpp | 2 | ||||
-rw-r--r-- | tests/TestConfigParsing.cpp | 10 | ||||
-rw-r--r-- | tools/visualize_color_gamut.cpp | 8 |
9 files changed, 25 insertions, 34 deletions
diff --git a/include/core/SkColorSpace.h b/include/core/SkColorSpace.h index a6a800d140..a96f622095 100644 --- a/include/core/SkColorSpace.h +++ b/include/core/SkColorSpace.h @@ -70,11 +70,6 @@ public: sk_sp<SkColorSpace> makeLinearGamma(); /** - * Returns the matrix used to transform src gamut to XYZ D50. - */ - const SkMatrix44& toXYZD50() const { return fToXYZD50; } - - /** * Returns true if the color space gamma is near enough to be approximated as sRGB. */ bool gammaCloseToSRGB() const; @@ -105,9 +100,7 @@ public: static bool Equals(const SkColorSpace* src, const SkColorSpace* dst); protected: - SkColorSpace(const SkMatrix44& toXYZD50); - - const SkMatrix44 fToXYZD50; + SkColorSpace() {} }; #endif diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp index 225cfe1464..c6bf4b9431 100644 --- a/src/core/SkColorSpace.cpp +++ b/src/core/SkColorSpace.cpp @@ -10,26 +10,22 @@ #include "SkColorSpacePriv.h" #include "SkOnce.h" -SkColorSpace::SkColorSpace(const SkMatrix44& toXYZD50) - : fToXYZD50(toXYZD50) -{} - SkColorSpace_Base::SkColorSpace_Base(SkGammaNamed gammaNamed, const SkMatrix44& toXYZD50) - : INHERITED(toXYZD50) - , fGammaNamed(gammaNamed) + : fGammaNamed(gammaNamed) , fGammas(nullptr) , fProfileData(nullptr) + , fToXYZD50(toXYZD50) , fFromXYZD50(SkMatrix44::kUninitialized_Constructor) {} SkColorSpace_Base::SkColorSpace_Base(sk_sp<SkColorLookUpTable> colorLUT, SkGammaNamed gammaNamed, sk_sp<SkGammas> gammas, const SkMatrix44& toXYZD50, sk_sp<SkData> profileData) - : INHERITED(toXYZD50) - , fColorLUT(std::move(colorLUT)) + : fColorLUT(std::move(colorLUT)) , fGammaNamed(gammaNamed) , fGammas(std::move(gammas)) , fProfileData(std::move(profileData)) + , fToXYZD50(toXYZD50) , fFromXYZD50(SkMatrix44::kUninitialized_Constructor) {} @@ -192,7 +188,7 @@ sk_sp<SkColorSpace> SkColorSpace::makeLinearGamma() { if (this->gammaIsLinear()) { return sk_ref_sp(this); } - return SkColorSpace_Base::NewRGB(kLinear_SkGammaNamed, fToXYZD50); + return SkColorSpace_Base::NewRGB(kLinear_SkGammaNamed, as_CSB(this)->fToXYZD50); } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -311,7 +307,7 @@ size_t SkColorSpace::writeToMemory(void* memory) const { ColorSpaceHeader::Pack(k0_Version, 0, as_CSB(this)->fGammaNamed, ColorSpaceHeader::kMatrix_Flag); memory = SkTAddOffset<void>(memory, sizeof(ColorSpaceHeader)); - fToXYZD50.as3x4RowMajorf((float*) memory); + as_CSB(this)->fToXYZD50.as3x4RowMajorf((float*) memory); } return sizeof(ColorSpaceHeader) + 12 * sizeof(float); } @@ -333,7 +329,7 @@ size_t SkColorSpace::writeToMemory(void* memory) const { *(((float*) memory) + 2) = gammas->fBlueData.fValue; memory = SkTAddOffset<void>(memory, 3 * sizeof(float)); - fToXYZD50.as3x4RowMajorf((float*) memory); + as_CSB(this)->fToXYZD50.as3x4RowMajorf((float*) memory); } return sizeof(ColorSpaceHeader) + 15 * sizeof(float); } @@ -461,7 +457,7 @@ bool SkColorSpace::Equals(const SkColorSpace* src, const SkColorSpace* dst) { case k2Dot2Curve_SkGammaNamed: case kLinear_SkGammaNamed: return (as_CSB(src)->fGammaNamed == as_CSB(dst)->fGammaNamed) && - (src->fToXYZD50 == dst->fToXYZD50); + (as_CSB(src)->fToXYZD50 == as_CSB(dst)->fToXYZD50); default: if (as_CSB(src)->fGammaNamed != as_CSB(dst)->fGammaNamed) { return false; diff --git a/src/core/SkColorSpaceXform.cpp b/src/core/SkColorSpaceXform.cpp index b555d599c4..6f2f75b8b1 100644 --- a/src/core/SkColorSpaceXform.cpp +++ b/src/core/SkColorSpaceXform.cpp @@ -355,7 +355,7 @@ std::unique_ptr<SkColorSpaceXform> SkColorSpaceXform::New(SkColorSpace* srcSpace srcToDst.setIdentity(); csm = kFull_ColorSpaceMatch; } else { - srcToDst.setConcat(as_CSB(dstSpace)->fromXYZD50(), srcSpace->toXYZD50()); + srcToDst.setConcat(as_CSB(dstSpace)->fromXYZD50(), as_CSB(srcSpace)->toXYZD50()); if (is_almost_identity(srcToDst)) { srcToDst.setIdentity(); diff --git a/src/core/SkColorSpace_Base.h b/src/core/SkColorSpace_Base.h index 9382153967..07fa383253 100644 --- a/src/core/SkColorSpace_Base.h +++ b/src/core/SkColorSpace_Base.h @@ -189,6 +189,7 @@ public: const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } + const SkMatrix44& toXYZD50() const { return fToXYZD50; } const SkMatrix44& fromXYZD50() const; private: @@ -214,6 +215,7 @@ private: sk_sp<SkGammas> fGammas; sk_sp<SkData> fProfileData; + const SkMatrix44 fToXYZD50; mutable SkMatrix44 fFromXYZD50; mutable SkOnce fFromXYZOnce; diff --git a/src/gpu/GrColorSpaceXform.cpp b/src/gpu/GrColorSpaceXform.cpp index d4faaaffd1..d2270fafdd 100644 --- a/src/gpu/GrColorSpaceXform.cpp +++ b/src/gpu/GrColorSpaceXform.cpp @@ -50,7 +50,7 @@ sk_sp<GrColorSpaceXform> GrColorSpaceXform::Make(SkColorSpace* src, SkColorSpace } SkMatrix44 srcToDst(SkMatrix44::kUninitialized_Constructor); - srcToDst.setConcat(as_CSB(dst)->fromXYZD50(), src->toXYZD50()); + srcToDst.setConcat(as_CSB(dst)->fromXYZD50(), as_CSB(src)->toXYZD50()); if (matrix_is_almost_identity(srcToDst)) { return nullptr; diff --git a/tests/ColorSpaceTest.cpp b/tests/ColorSpaceTest.cpp index d749931de1..a6ed9e3cf9 100644 --- a/tests/ColorSpaceTest.cpp +++ b/tests/ColorSpaceTest.cpp @@ -24,7 +24,7 @@ static void test_space(skiatest::Reporter* r, SkColorSpace* space, REPORTER_ASSERT(r, nullptr != space); REPORTER_ASSERT(r, expectedGamma == as_CSB(space)->gammaNamed()); - const SkMatrix44& mat = space->toXYZD50(); + const SkMatrix44& mat = as_CSB(space)->toXYZD50(); const float src[] = { 1, 0, 0, 1, 0, 1, 0, 1, @@ -166,7 +166,7 @@ DEF_TEST(ColorSpaceWriteICC, r) { sk_sp<SkData> newMonitorData = ColorSpaceTest::WriteToICC(monitorSpace.get()); sk_sp<SkColorSpace> newMonitorSpace = SkColorSpace::NewICC(newMonitorData->data(), newMonitorData->size()); - REPORTER_ASSERT(r, monitorSpace->toXYZD50() == newMonitorSpace->toXYZD50()); + REPORTER_ASSERT(r, as_CSB(monitorSpace)->toXYZD50() == as_CSB(newMonitorSpace)->toXYZD50()); REPORTER_ASSERT(r, as_CSB(monitorSpace)->gammaNamed() == as_CSB(newMonitorSpace)->gammaNamed()); } diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp index 6706fef7e4..224e8c74cf 100644 --- a/tests/SurfaceTest.cpp +++ b/tests/SurfaceTest.cpp @@ -921,7 +921,7 @@ static void test_surface_creation_and_snapshot_with_color_space( auto srgbColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); auto adobeColorSpace = SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named); - SkMatrix44 srgbMatrix = srgbColorSpace->toXYZD50(); + SkMatrix44 srgbMatrix = as_CSB(srgbColorSpace)->toXYZD50(); const float oddGamma[] = { 2.4f, 2.4f, 2.4f }; auto oddColorSpace = SkColorSpace_Base::NewRGB(oddGamma, srgbMatrix); auto linearColorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGBLinear_Named); diff --git a/tests/TestConfigParsing.cpp b/tests/TestConfigParsing.cpp index 620a7c42ea..6760724e5a 100644 --- a/tests/TestConfigParsing.cpp +++ b/tests/TestConfigParsing.cpp @@ -6,7 +6,7 @@ */ #include "SkCommonFlagsConfig.h" -#include "SkColorSpace.h" +#include "SkColorSpace_Base.h" #include "Test.h" #include <initializer_list> @@ -125,15 +125,15 @@ DEF_TEST(ParseConfigs_DefaultConfigs, reporter) { REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType); REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorSpace()); REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorSpace()->gammaIsLinear()); - REPORTER_ASSERT(reporter, configs[25]->asConfigGpu()->getColorSpace()->toXYZD50() == - srgbColorSpace->toXYZD50()); + REPORTER_ASSERT(reporter, as_CSB(configs[25]->asConfigGpu()->getColorSpace())->toXYZD50() == + as_CSB(srgbColorSpace)->toXYZD50()); REPORTER_ASSERT(reporter, configs[26]->asConfigGpu()->getColorType() == kRGBA_8888_SkColorType); REPORTER_ASSERT(reporter, configs[26]->asConfigGpu()->getColorSpace() == srgbColorSpace.get()); REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorType() == kRGBA_F16_SkColorType); REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorSpace()); REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorSpace()->gammaIsLinear()); - REPORTER_ASSERT(reporter, configs[41]->asConfigGpu()->getColorSpace()->toXYZD50() != - srgbColorSpace->toXYZD50()); + REPORTER_ASSERT(reporter, as_CSB(configs[41]->asConfigGpu()->getColorSpace())->toXYZD50() != + as_CSB(srgbColorSpace)->toXYZD50()); REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getContextType() == GrContextFactory::kGL_ContextType); REPORTER_ASSERT(reporter, configs[33]->asConfigGpu()->getUseInstanced()); diff --git a/tools/visualize_color_gamut.cpp b/tools/visualize_color_gamut.cpp index 1bacf5f179..b45996bc8d 100644 --- a/tools/visualize_color_gamut.cpp +++ b/tools/visualize_color_gamut.cpp @@ -10,7 +10,7 @@ #include "SkBitmap.h" #include "SkCanvas.h" #include "SkCodec.h" -#include "SkColorSpace.h" +#include "SkColorSpace_Base.h" #include "SkCommandLineFlags.h" #include "SkForceLinking.h" #include "SkImageEncoder.h" @@ -141,13 +141,13 @@ int main(int argc, char** argv) { // Draw the sRGB gamut if requested. if (FLAGS_sRGB) { sk_sp<SkColorSpace> sRGBSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); - draw_gamut(&canvas, sRGBSpace->toXYZD50(), "sRGB", 0xFFFF9394, false); + draw_gamut(&canvas, as_CSB(sRGBSpace)->toXYZD50(), "sRGB", 0xFFFF9394, false); } // Draw the Adobe RGB gamut if requested. if (FLAGS_adobeRGB) { sk_sp<SkColorSpace> adobeRGBSpace = SkColorSpace::NewNamed(SkColorSpace::kAdobeRGB_Named); - draw_gamut(&canvas, adobeRGBSpace->toXYZD50(), "Adobe RGB", 0xFF31a9e1, false); + draw_gamut(&canvas, as_CSB(adobeRGBSpace)->toXYZD50(), "Adobe RGB", 0xFF31a9e1, false); } // Draw gamut for the input image. @@ -156,7 +156,7 @@ int main(int argc, char** argv) { SkDebugf("Image had no embedded color space information. Defaulting to sRGB.\n"); colorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); } - draw_gamut(&canvas, colorSpace->toXYZD50(), input, 0xFF000000, true); + draw_gamut(&canvas, as_CSB(colorSpace)->toXYZD50(), input, 0xFF000000, true); // Finally, encode the result to the output file. sk_sp<SkData> out(SkImageEncoder::EncodeData(gamut, SkImageEncoder::kPNG_Type, 100)); |