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