| Index: src/core/SkColorSpace_ICC.cpp
|
| diff --git a/src/core/SkColorSpace_ICC.cpp b/src/core/SkColorSpace_ICC.cpp
|
| index e4be8f4e4e6c92623cd31ef076d9f210dc70e048..5585fbbb386f2f33dd2c289ea12e01489e465185 100644
|
| --- a/src/core/SkColorSpace_ICC.cpp
|
| +++ b/src/core/SkColorSpace_ICC.cpp
|
| @@ -46,12 +46,13 @@ static constexpr size_t kICCHeaderSize = 132;
|
| // Contains a signature (4), offset (4), and size (4).
|
| static constexpr size_t kICCTagTableEntrySize = 12;
|
|
|
| -static constexpr uint32_t kRGB_ColorSpace = SkSetFourByteTag('R', 'G', 'B', ' ');
|
| -static constexpr uint32_t kDisplay_Profile = SkSetFourByteTag('m', 'n', 't', 'r');
|
| -static constexpr uint32_t kInput_Profile = SkSetFourByteTag('s', 'c', 'n', 'r');
|
| -static constexpr uint32_t kOutput_Profile = SkSetFourByteTag('p', 'r', 't', 'r');
|
| -static constexpr uint32_t kXYZ_PCSSpace = SkSetFourByteTag('X', 'Y', 'Z', ' ');
|
| -static constexpr uint32_t kACSP_Signature = SkSetFourByteTag('a', 'c', 's', 'p');
|
| +static constexpr uint32_t kRGB_ColorSpace = SkSetFourByteTag('R', 'G', 'B', ' ');
|
| +static constexpr uint32_t kDisplay_Profile = SkSetFourByteTag('m', 'n', 't', 'r');
|
| +static constexpr uint32_t kInput_Profile = SkSetFourByteTag('s', 'c', 'n', 'r');
|
| +static constexpr uint32_t kOutput_Profile = SkSetFourByteTag('p', 'r', 't', 'r');
|
| +static constexpr uint32_t kColorSpace_Profile = SkSetFourByteTag('s', 'p', 'a', 'c');
|
| +static constexpr uint32_t kXYZ_PCSSpace = SkSetFourByteTag('X', 'Y', 'Z', ' ');
|
| +static constexpr uint32_t kACSP_Signature = SkSetFourByteTag('a', 'c', 's', 'p');
|
|
|
| struct ICCProfileHeader {
|
| uint32_t fSize;
|
| @@ -114,12 +115,13 @@ struct ICCProfileHeader {
|
| uint8_t majorVersion = fVersion >> 24;
|
| return_if_false(majorVersion <= 4, "Unsupported version");
|
|
|
| - // These are the three basic classes of profiles that we might expect to see embedded
|
| - // in images. Four additional classes exist, but they generally are used as a convenient
|
| + // These are the four basic classes of profiles that we might expect to see embedded
|
| + // in images. Additional classes exist, but they generally are used as a convenient
|
| // way for CMMs to store calculated transforms.
|
| return_if_false(fProfileClass == kDisplay_Profile ||
|
| fProfileClass == kInput_Profile ||
|
| - fProfileClass == kOutput_Profile,
|
| + fProfileClass == kOutput_Profile ||
|
| + fProfileClass == kColorSpace_Profile,
|
| "Unsupported profile");
|
|
|
| // TODO (msarett):
|
| @@ -136,7 +138,11 @@ struct ICCProfileHeader {
|
| // Should we treat different rendering intents differently?
|
| // Valid rendering intents include kPerceptual (0), kRelative (1),
|
| // kSaturation (2), and kAbsolute (3).
|
| - return_if_false(fRenderingIntent <= 3, "Bad rendering intent");
|
| + if (fRenderingIntent <= 3) {
|
| + // Warn rather than fail here. Occasionally, we see perfectly
|
| + // normal profiles with wacky rendering intents.
|
| + SkColorSpacePrintf("Warning, bad rendering intent.\n");
|
| + }
|
|
|
| return_if_false(color_space_almost_equal(SkFixedToFloat(fIlluminantXYZ[0]), 0.96420f) &&
|
| color_space_almost_equal(SkFixedToFloat(fIlluminantXYZ[1]), 1.00000f) &&
|
|
|