Chromium Code Reviews| Index: src/core/SkColorSpace.cpp |
| diff --git a/src/core/SkColorSpace.cpp b/src/core/SkColorSpace.cpp |
| index 996158c8c0504fe0bce665221ea7eabed8ff0ed0..f12959f77c6eb154762357cd7e09357057c80e9f 100644 |
| --- a/src/core/SkColorSpace.cpp |
| +++ b/src/core/SkColorSpace.cpp |
| @@ -336,15 +336,20 @@ bool SkColorSpace::LoadGammas(SkGammaCurve* gammas, uint32_t numGammas, const ui |
| // calculation necessary. We encounter identical gamma curves over and |
| // over again, but relatively few variations. |
| if (1024 == count) { |
| + // The magic values were chosen because they match a very common sRGB |
| + // gamma table and the less common Canon sRGB gamma table (which use |
| + // different rounding rules). |
| if (0 == read_big_endian_short((const uint8_t*) &table[0]) && |
| - 3341 == read_big_endian_short((const uint8_t*) &table[256]) && |
| - 14057 == read_big_endian_short((const uint8_t*) &table[512]) && |
| + 3366 == read_big_endian_short((const uint8_t*) &table[257]) && |
|
scroggo
2016/05/13 12:45:24
Does still correctly identify images that were rec
msarett
2016/05/13 12:51:48
Yes!
|
| + 14116 == read_big_endian_short((const uint8_t*) &table[513]) && |
| 34318 == read_big_endian_short((const uint8_t*) &table[768]) && |
| 65535 == read_big_endian_short((const uint8_t*) &table[1023])) { |
| gammas[i].fValue = 2.2f; |
| break; |
| } |
| } else if (26 == count) { |
| + // The magic values were chosen because they match a very common sRGB |
| + // gamma table. |
| if (0 == read_big_endian_short((const uint8_t*) &table[0]) && |
| 3062 == read_big_endian_short((const uint8_t*) &table[6]) && |
| 12824 == read_big_endian_short((const uint8_t*) &table[12]) && |
| @@ -353,6 +358,17 @@ bool SkColorSpace::LoadGammas(SkGammaCurve* gammas, uint32_t numGammas, const ui |
| gammas[i].fValue = 2.2f; |
| break; |
| } |
| + } else if (4096 == count) { |
| + // The magic values were chosen because they match Nikon, Epson, and |
| + // LCMS sRGB gamma tables (all of which use different rounding rules). |
| + if (0 == read_big_endian_short((const uint8_t*) &table[0]) && |
|
scroggo
2016/05/13 12:45:24
As we add more of these, it makes me wonder if we
msarett
2016/05/13 12:51:48
I think this is a really good idea.
|
| + 950 == read_big_endian_short((const uint8_t*) &table[515]) && |
| + 3342 == read_big_endian_short((const uint8_t*) &table[1025]) && |
| + 14079 == read_big_endian_short((const uint8_t*) &table[2051]) && |
| + 65535 == read_big_endian_short((const uint8_t*) &table[4095])) { |
| + gammas[i].fValue = 2.2f; |
| + break; |
| + } |
| } |
| // Otherwise, fill in the interpolation table. |