aboutsummaryrefslogtreecommitdiff
path: root/src/codec
diff options
context:
space:
mode:
authorBrian Osman <brianosman@google.com>2019-01-03 12:43:05 -0500
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2019-01-04 14:32:06 +0000
commita9549ab31630fc244094e6f1692371cbaf87f666 (patch)
tree6e73625a282ce9a38838e35b5f5fafb1733ed00e /src/codec
parent48ce543defaddaaa3388bda3d65ca7933b106941 (diff)
downloadskqp-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.cpp8
-rw-r--r--src/codec/SkRawCodec.cpp17
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);
}