Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: ui/gfx/color_transform.cc

Issue 2338213009: Always use valid enum values in gfx::ColorSpace (Closed)
Patch Set: merge Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/gfx/color_space.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « ui/gfx/color_space.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698