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 "base/logging.h" | 5 #include "base/logging.h" |
6 #include "testing/gtest/include/gtest/gtest.h" | 6 #include "testing/gtest/include/gtest/gtest.h" |
7 #include "ui/gfx/color_space.h" | 7 #include "ui/gfx/color_space.h" |
8 #include "ui/gfx/color_transform.h" | 8 #include "ui/gfx/color_transform.h" |
9 #include "ui/gfx/icc_profile.h" | 9 #include "ui/gfx/icc_profile.h" |
10 #include "ui/gfx/transform.h" | 10 #include "ui/gfx/transform.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 ColorSpace::MatrixID::YDZDX, | 52 ColorSpace::MatrixID::YDZDX, |
53 }; | 53 }; |
54 | 54 |
55 ColorSpace::RangeID all_ranges[] = {ColorSpace::RangeID::FULL, | 55 ColorSpace::RangeID all_ranges[] = {ColorSpace::RangeID::FULL, |
56 ColorSpace::RangeID::LIMITED}; | 56 ColorSpace::RangeID::LIMITED}; |
57 | 57 |
58 TEST(SimpleColorSpace, BT709toSRGB) { | 58 TEST(SimpleColorSpace, BT709toSRGB) { |
59 ColorSpace bt709 = ColorSpace::CreateREC709(); | 59 ColorSpace bt709 = ColorSpace::CreateREC709(); |
60 ColorSpace sRGB = ColorSpace::CreateSRGB(); | 60 ColorSpace sRGB = ColorSpace::CreateSRGB(); |
61 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( | 61 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
62 bt709, sRGB, ColorTransform::Intent::ABSOLUTE)); | 62 bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE)); |
63 | 63 |
64 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); | 64 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); |
65 t->transform(&tmp, 1); | 65 t->transform(&tmp, 1); |
66 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); | 66 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); |
67 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); | 67 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); |
68 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); | 68 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); |
69 | 69 |
70 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); | 70 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); |
71 t->transform(&tmp, 1); | 71 t->transform(&tmp, 1); |
72 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); | 72 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 0x00, 0x00, 0x07, 0x94, 0x00, 0x00, 0xfd, 0x8f, 0xff, 0xff, 0xfb, 0xa1, | 336 0x00, 0x00, 0x07, 0x94, 0x00, 0x00, 0xfd, 0x8f, 0xff, 0xff, 0xfb, 0xa1, |
337 0xff, 0xff, 0xfd, 0xa2, 0x00, 0x00, 0x03, 0xdb, 0x00, 0x00, 0xc0, 0x75}; | 337 0xff, 0xff, 0xfd, 0xa2, 0x00, 0x00, 0x03, 0xdb, 0x00, 0x00, 0xc0, 0x75}; |
338 | 338 |
339 TEST(SimpleColorSpace, BT709toSRGBICC) { | 339 TEST(SimpleColorSpace, BT709toSRGBICC) { |
340 ICCProfile srgb_icc = ICCProfile::FromData( | 340 ICCProfile srgb_icc = ICCProfile::FromData( |
341 reinterpret_cast<char*>(srgb_icc_data), arraysize(srgb_icc_data)); | 341 reinterpret_cast<char*>(srgb_icc_data), arraysize(srgb_icc_data)); |
342 | 342 |
343 ColorSpace bt709 = ColorSpace::CreateREC709(); | 343 ColorSpace bt709 = ColorSpace::CreateREC709(); |
344 ColorSpace sRGB = srgb_icc.GetColorSpace(); | 344 ColorSpace sRGB = srgb_icc.GetColorSpace(); |
345 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( | 345 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
346 bt709, sRGB, ColorTransform::Intent::ABSOLUTE)); | 346 bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE)); |
347 | 347 |
348 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); | 348 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); |
349 t->transform(&tmp, 1); | 349 t->transform(&tmp, 1); |
350 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); | 350 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); |
351 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); | 351 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); |
352 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); | 352 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); |
353 | 353 |
354 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); | 354 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); |
355 t->transform(&tmp, 1); | 355 t->transform(&tmp, 1); |
356 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); | 356 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); |
357 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f); | 357 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f); |
358 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f); | 358 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f); |
359 | 359 |
360 // Test a blue color | 360 // Test a blue color |
361 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); | 361 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); |
362 t->transform(&tmp, 1); | 362 t->transform(&tmp, 1); |
363 EXPECT_GT(tmp.z(), tmp.x()); | 363 EXPECT_GT(tmp.z(), tmp.x()); |
364 EXPECT_GT(tmp.z(), tmp.y()); | 364 EXPECT_GT(tmp.z(), tmp.y()); |
365 } | 365 } |
366 | 366 |
| 367 TEST(SimpleColorSpace, GetColorSpace) { |
| 368 ICCProfile srgb_icc = ICCProfile::FromData( |
| 369 reinterpret_cast<char*>(srgb_icc_data), arraysize(srgb_icc_data)); |
| 370 ColorSpace sRGB = srgb_icc.GetColorSpace(); |
| 371 ColorSpace sRGB2 = sRGB; |
| 372 |
| 373 // Prevent sRGB2 from using a cached ICC profile. |
| 374 sRGB2.icc_profile_id_ = 0; |
| 375 |
| 376 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
| 377 sRGB, sRGB2, ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 378 |
| 379 ColorTransform::TriStim tmp(1.0f, 1.0f, 1.0f); |
| 380 t->transform(&tmp, 1); |
| 381 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); |
| 382 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f); |
| 383 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f); |
| 384 |
| 385 tmp = ColorTransform::TriStim(1.0f, 0.0f, 0.0f); |
| 386 t->transform(&tmp, 1); |
| 387 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); |
| 388 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); |
| 389 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); |
| 390 |
| 391 tmp = ColorTransform::TriStim(0.0f, 1.0f, 0.0f); |
| 392 t->transform(&tmp, 1); |
| 393 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); |
| 394 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f); |
| 395 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); |
| 396 |
| 397 tmp = ColorTransform::TriStim(0.0f, 0.0f, 1.0f); |
| 398 t->transform(&tmp, 1); |
| 399 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); |
| 400 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); |
| 401 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f); |
| 402 } |
| 403 |
367 TEST(SimpleColorSpace, UnknownToSRGB) { | 404 TEST(SimpleColorSpace, UnknownToSRGB) { |
368 ColorSpace unknown; | 405 ColorSpace unknown; |
369 ColorSpace sRGB = ColorSpace::CreateSRGB(); | 406 ColorSpace sRGB = ColorSpace::CreateSRGB(); |
370 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( | 407 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
371 unknown, sRGB, ColorTransform::Intent::PERCEPTUAL)); | 408 unknown, sRGB, ColorTransform::Intent::INTENT_PERCEPTUAL)); |
372 | 409 |
373 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); | 410 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); |
374 t->transform(&tmp, 1); | 411 t->transform(&tmp, 1); |
375 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); | 412 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); |
376 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); | 413 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); |
377 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); | 414 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); |
378 | 415 |
379 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); | 416 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); |
380 t->transform(&tmp, 1); | 417 t->transform(&tmp, 1); |
381 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); | 418 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 std::tr1::get<1>(GetParam()), | 477 std::tr1::get<1>(GetParam()), |
441 std::tr1::get<2>(GetParam()), | 478 std::tr1::get<2>(GetParam()), |
442 std::tr1::get<3>(GetParam())) {} | 479 std::tr1::get<3>(GetParam())) {} |
443 | 480 |
444 protected: | 481 protected: |
445 ColorSpace color_space_; | 482 ColorSpace color_space_; |
446 }; | 483 }; |
447 | 484 |
448 TEST_P(ColorSpaceTest, testNullTransform) { | 485 TEST_P(ColorSpaceTest, testNullTransform) { |
449 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( | 486 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
450 color_space_, color_space_, ColorTransform::Intent::ABSOLUTE)); | 487 color_space_, color_space_, ColorTransform::Intent::INTENT_ABSOLUTE)); |
451 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); | 488 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); |
452 t->transform(&tristim, 1); | 489 t->transform(&tristim, 1); |
453 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); | 490 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); |
454 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); | 491 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); |
455 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); | 492 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); |
456 } | 493 } |
457 | 494 |
458 TEST_P(ColorSpaceTest, toXYZandBack) { | 495 TEST_P(ColorSpaceTest, toXYZandBack) { |
459 std::unique_ptr<ColorTransform> t1(ColorTransform::NewColorTransform( | 496 std::unique_ptr<ColorTransform> t1(ColorTransform::NewColorTransform( |
460 color_space_, ColorSpace::CreateXYZD50(), | 497 color_space_, ColorSpace::CreateXYZD50(), |
461 ColorTransform::Intent::ABSOLUTE)); | 498 ColorTransform::Intent::INTENT_ABSOLUTE)); |
462 std::unique_ptr<ColorTransform> t2(ColorTransform::NewColorTransform( | 499 std::unique_ptr<ColorTransform> t2(ColorTransform::NewColorTransform( |
463 ColorSpace::CreateXYZD50(), color_space_, | 500 ColorSpace::CreateXYZD50(), color_space_, |
464 ColorTransform::Intent::ABSOLUTE)); | 501 ColorTransform::Intent::INTENT_ABSOLUTE)); |
465 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); | 502 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); |
466 t1->transform(&tristim, 1); | 503 t1->transform(&tristim, 1); |
467 t2->transform(&tristim, 1); | 504 t2->transform(&tristim, 1); |
468 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); | 505 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); |
469 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); | 506 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); |
470 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); | 507 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); |
471 } | 508 } |
472 | 509 |
473 INSTANTIATE_TEST_CASE_P( | 510 INSTANTIATE_TEST_CASE_P( |
474 A, | 511 A, |
(...skipping 12 matching lines...) Expand all Loading... |
487 testing::ValuesIn(all_ranges))); | 524 testing::ValuesIn(all_ranges))); |
488 | 525 |
489 INSTANTIATE_TEST_CASE_P( | 526 INSTANTIATE_TEST_CASE_P( |
490 C, | 527 C, |
491 ColorSpaceTest, | 528 ColorSpaceTest, |
492 testing::Combine(testing::ValuesIn(all_primaries), | 529 testing::Combine(testing::ValuesIn(all_primaries), |
493 testing::Values(ColorSpace::TransferID::BT709), | 530 testing::Values(ColorSpace::TransferID::BT709), |
494 testing::ValuesIn(all_matrices), | 531 testing::ValuesIn(all_matrices), |
495 testing::ValuesIn(all_ranges))); | 532 testing::ValuesIn(all_ranges))); |
496 } // namespace | 533 } // namespace |
OLD | NEW |