diff options
author | Brian Osman <brianosman@google.com> | 2019-01-03 12:43:05 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2019-01-04 14:32:06 +0000 |
commit | a9549ab31630fc244094e6f1692371cbaf87f666 (patch) | |
tree | 6e73625a282ce9a38838e35b5f5fafb1733ed00e /src/codec | |
parent | 48ce543defaddaaa3388bda3d65ca7933b106941 (diff) | |
download | skqp-a9549ab31630fc244094e6f1692371cbaf87f666.tar.gz |
Add SkColorSpace factory from 3x3 row-major gamut and transfer function
Moved named common transfer functions and gamuts to constexpr values in
SkColorSpace.h, in SkNamedTransferFn and SkNamedGamut namespaces.
Converted nearly all SkColorSpace::MakeRGB calls within Skia to use the
new factory with the named values. Multiple clients want a way to
extract named transfer function and gamut - this still doesn't provide
that, but this may be a better path forward for honestly advertising how
SkColorSpace works internally.
Bug: skia:
Change-Id: I9296d67e8f0dab5ceb49869cb3ba24e98a05f3c4
Reviewed-on: https://skia-review.googlesource.com/c/180360
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/codec')
-rw-r--r-- | src/codec/SkAndroidCodec.cpp | 8 | ||||
-rw-r--r-- | src/codec/SkRawCodec.cpp | 17 |
2 files changed, 5 insertions, 20 deletions
diff --git a/src/codec/SkAndroidCodec.cpp b/src/codec/SkAndroidCodec.cpp index 581640f411..d741d6d29b 100644 --- a/src/codec/SkAndroidCodec.cpp +++ b/src/codec/SkAndroidCodec.cpp @@ -164,9 +164,8 @@ sk_sp<SkColorSpace> SkAndroidCodec::computeOutputColorSpace(SkColorType outputCo switch (outputColorType) { case kRGBA_8888_SkColorType: case kBGRA_8888_SkColorType: { - // If |prefColorSpace| is supported, choose it. - SkColorSpaceTransferFn fn; - if (prefColorSpace && prefColorSpace->isNumericalTransferFn(&fn)) { + // If |prefColorSpace| is supplied, choose it. + if (prefColorSpace) { return prefColorSpace; } @@ -179,8 +178,7 @@ sk_sp<SkColorSpace> SkAndroidCodec::computeOutputColorSpace(SkColorType outputCo } if (is_wide_gamut(*encodedProfile)) { - return SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut); + return SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kDCIP3); } } diff --git a/src/codec/SkRawCodec.cpp b/src/codec/SkRawCodec.cpp index fb7efb9b7b..a8ec40bff4 100644 --- a/src/codec/SkRawCodec.cpp +++ b/src/codec/SkRawCodec.cpp @@ -612,17 +612,6 @@ private: bool fIsXtransImage; }; -static constexpr skcms_Matrix3x3 gAdobe_RGB_to_XYZD50 = {{ - // ICC fixed-point (16.16) repesentation of: - // 0.60974, 0.20528, 0.14919, - // 0.31111, 0.62567, 0.06322, - // 0.01947, 0.06087, 0.74457, - { SkFixedToFloat(0x9c18), SkFixedToFloat(0x348d), SkFixedToFloat(0x2631) }, // Rx, Gx, Bx - { SkFixedToFloat(0x4fa5), SkFixedToFloat(0xa02c), SkFixedToFloat(0x102f) }, // Ry, Gy, By - { SkFixedToFloat(0x04fc), SkFixedToFloat(0x0f95), SkFixedToFloat(0xbe9c) }, // Rz, Gz, Bz -}}; - - /* * Tries to handle the image with PIEX. If PIEX returns kOk and finds the preview image, create a * SkJpegCodec. If PIEX returns kFail, then the file is invalid, return nullptr. In other cases, @@ -649,12 +638,10 @@ std::unique_ptr<SkCodec> SkRawCodec::MakeFromStream(std::unique_ptr<SkStream> st std::unique_ptr<SkEncodedInfo::ICCProfile> profile; if (imageData.color_space == ::piex::PreviewImageData::kAdobeRgb) { - constexpr skcms_TransferFunction twoDotTwo = - { 2.2f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; skcms_ICCProfile skcmsProfile; skcms_Init(&skcmsProfile); - skcms_SetTransferFunction(&skcmsProfile, &twoDotTwo); - skcms_SetXYZD50(&skcmsProfile, &gAdobe_RGB_to_XYZD50); + skcms_SetTransferFunction(&skcmsProfile, &SkNamedTransferFn::k2Dot2); + skcms_SetXYZD50(&skcmsProfile, &SkNamedGamut::kAdobeRGB); profile = SkEncodedInfo::ICCProfile::Make(skcmsProfile); } |