OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_space.h" | 5 #include "ui/gfx/color_space.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
11 #include "third_party/skia/include/core/SkColorSpace.h" | 11 #include "third_party/skia/include/core/SkColorSpace.h" |
12 #include "ui/gfx/icc_profile.h" | 12 #include "ui/gfx/icc_profile.h" |
13 #include "ui/gfx/skia_color_space_util.h" | 13 #include "ui/gfx/skia_color_space_util.h" |
14 #include "ui/gfx/transform.h" | 14 #include "ui/gfx/transform.h" |
15 | 15 |
16 namespace gfx { | 16 namespace gfx { |
17 | 17 |
18 ColorSpace::PrimaryID ColorSpace::PrimaryIDFromInt(int primary_id) { | 18 // static |
19 if (primary_id < 0 || primary_id > static_cast<int>(PrimaryID::LAST)) | 19 ColorSpace ColorSpace::CreateVideo(int video_primary, |
20 return PrimaryID::UNKNOWN; | 20 int video_transfer, |
21 if (primary_id > static_cast<int>(PrimaryID::LAST_STANDARD_VALUE) && | 21 int video_matrix, |
22 primary_id < 1000) | 22 RangeID range_id) { |
23 return PrimaryID::UNKNOWN; | 23 // TODO(hubbe): Use more context to decide how to handle UNSPECIFIED values. |
24 return static_cast<PrimaryID>(primary_id); | 24 ColorSpace result; |
25 } | 25 switch (video_primary) { |
26 | 26 default: |
27 ColorSpace::TransferID ColorSpace::TransferIDFromInt(int transfer_id) { | 27 case 0: // RESERVED0 |
28 if (transfer_id < 0 || transfer_id > static_cast<int>(TransferID::LAST)) | 28 case 1: // BT709 |
29 return TransferID::UNKNOWN; | 29 case 2: // UNSPECIFIED |
30 if (transfer_id > static_cast<int>(TransferID::LAST_STANDARD_VALUE) && | 30 case 3: // RESERVED |
31 transfer_id < 1000) | 31 result.primaries_ = PrimaryID::BT709; |
32 return TransferID::UNKNOWN; | 32 break; |
33 return static_cast<TransferID>(transfer_id); | 33 case 4: // BT470M |
34 } | 34 result.primaries_ = PrimaryID::BT470M; |
35 | 35 break; |
36 ColorSpace::MatrixID ColorSpace::MatrixIDFromInt(int matrix_id) { | 36 case 5: // BT470BG |
37 if (matrix_id < 0 || matrix_id > static_cast<int>(MatrixID::LAST)) | 37 result.primaries_ = PrimaryID::BT470BG; |
38 return MatrixID::UNKNOWN; | 38 break; |
39 if (matrix_id > static_cast<int>(MatrixID::LAST_STANDARD_VALUE) && | 39 case 6: // SMPTE170M |
40 matrix_id < 1000) | 40 result.primaries_ = PrimaryID::SMPTE170M; |
41 return MatrixID::UNKNOWN; | 41 break; |
42 return static_cast<MatrixID>(matrix_id); | 42 case 7: // SMPTE240M |
| 43 result.primaries_ = PrimaryID::SMPTE240M; |
| 44 break; |
| 45 case 8: // FILM |
| 46 result.primaries_ = PrimaryID::FILM; |
| 47 break; |
| 48 case 9: // BT2020 |
| 49 result.primaries_ = PrimaryID::BT2020; |
| 50 break; |
| 51 case 10: // SMPTEST428_1 |
| 52 result.primaries_ = PrimaryID::SMPTEST428_1; |
| 53 break; |
| 54 case 11: // SMPTEST431_2 |
| 55 result.primaries_ = PrimaryID::SMPTEST431_2; |
| 56 break; |
| 57 case 12: // SMPTEST432_1 |
| 58 result.primaries_ = PrimaryID::SMPTEST432_1; |
| 59 break; |
| 60 } |
| 61 switch (video_transfer) { |
| 62 default: |
| 63 case 0: // RESERVED0 |
| 64 case 1: // BT709 |
| 65 case 2: // UNSPECIFIED |
| 66 case 3: // RESERVED |
| 67 result.transfer_ = TransferID::BT709; |
| 68 break; |
| 69 case 4: // GAMMA22 |
| 70 result.transfer_ = TransferID::GAMMA22; |
| 71 break; |
| 72 case 5: // GAMMA28 |
| 73 result.transfer_ = TransferID::GAMMA28; |
| 74 break; |
| 75 case 6: // SMPTE170M |
| 76 result.transfer_ = TransferID::SMPTE170M; |
| 77 break; |
| 78 case 7: // SMPTE240M |
| 79 result.transfer_ = TransferID::SMPTE240M; |
| 80 break; |
| 81 case 8: // LINEAR |
| 82 result.transfer_ = TransferID::LINEAR; |
| 83 break; |
| 84 case 9: // LOG |
| 85 result.transfer_ = TransferID::LOG; |
| 86 break; |
| 87 case 10: // LOG_SQRT |
| 88 result.transfer_ = TransferID::LOG_SQRT; |
| 89 break; |
| 90 case 11: // IEC61966_2_4 |
| 91 result.transfer_ = TransferID::IEC61966_2_4; |
| 92 break; |
| 93 case 12: // BT1361_ECG |
| 94 result.transfer_ = TransferID::BT1361_ECG; |
| 95 break; |
| 96 case 13: // IEC61966_2_1 |
| 97 result.transfer_ = TransferID::IEC61966_2_1; |
| 98 break; |
| 99 case 14: // BT2020_10 |
| 100 result.transfer_ = TransferID::BT2020_10; |
| 101 break; |
| 102 case 15: // BT2020_12 |
| 103 result.transfer_ = TransferID::BT2020_12; |
| 104 break; |
| 105 case 16: // SMPTEST2084 |
| 106 result.transfer_ = TransferID::SMPTEST2084; |
| 107 break; |
| 108 case 17: // SMPTEST428_1 |
| 109 result.transfer_ = TransferID::SMPTEST428_1; |
| 110 break; |
| 111 case 18: // ARIB_STD_B67 |
| 112 result.transfer_ = TransferID::ARIB_STD_B67; |
| 113 break; |
| 114 } |
| 115 switch (video_matrix) { |
| 116 case 0: // RGB |
| 117 result.matrix_ = MatrixID::RGB; |
| 118 break; |
| 119 default: |
| 120 case 1: // BT709 |
| 121 case 2: // UNSPECIFIED |
| 122 case 3: // RESERVED |
| 123 result.matrix_ = MatrixID::BT709; |
| 124 break; |
| 125 case 4: // FCC |
| 126 result.matrix_ = MatrixID::FCC; |
| 127 break; |
| 128 case 5: // BT470BG |
| 129 result.matrix_ = MatrixID::BT470BG; |
| 130 break; |
| 131 case 6: // SMPTE170M |
| 132 result.matrix_ = MatrixID::SMPTE170M; |
| 133 break; |
| 134 case 7: // SMPTE240M |
| 135 result.matrix_ = MatrixID::SMPTE240M; |
| 136 break; |
| 137 case 8: // YCOCG |
| 138 result.matrix_ = MatrixID::YCOCG; |
| 139 break; |
| 140 case 9: // BT2020_NCL |
| 141 result.matrix_ = MatrixID::BT2020_NCL; |
| 142 break; |
| 143 case 10: // BT2020_CL |
| 144 result.matrix_ = MatrixID::BT2020_CL; |
| 145 break; |
| 146 case 11: // YDZDX |
| 147 result.matrix_ = MatrixID::YDZDX; |
| 148 break; |
| 149 } |
| 150 result.range_ = range_id; |
| 151 return result; |
43 } | 152 } |
44 | 153 |
45 ColorSpace::ColorSpace() {} | 154 ColorSpace::ColorSpace() {} |
46 | 155 |
47 ColorSpace::ColorSpace(PrimaryID primaries, | 156 ColorSpace::ColorSpace(PrimaryID primaries, |
48 TransferID transfer) | 157 TransferID transfer) |
49 : primaries_(primaries), | 158 : primaries_(primaries), |
50 transfer_(transfer), | 159 transfer_(transfer), |
51 matrix_(MatrixID::RGB), | 160 matrix_(MatrixID::RGB), |
52 range_(RangeID::FULL) {} | 161 range_(RangeID::FULL) {} |
53 | 162 |
54 ColorSpace::ColorSpace(PrimaryID primaries, | 163 ColorSpace::ColorSpace(PrimaryID primaries, |
55 TransferID transfer, | 164 TransferID transfer, |
56 MatrixID matrix, | 165 MatrixID matrix, |
57 RangeID range) | 166 RangeID range) |
58 : primaries_(primaries), | 167 : primaries_(primaries), |
59 transfer_(transfer), | 168 transfer_(transfer), |
60 matrix_(matrix), | 169 matrix_(matrix), |
61 range_(range) {} | 170 range_(range) {} |
62 | 171 |
63 ColorSpace::ColorSpace(int primaries, int transfer, int matrix, RangeID range) | |
64 : primaries_(PrimaryIDFromInt(primaries)), | |
65 transfer_(TransferIDFromInt(transfer)), | |
66 matrix_(MatrixIDFromInt(matrix)), | |
67 range_(range) {} | |
68 | |
69 ColorSpace::ColorSpace(const ColorSpace& other) | 172 ColorSpace::ColorSpace(const ColorSpace& other) |
70 : primaries_(other.primaries_), | 173 : primaries_(other.primaries_), |
71 transfer_(other.transfer_), | 174 transfer_(other.transfer_), |
72 matrix_(other.matrix_), | 175 matrix_(other.matrix_), |
73 range_(other.range_), | 176 range_(other.range_), |
74 icc_profile_id_(other.icc_profile_id_), | 177 icc_profile_id_(other.icc_profile_id_), |
75 icc_profile_sk_color_space_(other.icc_profile_sk_color_space_) { | 178 icc_profile_sk_color_space_(other.icc_profile_sk_color_space_) { |
76 if (transfer_ == TransferID::CUSTOM) { | 179 if (transfer_ == TransferID::CUSTOM) { |
77 memcpy(custom_transfer_params_, other.custom_transfer_params_, | 180 memcpy(custom_transfer_params_, other.custom_transfer_params_, |
78 sizeof(custom_transfer_params_)); | 181 sizeof(custom_transfer_params_)); |
79 } | 182 } |
80 if (primaries_ == PrimaryID::CUSTOM) { | 183 if (primaries_ == PrimaryID::CUSTOM) { |
81 memcpy(custom_primary_matrix_, other.custom_primary_matrix_, | 184 memcpy(custom_primary_matrix_, other.custom_primary_matrix_, |
82 sizeof(custom_primary_matrix_)); | 185 sizeof(custom_primary_matrix_)); |
83 } | 186 } |
84 } | 187 } |
85 | |
86 ColorSpace::~ColorSpace() = default; | 188 ColorSpace::~ColorSpace() = default; |
87 | 189 |
88 bool ColorSpace::IsValid() const { | 190 bool ColorSpace::IsValid() const { |
89 return *this != gfx::ColorSpace(); | 191 return primaries_ != PrimaryID::INVALID && transfer_ != TransferID::INVALID && |
| 192 matrix_ != MatrixID::INVALID && range_ != RangeID::INVALID; |
90 } | 193 } |
91 | 194 |
92 // static | 195 // static |
93 ColorSpace ColorSpace::CreateSRGB() { | 196 ColorSpace ColorSpace::CreateSRGB() { |
94 return ColorSpace(PrimaryID::BT709, TransferID::IEC61966_2_1, MatrixID::RGB, | 197 return ColorSpace(PrimaryID::BT709, TransferID::IEC61966_2_1, MatrixID::RGB, |
95 RangeID::FULL); | 198 RangeID::FULL); |
96 } | 199 } |
97 | 200 |
98 // static | 201 // static |
99 ColorSpace ColorSpace::CreateSCRGBLinear() { | 202 ColorSpace ColorSpace::CreateSCRGBLinear() { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 return false; | 293 return false; |
191 } | 294 } |
192 | 295 |
193 sk_sp<SkColorSpace> ColorSpace::ToSkColorSpace() const { | 296 sk_sp<SkColorSpace> ColorSpace::ToSkColorSpace() const { |
194 // If we got a specific SkColorSpace from the ICCProfile that this color space | 297 // If we got a specific SkColorSpace from the ICCProfile that this color space |
195 // was created from, use that. | 298 // was created from, use that. |
196 if (icc_profile_sk_color_space_) | 299 if (icc_profile_sk_color_space_) |
197 return icc_profile_sk_color_space_; | 300 return icc_profile_sk_color_space_; |
198 | 301 |
199 // Unspecified color spaces correspond to the null SkColorSpace. | 302 // Unspecified color spaces correspond to the null SkColorSpace. |
200 if (primaries_ == PrimaryID::UNSPECIFIED || | 303 if (!IsValid()) |
201 transfer_ == TransferID::UNSPECIFIED) { | |
202 return nullptr; | 304 return nullptr; |
203 } | |
204 | 305 |
205 // Handle only full-range RGB spaces. | 306 // Handle only full-range RGB spaces. |
206 if (matrix_ != MatrixID::RGB) { | 307 if (matrix_ != MatrixID::RGB) { |
207 DLOG(ERROR) << "Not creating non-RGB SkColorSpace"; | 308 DLOG(ERROR) << "Not creating non-RGB SkColorSpace"; |
208 return nullptr; | 309 return nullptr; |
209 } | 310 } |
210 if (range_ != RangeID::FULL) { | 311 if (range_ != RangeID::FULL) { |
211 DLOG(ERROR) << "Not creating non-full-range SkColorSpace"; | 312 DLOG(ERROR) << "Not creating non-full-range SkColorSpace"; |
212 return nullptr; | 313 return nullptr; |
213 } | 314 } |
(...skipping 28 matching lines...) Expand all Loading... |
242 return SkColorSpace::MakeRGB(fn, to_xyz_d50); | 343 return SkColorSpace::MakeRGB(fn, to_xyz_d50); |
243 } | 344 } |
244 | 345 |
245 void ColorSpace::GetPrimaryMatrix(SkMatrix44* to_XYZD50) const { | 346 void ColorSpace::GetPrimaryMatrix(SkMatrix44* to_XYZD50) const { |
246 SkColorSpacePrimaries primaries = {0}; | 347 SkColorSpacePrimaries primaries = {0}; |
247 switch (primaries_) { | 348 switch (primaries_) { |
248 case ColorSpace::PrimaryID::CUSTOM: | 349 case ColorSpace::PrimaryID::CUSTOM: |
249 to_XYZD50->set3x3RowMajorf(custom_primary_matrix_); | 350 to_XYZD50->set3x3RowMajorf(custom_primary_matrix_); |
250 return; | 351 return; |
251 | 352 |
252 case ColorSpace::PrimaryID::RESERVED0: | 353 case ColorSpace::PrimaryID::INVALID: |
253 case ColorSpace::PrimaryID::RESERVED: | 354 to_XYZD50->setIdentity(); |
254 case ColorSpace::PrimaryID::UNSPECIFIED: | 355 return; |
255 case ColorSpace::PrimaryID::UNKNOWN: | 356 |
256 case ColorSpace::PrimaryID::BT709: | 357 case ColorSpace::PrimaryID::BT709: |
257 // BT709 is our default case. Put it after the switch just | 358 // BT709 is our default case. Put it after the switch just |
258 // in case we somehow get an id which is not listed in the switch. | 359 // in case we somehow get an id which is not listed in the switch. |
259 // (We don't want to use "default", because we want the compiler | 360 // (We don't want to use "default", because we want the compiler |
260 // to tell us if we forgot some enum values.) | 361 // to tell us if we forgot some enum values.) |
261 primaries.fRX = 0.640f; | 362 primaries.fRX = 0.640f; |
262 primaries.fRY = 0.330f; | 363 primaries.fRY = 0.330f; |
263 primaries.fGX = 0.300f; | 364 primaries.fGX = 0.300f; |
264 primaries.fGY = 0.600f; | 365 primaries.fGY = 0.600f; |
265 primaries.fBX = 0.150f; | 366 primaries.fBX = 0.150f; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 return true; | 508 return true; |
408 case ColorSpace::TransferID::GAMMA22: | 509 case ColorSpace::TransferID::GAMMA22: |
409 fn->fG = 2.2f; | 510 fn->fG = 2.2f; |
410 return true; | 511 return true; |
411 case ColorSpace::TransferID::GAMMA24: | 512 case ColorSpace::TransferID::GAMMA24: |
412 fn->fG = 2.4f; | 513 fn->fG = 2.4f; |
413 return true; | 514 return true; |
414 case ColorSpace::TransferID::GAMMA28: | 515 case ColorSpace::TransferID::GAMMA28: |
415 fn->fG = 2.8f; | 516 fn->fG = 2.8f; |
416 return true; | 517 return true; |
417 case ColorSpace::TransferID::RESERVED0: | |
418 case ColorSpace::TransferID::RESERVED: | |
419 case ColorSpace::TransferID::UNSPECIFIED: | |
420 case ColorSpace::TransferID::UNKNOWN: | |
421 // All unknown values default to BT709 | |
422 case ColorSpace::TransferID::BT709: | 518 case ColorSpace::TransferID::BT709: |
423 case ColorSpace::TransferID::SMPTE170M: | 519 case ColorSpace::TransferID::SMPTE170M: |
424 case ColorSpace::TransferID::BT2020_10: | 520 case ColorSpace::TransferID::BT2020_10: |
425 case ColorSpace::TransferID::BT2020_12: | 521 case ColorSpace::TransferID::BT2020_12: |
426 fn->fA = 0.909672431050f; | 522 fn->fA = 0.909672431050f; |
427 fn->fB = 0.090327568950f; | 523 fn->fB = 0.090327568950f; |
428 fn->fC = 0.222222222222f; | 524 fn->fC = 0.222222222222f; |
429 fn->fD = 0.081242862158f; | 525 fn->fD = 0.081242862158f; |
430 fn->fG = 2.222222222222f; | 526 fn->fG = 2.222222222222f; |
431 return true; | 527 return true; |
(...skipping 19 matching lines...) Expand all Loading... |
451 case ColorSpace::TransferID::IEC61966_2_4: | 547 case ColorSpace::TransferID::IEC61966_2_4: |
452 // This could potentially be represented the same as IEC61966_2_1, but | 548 // This could potentially be represented the same as IEC61966_2_1, but |
453 // it handles negative values differently. | 549 // it handles negative values differently. |
454 break; | 550 break; |
455 case ColorSpace::TransferID::ARIB_STD_B67: | 551 case ColorSpace::TransferID::ARIB_STD_B67: |
456 case ColorSpace::TransferID::BT1361_ECG: | 552 case ColorSpace::TransferID::BT1361_ECG: |
457 case ColorSpace::TransferID::LOG: | 553 case ColorSpace::TransferID::LOG: |
458 case ColorSpace::TransferID::LOG_SQRT: | 554 case ColorSpace::TransferID::LOG_SQRT: |
459 case ColorSpace::TransferID::SMPTEST2084: | 555 case ColorSpace::TransferID::SMPTEST2084: |
460 case ColorSpace::TransferID::SMPTEST2084_NON_HDR: | 556 case ColorSpace::TransferID::SMPTEST2084_NON_HDR: |
| 557 case ColorSpace::TransferID::INVALID: |
461 break; | 558 break; |
462 } | 559 } |
463 | 560 |
464 return false; | 561 return false; |
465 } | 562 } |
466 | 563 |
467 bool ColorSpace::GetInverseTransferFunction(SkColorSpaceTransferFn* fn) const { | 564 bool ColorSpace::GetInverseTransferFunction(SkColorSpaceTransferFn* fn) const { |
468 if (!GetTransferFunction(fn)) | 565 if (!GetTransferFunction(fn)) |
469 return false; | 566 return false; |
470 *fn = SkTransferFnInverse(*fn); | 567 *fn = SkTransferFnInverse(*fn); |
471 return true; | 568 return true; |
472 } | 569 } |
473 | 570 |
474 void ColorSpace::GetTransferMatrix(SkMatrix44* matrix) const { | 571 void ColorSpace::GetTransferMatrix(SkMatrix44* matrix) const { |
475 float Kr = 0; | 572 float Kr = 0; |
476 float Kb = 0; | 573 float Kb = 0; |
477 switch (matrix_) { | 574 switch (matrix_) { |
478 case ColorSpace::MatrixID::RGB: | 575 case ColorSpace::MatrixID::RGB: |
| 576 case ColorSpace::MatrixID::INVALID: |
479 matrix->setIdentity(); | 577 matrix->setIdentity(); |
480 return; | 578 return; |
481 | 579 |
482 case ColorSpace::MatrixID::BT709: | 580 case ColorSpace::MatrixID::BT709: |
483 case ColorSpace::MatrixID::UNSPECIFIED: | |
484 case ColorSpace::MatrixID::RESERVED: | |
485 case ColorSpace::MatrixID::UNKNOWN: | |
486 Kr = 0.2126f; | 581 Kr = 0.2126f; |
487 Kb = 0.0722f; | 582 Kb = 0.0722f; |
488 break; | 583 break; |
489 | 584 |
490 case ColorSpace::MatrixID::FCC: | 585 case ColorSpace::MatrixID::FCC: |
491 Kr = 0.30f; | 586 Kr = 0.30f; |
492 Kb = 0.11f; | 587 Kb = 0.11f; |
493 break; | 588 break; |
494 | 589 |
495 case ColorSpace::MatrixID::BT470BG: | 590 case ColorSpace::MatrixID::BT470BG: |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 u_m * -Kr, u_m * -Kg, u_m * (1.0f - Kb), 0.5f, // U | 650 u_m * -Kr, u_m * -Kg, u_m * (1.0f - Kb), 0.5f, // U |
556 v_m * (1.0f - Kr), v_m * -Kg, v_m * -Kb, 0.5f, // V | 651 v_m * (1.0f - Kr), v_m * -Kg, v_m * -Kb, 0.5f, // V |
557 0.0f, 0.0f, 0.0f, 1.0f, | 652 0.0f, 0.0f, 0.0f, 1.0f, |
558 }; | 653 }; |
559 matrix->setRowMajorf(data); | 654 matrix->setRowMajorf(data); |
560 } | 655 } |
561 | 656 |
562 void ColorSpace::GetRangeAdjustMatrix(SkMatrix44* matrix) const { | 657 void ColorSpace::GetRangeAdjustMatrix(SkMatrix44* matrix) const { |
563 switch (range_) { | 658 switch (range_) { |
564 case RangeID::FULL: | 659 case RangeID::FULL: |
565 case RangeID::UNSPECIFIED: | 660 case RangeID::INVALID: |
566 matrix->setIdentity(); | 661 matrix->setIdentity(); |
567 return; | 662 return; |
568 | 663 |
569 case RangeID::DERIVED: | 664 case RangeID::DERIVED: |
570 case RangeID::LIMITED: | 665 case RangeID::LIMITED: |
571 break; | 666 break; |
572 } | 667 } |
573 switch (matrix_) { | 668 switch (matrix_) { |
574 case MatrixID::RGB: | 669 case MatrixID::RGB: |
| 670 case MatrixID::INVALID: |
575 case MatrixID::YCOCG: | 671 case MatrixID::YCOCG: |
576 matrix->setScale(255.0f/219.0f, 255.0f/219.0f, 255.0f/219.0f); | 672 matrix->setScale(255.0f/219.0f, 255.0f/219.0f, 255.0f/219.0f); |
577 matrix->postTranslate(-16.0f/219.0f, -16.0f/219.0f, -16.0f/219.0f); | 673 matrix->postTranslate(-16.0f/219.0f, -16.0f/219.0f, -16.0f/219.0f); |
578 break; | 674 break; |
579 | 675 |
580 case MatrixID::BT709: | 676 case MatrixID::BT709: |
581 case MatrixID::UNSPECIFIED: | |
582 case MatrixID::RESERVED: | |
583 case MatrixID::FCC: | 677 case MatrixID::FCC: |
584 case MatrixID::BT470BG: | 678 case MatrixID::BT470BG: |
585 case MatrixID::SMPTE170M: | 679 case MatrixID::SMPTE170M: |
586 case MatrixID::SMPTE240M: | 680 case MatrixID::SMPTE240M: |
587 case MatrixID::BT2020_NCL: | 681 case MatrixID::BT2020_NCL: |
588 case MatrixID::BT2020_CL: | 682 case MatrixID::BT2020_CL: |
589 case MatrixID::YDZDX: | 683 case MatrixID::YDZDX: |
590 case MatrixID::UNKNOWN: | |
591 matrix->setScale(255.0f/219.0f, 255.0f/224.0f, 255.0f/224.0f); | 684 matrix->setScale(255.0f/219.0f, 255.0f/224.0f, 255.0f/224.0f); |
592 matrix->postTranslate(-16.0f/219.0f, -15.5f/224.0f, -15.5f/224.0f); | 685 matrix->postTranslate(-16.0f/219.0f, -15.5f/224.0f, -15.5f/224.0f); |
593 break; | 686 break; |
594 } | 687 } |
595 } | 688 } |
596 | 689 |
597 } // namespace gfx | 690 } // namespace gfx |
OLD | NEW |