| 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 |