OLD | NEW |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/color_transform.h" | 5 #include "ui/gfx/color_transform.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "ui/gfx/color_space.h" | 10 #include "ui/gfx/color_space.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 return color; | 33 return color; |
34 } | 34 } |
35 | 35 |
36 ColorTransform::TriStim Xy2xyz(float x, float y) { | 36 ColorTransform::TriStim Xy2xyz(float x, float y) { |
37 return ColorTransform::TriStim(x, y, 1.0f - x - y); | 37 return ColorTransform::TriStim(x, y, 1.0f - x - y); |
38 } | 38 } |
39 | 39 |
40 void GetPrimaries(ColorSpace::PrimaryID id, | 40 void GetPrimaries(ColorSpace::PrimaryID id, |
41 ColorTransform::TriStim primaries[4]) { | 41 ColorTransform::TriStim primaries[4]) { |
42 switch (id) { | 42 switch (id) { |
43 default: | 43 case ColorSpace::PrimaryID::CUSTOM: |
44 // If we don't know, assume BT709 | 44 NOTREACHED(); |
45 | 45 |
| 46 case ColorSpace::PrimaryID::RESERVED0: |
| 47 case ColorSpace::PrimaryID::RESERVED: |
| 48 case ColorSpace::PrimaryID::UNSPECIFIED: |
| 49 case ColorSpace::PrimaryID::UNKNOWN: |
46 case ColorSpace::PrimaryID::BT709: | 50 case ColorSpace::PrimaryID::BT709: |
47 // Red | 51 // BT709 is our default case. Put it after the switch just |
48 primaries[0] = Xy2xyz(0.640f, 0.330f); | 52 // in case we somehow get an id which is not listed in the switch. |
49 // Green | 53 // (We don't want to use "default", because we want the compiler |
50 primaries[1] = Xy2xyz(0.300f, 0.600f); | 54 // to tell us if we forgot some enum values.) |
51 // Blue | |
52 primaries[2] = Xy2xyz(0.150f, 0.060f); | |
53 // Whitepoint (D65f) | |
54 primaries[3] = Xy2xyz(0.3127f, 0.3290f); | |
55 break; | 55 break; |
56 | 56 |
57 case ColorSpace::PrimaryID::BT470M: | 57 case ColorSpace::PrimaryID::BT470M: |
58 // Red | 58 // Red |
59 primaries[0] = Xy2xyz(0.67f, 0.33f); | 59 primaries[0] = Xy2xyz(0.67f, 0.33f); |
60 // Green | 60 // Green |
61 primaries[1] = Xy2xyz(0.21f, 0.71f); | 61 primaries[1] = Xy2xyz(0.21f, 0.71f); |
62 // Blue | 62 // Blue |
63 primaries[2] = Xy2xyz(0.14f, 0.08f); | 63 primaries[2] = Xy2xyz(0.14f, 0.08f); |
64 // Whitepoint | 64 // Whitepoint |
65 primaries[3] = Xy2xyz(0.31f, 0.316f); | 65 primaries[3] = Xy2xyz(0.31f, 0.316f); |
66 break; | 66 return; |
67 | 67 |
68 case ColorSpace::PrimaryID::BT470BG: | 68 case ColorSpace::PrimaryID::BT470BG: |
69 // Red | 69 // Red |
70 primaries[0] = Xy2xyz(0.64f, 0.33f); | 70 primaries[0] = Xy2xyz(0.64f, 0.33f); |
71 // Green | 71 // Green |
72 primaries[1] = Xy2xyz(0.29f, 0.60f); | 72 primaries[1] = Xy2xyz(0.29f, 0.60f); |
73 // Blue | 73 // Blue |
74 primaries[2] = Xy2xyz(0.15f, 0.06f); | 74 primaries[2] = Xy2xyz(0.15f, 0.06f); |
75 // Whitepoint (D65f) | 75 // Whitepoint (D65f) |
76 primaries[3] = Xy2xyz(0.3127f, 0.3290f); | 76 primaries[3] = Xy2xyz(0.3127f, 0.3290f); |
77 break; | 77 return; |
78 | 78 |
79 case ColorSpace::PrimaryID::SMPTE170M: | 79 case ColorSpace::PrimaryID::SMPTE170M: |
80 case ColorSpace::PrimaryID::SMPTE240M: | 80 case ColorSpace::PrimaryID::SMPTE240M: |
81 // Red | 81 // Red |
82 primaries[0] = Xy2xyz(0.630f, 0.340f); | 82 primaries[0] = Xy2xyz(0.630f, 0.340f); |
83 // Green | 83 // Green |
84 primaries[1] = Xy2xyz(0.310f, 0.595f); | 84 primaries[1] = Xy2xyz(0.310f, 0.595f); |
85 // Blue | 85 // Blue |
86 primaries[2] = Xy2xyz(0.155f, 0.070f); | 86 primaries[2] = Xy2xyz(0.155f, 0.070f); |
87 // Whitepoint (D65f) | 87 // Whitepoint (D65f) |
88 primaries[3] = Xy2xyz(0.3127f, 0.3290f); | 88 primaries[3] = Xy2xyz(0.3127f, 0.3290f); |
89 break; | 89 return; |
90 | 90 |
91 case ColorSpace::PrimaryID::FILM: | 91 case ColorSpace::PrimaryID::FILM: |
92 // Red | 92 // Red |
93 primaries[0] = Xy2xyz(0.681f, 0.319f); | 93 primaries[0] = Xy2xyz(0.681f, 0.319f); |
94 // Green | 94 // Green |
95 primaries[1] = Xy2xyz(0.243f, 0.692f); | 95 primaries[1] = Xy2xyz(0.243f, 0.692f); |
96 // Blue | 96 // Blue |
97 primaries[2] = Xy2xyz(0.145f, 0.049f); | 97 primaries[2] = Xy2xyz(0.145f, 0.049f); |
98 // Whitepoint (Cf) | 98 // Whitepoint (Cf) |
99 primaries[3] = Xy2xyz(0.310f, 0.136f); | 99 primaries[3] = Xy2xyz(0.310f, 0.136f); |
100 break; | 100 return; |
101 | 101 |
102 case ColorSpace::PrimaryID::BT2020: | 102 case ColorSpace::PrimaryID::BT2020: |
103 // Red | 103 // Red |
104 primaries[0] = Xy2xyz(0.708f, 0.292f); | 104 primaries[0] = Xy2xyz(0.708f, 0.292f); |
105 // Green | 105 // Green |
106 primaries[1] = Xy2xyz(0.170f, 0.797f); | 106 primaries[1] = Xy2xyz(0.170f, 0.797f); |
107 // Blue | 107 // Blue |
108 primaries[2] = Xy2xyz(0.131f, 0.046f); | 108 primaries[2] = Xy2xyz(0.131f, 0.046f); |
109 // Whitepoint (D65f) | 109 // Whitepoint (D65f) |
110 primaries[3] = Xy2xyz(0.3127f, 0.3290f); | 110 primaries[3] = Xy2xyz(0.3127f, 0.3290f); |
111 break; | 111 return; |
112 | 112 |
113 case ColorSpace::PrimaryID::SMPTEST428_1: | 113 case ColorSpace::PrimaryID::SMPTEST428_1: |
114 // X | 114 // X |
115 primaries[0] = Xy2xyz(1.0f, 0.0f); | 115 primaries[0] = Xy2xyz(1.0f, 0.0f); |
116 // Y | 116 // Y |
117 primaries[1] = Xy2xyz(0.0f, 1.0f); | 117 primaries[1] = Xy2xyz(0.0f, 1.0f); |
118 // Z | 118 // Z |
119 primaries[2] = Xy2xyz(0.0f, 0.0f); | 119 primaries[2] = Xy2xyz(0.0f, 0.0f); |
120 // Whitepoint (Ef) | 120 // Whitepoint (Ef) |
121 primaries[3] = Xy2xyz(1.0f / 3.0f, 1.0f / 3.0f); | 121 primaries[3] = Xy2xyz(1.0f / 3.0f, 1.0f / 3.0f); |
122 break; | 122 return; |
123 | 123 |
124 case ColorSpace::PrimaryID::SMPTEST431_2: | 124 case ColorSpace::PrimaryID::SMPTEST431_2: |
125 // Red | 125 // Red |
126 primaries[0] = Xy2xyz(0.680f, 0.320f); | 126 primaries[0] = Xy2xyz(0.680f, 0.320f); |
127 // Green | 127 // Green |
128 primaries[1] = Xy2xyz(0.265f, 0.690f); | 128 primaries[1] = Xy2xyz(0.265f, 0.690f); |
129 // Blue | 129 // Blue |
130 primaries[2] = Xy2xyz(0.150f, 0.060f); | 130 primaries[2] = Xy2xyz(0.150f, 0.060f); |
131 // Whitepoint | 131 // Whitepoint |
132 primaries[3] = Xy2xyz(0.314f, 0.351f); | 132 primaries[3] = Xy2xyz(0.314f, 0.351f); |
133 break; | 133 return; |
134 | 134 |
135 case ColorSpace::PrimaryID::SMPTEST432_1: | 135 case ColorSpace::PrimaryID::SMPTEST432_1: |
136 // Red | 136 // Red |
137 primaries[0] = Xy2xyz(0.680f, 0.320f); | 137 primaries[0] = Xy2xyz(0.680f, 0.320f); |
138 // Green | 138 // Green |
139 primaries[1] = Xy2xyz(0.265f, 0.690f); | 139 primaries[1] = Xy2xyz(0.265f, 0.690f); |
140 // Blue | 140 // Blue |
141 primaries[2] = Xy2xyz(0.150f, 0.060f); | 141 primaries[2] = Xy2xyz(0.150f, 0.060f); |
142 // Whitepoint (D65f) | 142 // Whitepoint (D65f) |
143 primaries[3] = Xy2xyz(0.3127f, 0.3290f); | 143 primaries[3] = Xy2xyz(0.3127f, 0.3290f); |
144 break; | 144 return; |
145 | 145 |
146 case ColorSpace::PrimaryID::XYZ_D50: | 146 case ColorSpace::PrimaryID::XYZ_D50: |
147 // X | 147 // X |
148 primaries[0] = Xy2xyz(1.0f, 0.0f); | 148 primaries[0] = Xy2xyz(1.0f, 0.0f); |
149 // Y | 149 // Y |
150 primaries[1] = Xy2xyz(0.0f, 1.0f); | 150 primaries[1] = Xy2xyz(0.0f, 1.0f); |
151 // Z | 151 // Z |
152 primaries[2] = Xy2xyz(0.0f, 0.0f); | 152 primaries[2] = Xy2xyz(0.0f, 0.0f); |
153 // D50 | 153 // D50 |
154 primaries[3] = Xy2xyz(0.34567f, 0.35850f); | 154 primaries[3] = Xy2xyz(0.34567f, 0.35850f); |
155 break; | 155 return; |
156 } | 156 } |
| 157 |
| 158 // Red |
| 159 primaries[0] = Xy2xyz(0.640f, 0.330f); |
| 160 // Green |
| 161 primaries[1] = Xy2xyz(0.300f, 0.600f); |
| 162 // Blue |
| 163 primaries[2] = Xy2xyz(0.150f, 0.060f); |
| 164 // Whitepoint (D65f) |
| 165 primaries[3] = Xy2xyz(0.3127f, 0.3290f); |
157 } | 166 } |
158 | 167 |
159 GFX_EXPORT Transform GetPrimaryMatrix(ColorSpace::PrimaryID id) { | 168 GFX_EXPORT Transform GetPrimaryMatrix(ColorSpace::PrimaryID id) { |
160 ColorTransform::TriStim primaries[4]; | 169 ColorTransform::TriStim primaries[4]; |
161 GetPrimaries(id, primaries); | 170 GetPrimaries(id, primaries); |
162 ColorTransform::TriStim WXYZ(primaries[3].x() / primaries[3].y(), 1.0f, | 171 ColorTransform::TriStim WXYZ(primaries[3].x() / primaries[3].y(), 1.0f, |
163 primaries[3].z() / primaries[3].y()); | 172 primaries[3].z() / primaries[3].y()); |
164 | 173 |
165 Transform ret( | 174 Transform ret( |
166 primaries[0].x(), primaries[1].x(), primaries[2].x(), 0.0f, // 1 | 175 primaries[0].x(), primaries[1].x(), primaries[2].x(), 0.0f, // 1 |
(...skipping 17 matching lines...) Expand all Loading... |
184 Transform adapter; | 193 Transform adapter; |
185 adapter.Scale3d(dest_response.x() / source_response.x(), | 194 adapter.Scale3d(dest_response.x() / source_response.x(), |
186 dest_response.y() / source_response.y(), | 195 dest_response.y() / source_response.y(), |
187 dest_response.z() / source_response.z()); | 196 dest_response.z() / source_response.z()); |
188 | 197 |
189 return Invert(bradford) * adapter * bradford * ret; | 198 return Invert(bradford) * adapter * bradford * ret; |
190 } | 199 } |
191 | 200 |
192 GFX_EXPORT float FromLinear(ColorSpace::TransferID id, float v) { | 201 GFX_EXPORT float FromLinear(ColorSpace::TransferID id, float v) { |
193 switch (id) { | 202 switch (id) { |
194 default: | 203 case ColorSpace::TransferID::SMPTEST2084_NON_HDR: |
| 204 // Should already be handled. |
| 205 NOTREACHED(); |
| 206 case ColorSpace::TransferID::CUSTOM: |
| 207 // TODO(hubbe): Actually implement custom transfer functions. |
| 208 case ColorSpace::TransferID::RESERVED0: |
| 209 case ColorSpace::TransferID::RESERVED: |
| 210 case ColorSpace::TransferID::UNSPECIFIED: |
| 211 case ColorSpace::TransferID::UNKNOWN: |
| 212 // All unknown values default to BT709 |
| 213 |
195 case ColorSpace::TransferID::BT709: | 214 case ColorSpace::TransferID::BT709: |
196 case ColorSpace::TransferID::SMPTE170M: | 215 case ColorSpace::TransferID::SMPTE170M: |
197 case ColorSpace::TransferID::BT2020_10: | 216 case ColorSpace::TransferID::BT2020_10: |
198 case ColorSpace::TransferID::BT2020_12: { | 217 case ColorSpace::TransferID::BT2020_12: |
199 v = fmax(0.0f, v); | 218 // BT709 is our "default" cause, so put the code after the switch |
200 float a = 1.099296826809442f; | 219 // to avoid "control reaches end of non-void function" errors. |
201 float b = 0.018053968510807f; | 220 break; |
202 if (v <= b) { | |
203 return 4.5f * v; | |
204 } else { | |
205 return a * powf(v, 0.45f) - (a - 1.0f); | |
206 } | |
207 } | |
208 | 221 |
209 case ColorSpace::TransferID::GAMMA22: | 222 case ColorSpace::TransferID::GAMMA22: |
210 v = fmax(0.0f, v); | 223 v = fmax(0.0f, v); |
211 return powf(v, 1.0f / 2.2f); | 224 return powf(v, 1.0f / 2.2f); |
212 | 225 |
213 case ColorSpace::TransferID::GAMMA28: | 226 case ColorSpace::TransferID::GAMMA28: |
214 v = fmax(0.0f, v); | 227 v = fmax(0.0f, v); |
215 return powf(v, 1.0f / 2.8f); | 228 return powf(v, 1.0f / 2.8f); |
216 | 229 |
217 case ColorSpace::TransferID::SMPTE240M: { | 230 case ColorSpace::TransferID::SMPTE240M: { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 return 0.5f * sqrtf(v); | 311 return 0.5f * sqrtf(v); |
299 else | 312 else |
300 return a * log(v - b) + c; | 313 return a * log(v - b) + c; |
301 } | 314 } |
302 | 315 |
303 // Chrome-specific values below | 316 // Chrome-specific values below |
304 case ColorSpace::TransferID::GAMMA24: | 317 case ColorSpace::TransferID::GAMMA24: |
305 v = fmax(0.0f, v); | 318 v = fmax(0.0f, v); |
306 return powf(v, 1.0f / 2.4f); | 319 return powf(v, 1.0f / 2.4f); |
307 } | 320 } |
| 321 |
| 322 v = fmax(0.0f, v); |
| 323 float a = 1.099296826809442f; |
| 324 float b = 0.018053968510807f; |
| 325 if (v <= b) { |
| 326 return 4.5f * v; |
| 327 } else { |
| 328 return a * powf(v, 0.45f) - (a - 1.0f); |
| 329 } |
308 } | 330 } |
309 | 331 |
310 GFX_EXPORT float ToLinear(ColorSpace::TransferID id, float v) { | 332 GFX_EXPORT float ToLinear(ColorSpace::TransferID id, float v) { |
311 switch (id) { | 333 switch (id) { |
312 default: | 334 case ColorSpace::TransferID::CUSTOM: |
| 335 // TODO(hubbe): Actually implement custom transfer functions. |
| 336 case ColorSpace::TransferID::RESERVED0: |
| 337 case ColorSpace::TransferID::RESERVED: |
| 338 case ColorSpace::TransferID::UNSPECIFIED: |
| 339 case ColorSpace::TransferID::UNKNOWN: |
| 340 // All unknown values default to BT709 |
| 341 |
313 case ColorSpace::TransferID::BT709: | 342 case ColorSpace::TransferID::BT709: |
314 case ColorSpace::TransferID::SMPTE170M: | 343 case ColorSpace::TransferID::SMPTE170M: |
315 case ColorSpace::TransferID::BT2020_10: | 344 case ColorSpace::TransferID::BT2020_10: |
316 case ColorSpace::TransferID::BT2020_12: { | 345 case ColorSpace::TransferID::BT2020_12: |
317 v = fmax(0.0f, v); | 346 // BT709 is our "default" cause, so put the code after the switch |
318 float a = 1.099296826809442f; | 347 // to avoid "control reaches end of non-void function" errors. |
319 float b = 0.018053968510807f; | 348 break; |
320 if (v < FromLinear(ColorSpace::TransferID::BT709, b)) { | |
321 return v / 4.5f; | |
322 } else { | |
323 return powf((v + a - 1.0f) / a, 1.0f / 0.45f); | |
324 } | |
325 } | |
326 | 349 |
327 case ColorSpace::TransferID::GAMMA22: | 350 case ColorSpace::TransferID::GAMMA22: |
328 v = fmax(0.0f, v); | 351 v = fmax(0.0f, v); |
329 return powf(v, 2.2f); | 352 return powf(v, 2.2f); |
330 | 353 |
331 case ColorSpace::TransferID::GAMMA28: | 354 case ColorSpace::TransferID::GAMMA28: |
332 v = fmax(0.0f, v); | 355 v = fmax(0.0f, v); |
333 return powf(v, 2.8f); | 356 return powf(v, 2.8f); |
334 | 357 |
335 case ColorSpace::TransferID::SMPTE240M: { | 358 case ColorSpace::TransferID::SMPTE240M: { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 const float Lmax = 12.0f; | 448 const float Lmax = 12.0f; |
426 float v_ = 0.0f; | 449 float v_ = 0.0f; |
427 if (v <= 0.5f) { | 450 if (v <= 0.5f) { |
428 v_ = (v * 2.0f) * (v * 2.0f); | 451 v_ = (v * 2.0f) * (v * 2.0f); |
429 } else { | 452 } else { |
430 v_ = exp((v - c) / a) + b; | 453 v_ = exp((v - c) / a) + b; |
431 } | 454 } |
432 return v_ / Lmax; | 455 return v_ / Lmax; |
433 } | 456 } |
434 } | 457 } |
| 458 |
| 459 v = fmax(0.0f, v); |
| 460 float a = 1.099296826809442f; |
| 461 float b = 0.018053968510807f; |
| 462 if (v < FromLinear(ColorSpace::TransferID::BT709, b)) { |
| 463 return v / 4.5f; |
| 464 } else { |
| 465 return powf((v + a - 1.0f) / a, 1.0f / 0.45f); |
| 466 } |
435 } | 467 } |
436 | 468 |
437 namespace { | 469 namespace { |
438 // Assumes bt2020 | 470 // Assumes bt2020 |
439 float Luma(const ColorTransform::TriStim& c) { | 471 float Luma(const ColorTransform::TriStim& c) { |
440 return c.x() * 0.2627f + c.y() * 0.6780f + c.z() * 0.0593f; | 472 return c.x() * 0.2627f + c.y() * 0.6780f + c.z() * 0.0593f; |
441 } | 473 } |
442 }; | 474 }; |
443 | 475 |
444 GFX_EXPORT ColorTransform::TriStim ToLinear(ColorSpace::TransferID id, | 476 GFX_EXPORT ColorTransform::TriStim ToLinear(ColorSpace::TransferID id, |
445 ColorTransform::TriStim color) { | 477 ColorTransform::TriStim color) { |
446 ColorTransform::TriStim ret(ToLinear(id, color.x()), ToLinear(id, color.y()), | 478 ColorTransform::TriStim ret(ToLinear(id, color.x()), ToLinear(id, color.y()), |
447 ToLinear(id, color.z())); | 479 ToLinear(id, color.z())); |
448 | 480 |
449 if (id == ColorSpace::TransferID::SMPTEST2084_NON_HDR) { | 481 if (id == ColorSpace::TransferID::SMPTEST2084_NON_HDR) { |
450 if (Luma(ret) > 0.0) { | 482 if (Luma(ret) > 0.0) { |
451 ColorTransform::TriStim smpte2084( | 483 ColorTransform::TriStim smpte2084( |
452 ToLinear(ColorSpace::TransferID::SMPTEST2084, color.x()), | 484 ToLinear(ColorSpace::TransferID::SMPTEST2084, color.x()), |
453 ToLinear(ColorSpace::TransferID::SMPTEST2084, color.y()), | 485 ToLinear(ColorSpace::TransferID::SMPTEST2084, color.y()), |
454 ToLinear(ColorSpace::TransferID::SMPTEST2084, color.z())); | 486 ToLinear(ColorSpace::TransferID::SMPTEST2084, color.z())); |
455 smpte2084.Scale(Luma(ret) / Luma(smpte2084)); | 487 smpte2084.Scale(Luma(ret) / Luma(smpte2084)); |
456 ret = smpte2084; | 488 ret = smpte2084; |
457 } | 489 } |
458 } | 490 } |
459 | 491 |
460 return ret; | 492 return ret; |
461 } | 493 } |
462 | 494 |
463 GFX_EXPORT Transform GetTransferMatrix(ColorSpace::MatrixID id) { | 495 GFX_EXPORT Transform GetTransferMatrix(ColorSpace::MatrixID id) { |
464 float Kr = 0.0f, Kb = 0.0f; | 496 // Default values for BT709; |
| 497 float Kr = 0.2126f; |
| 498 float Kb = 0.0722f; |
465 switch (id) { | 499 switch (id) { |
466 case ColorSpace::MatrixID::RGB: | 500 case ColorSpace::MatrixID::RGB: |
467 return Transform(); | 501 return Transform(); |
468 | 502 |
469 case ColorSpace::MatrixID::BT709: | 503 case ColorSpace::MatrixID::BT709: |
470 case ColorSpace::MatrixID::UNSPECIFIED: | 504 case ColorSpace::MatrixID::UNSPECIFIED: |
471 case ColorSpace::MatrixID::RESERVED: | 505 case ColorSpace::MatrixID::RESERVED: |
472 Kr = 0.2126f; | 506 case ColorSpace::MatrixID::UNKNOWN: |
473 Kb = 0.0722f; | 507 // Default values are already set. |
474 break; | 508 break; |
475 | 509 |
476 case ColorSpace::MatrixID::FCC: | 510 case ColorSpace::MatrixID::FCC: |
477 Kr = 0.30f; | 511 Kr = 0.30f; |
478 Kb = 0.11f; | 512 Kb = 0.11f; |
479 break; | 513 break; |
480 | 514 |
481 case ColorSpace::MatrixID::BT470BG: | 515 case ColorSpace::MatrixID::BT470BG: |
482 case ColorSpace::MatrixID::SMPTE170M: | 516 case ColorSpace::MatrixID::SMPTE170M: |
483 Kr = 0.299f; | 517 Kr = 0.299f; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 case ColorSpace::MatrixID::BT709: | 571 case ColorSpace::MatrixID::BT709: |
538 case ColorSpace::MatrixID::UNSPECIFIED: | 572 case ColorSpace::MatrixID::UNSPECIFIED: |
539 case ColorSpace::MatrixID::RESERVED: | 573 case ColorSpace::MatrixID::RESERVED: |
540 case ColorSpace::MatrixID::FCC: | 574 case ColorSpace::MatrixID::FCC: |
541 case ColorSpace::MatrixID::BT470BG: | 575 case ColorSpace::MatrixID::BT470BG: |
542 case ColorSpace::MatrixID::SMPTE170M: | 576 case ColorSpace::MatrixID::SMPTE170M: |
543 case ColorSpace::MatrixID::SMPTE240M: | 577 case ColorSpace::MatrixID::SMPTE240M: |
544 case ColorSpace::MatrixID::BT2020_NCL: | 578 case ColorSpace::MatrixID::BT2020_NCL: |
545 case ColorSpace::MatrixID::BT2020_CL: | 579 case ColorSpace::MatrixID::BT2020_CL: |
546 case ColorSpace::MatrixID::YDZDX: | 580 case ColorSpace::MatrixID::YDZDX: |
| 581 case ColorSpace::MatrixID::UNKNOWN: |
547 return Transform(255.0f / 219.0f, 0.0f, 0.0f, -16.0f / 219.0f, // 1 | 582 return Transform(255.0f / 219.0f, 0.0f, 0.0f, -16.0f / 219.0f, // 1 |
548 0.0f, 255.0f / 224.0f, 0.0f, -15.5f / 224.0f, // 2 | 583 0.0f, 255.0f / 224.0f, 0.0f, -15.5f / 224.0f, // 2 |
549 0.0f, 0.0f, 255.0f / 224.0f, -15.5f / 224.0f, // 3 | 584 0.0f, 0.0f, 255.0f / 224.0f, -15.5f / 224.0f, // 3 |
550 0.0f, 0.0f, 0.0f, 1.0f); // 4 | 585 0.0f, 0.0f, 0.0f, 1.0f); // 4 |
551 } | 586 } |
552 NOTREACHED(); | 587 NOTREACHED(); |
553 return Transform(); | 588 return Transform(); |
554 } | 589 } |
555 | 590 |
556 class ColorSpaceToColorSpaceTransform : public ColorTransform { | 591 class ColorSpaceToColorSpaceTransform : public ColorTransform { |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
735 std::unique_ptr<ColorTransform>( | 770 std::unique_ptr<ColorTransform>( |
736 new QCMSColorTransform(GetXYZD50Profile(), to_profile)))); | 771 new QCMSColorTransform(GetXYZD50Profile(), to_profile)))); |
737 } else { | 772 } else { |
738 return std::unique_ptr<ColorTransform>( | 773 return std::unique_ptr<ColorTransform>( |
739 new ColorSpaceToColorSpaceTransform(from, to, intent)); | 774 new ColorSpaceToColorSpaceTransform(from, to, intent)); |
740 } | 775 } |
741 } | 776 } |
742 } | 777 } |
743 | 778 |
744 } // namespace gfx | 779 } // namespace gfx |
OLD | NEW |