aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkColorSpaceXform_skcms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkColorSpaceXform_skcms.cpp')
-rw-r--r--src/core/SkColorSpaceXform_skcms.cpp129
1 files changed, 1 insertions, 128 deletions
diff --git a/src/core/SkColorSpaceXform_skcms.cpp b/src/core/SkColorSpaceXform_skcms.cpp
index 720a6c80f6..79e372a5e2 100644
--- a/src/core/SkColorSpaceXform_skcms.cpp
+++ b/src/core/SkColorSpaceXform_skcms.cpp
@@ -6,132 +6,5 @@
*/
#include "SkColorSpaceXform.h"
-#include "SkData.h"
-#include "SkMakeUnique.h"
-#include "skcms.h"
-class SkColorSpaceXform_skcms : public SkColorSpaceXform {
-public:
- SkColorSpaceXform_skcms(const skcms_ICCProfile& srcProfile,
- const skcms_ICCProfile& dstProfile,
- skcms_AlphaFormat premulFormat)
- : fSrcProfile(srcProfile)
- , fDstProfile(dstProfile)
- , fPremulFormat(premulFormat) {}
-
- bool apply(ColorFormat, void*, ColorFormat, const void*, int, SkAlphaType) const override;
-
-private:
- skcms_ICCProfile fSrcProfile;
- skcms_ICCProfile fDstProfile;
- skcms_AlphaFormat fPremulFormat;
-};
-
-static skcms_PixelFormat get_skcms_format(SkColorSpaceXform::ColorFormat fmt) {
- switch (fmt) {
- case SkColorSpaceXform::kRGBA_8888_ColorFormat:
- return skcms_PixelFormat_RGBA_8888;
- case SkColorSpaceXform::kBGRA_8888_ColorFormat:
- return skcms_PixelFormat_BGRA_8888;
- case SkColorSpaceXform::kRGB_U16_BE_ColorFormat:
- return skcms_PixelFormat_RGB_161616;
- case SkColorSpaceXform::kRGBA_U16_BE_ColorFormat:
- return skcms_PixelFormat_RGBA_16161616;
- case SkColorSpaceXform::kRGBA_F16_ColorFormat:
- return skcms_PixelFormat_RGBA_hhhh;
- case SkColorSpaceXform::kRGBA_F32_ColorFormat:
- return skcms_PixelFormat_RGBA_ffff;
- case SkColorSpaceXform::kBGR_565_ColorFormat:
- return skcms_PixelFormat_BGR_565;
- default:
- SkDEBUGFAIL("Invalid ColorFormat");
- return skcms_PixelFormat_RGBA_8888;
- }
-}
-
-bool SkColorSpaceXform_skcms::apply(ColorFormat dstFormat, void* dst,
- ColorFormat srcFormat, const void* src,
- int count, SkAlphaType alphaType) const {
- skcms_AlphaFormat srcAlpha = skcms_AlphaFormat_Unpremul;
- skcms_AlphaFormat dstAlpha = kPremul_SkAlphaType == alphaType ? fPremulFormat
- : skcms_AlphaFormat_Unpremul;
-
- return skcms_Transform(src, get_skcms_format(srcFormat), srcAlpha, &fSrcProfile,
- dst, get_skcms_format(dstFormat), dstAlpha, &fDstProfile, count);
-}
-
-void SkColorSpace::toProfile(skcms_ICCProfile* profile) const {
- if (auto blob = this->onProfileData()) {
- SkAssertResult(skcms_Parse(blob->data(), blob->size(), profile));
- } else {
- SkMatrix44 toXYZ(SkMatrix44::kUninitialized_Constructor);
- SkColorSpaceTransferFn tf;
- SkAssertResult(this->toXYZD50(&toXYZ) && this->isNumericalTransferFn(&tf));
-
- skcms_Matrix3x3 m = {{
- { toXYZ.get(0, 0), toXYZ.get(0, 1), toXYZ.get(0, 2) },
- { toXYZ.get(1, 0), toXYZ.get(1, 1), toXYZ.get(1, 2) },
- { toXYZ.get(2, 0), toXYZ.get(2, 1), toXYZ.get(2, 2) },
- }};
-
- skcms_Init(profile);
- skcms_SetTransferFunction(profile, (const skcms_TransferFunction*)&tf);
- skcms_SetXYZD50(profile, &m);
- }
-}
-
-std::unique_ptr<SkColorSpaceXform> SkMakeColorSpaceXform_skcms(SkColorSpace* src,
- SkColorSpace* dst,
- SkTransferFunctionBehavior premul) {
- // Construct skcms_ICCProfiles from each color space. For now, support A2B and XYZ.
- // Eventually, only need to support XYZ. Map premul to one of the two premul formats
- // in skcms.
- skcms_ICCProfile srcProfile, dstProfile;
-
- src->toProfile(&srcProfile);
- dst->toProfile(&dstProfile);
-
- if (!skcms_MakeUsableAsDestination(&dstProfile)) {
- return nullptr;
- }
-
- skcms_AlphaFormat premulFormat = SkTransferFunctionBehavior::kRespect == premul
- ? skcms_AlphaFormat_PremulLinear
- : skcms_AlphaFormat_PremulAsEncoded;
- return skstd::make_unique<SkColorSpaceXform_skcms>(srcProfile, dstProfile, premulFormat);
-}
-
-sk_sp<SkColorSpace> SkColorSpace::Make(const skcms_ICCProfile& profile) {
- if (!profile.has_toXYZD50 || !profile.has_trc) {
- return nullptr;
- }
-
- if (skcms_ApproximatelyEqualProfiles(&profile, skcms_sRGB_profile())) {
- return SkColorSpace::MakeSRGB();
- }
-
- 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);
-}
-
-bool skcms_can_parse(const void* buf, size_t len) {
- skcms_ICCProfile p;
- return skcms_Parse(buf, len, &p);
-}
+// Leaving this file around temporarily until client build files no longer refer to it