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::INTENT_ABSOLUTE)); | 62 bt709, sRGB, ColorTransform::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::INTENT_ABSOLUTE)); | 346 bt709, sRGB, ColorTransform::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 | |
404 TEST(SimpleColorSpace, UnknownToSRGB) { | 367 TEST(SimpleColorSpace, UnknownToSRGB) { |
405 ColorSpace unknown; | 368 ColorSpace unknown; |
406 ColorSpace sRGB = ColorSpace::CreateSRGB(); | 369 ColorSpace sRGB = ColorSpace::CreateSRGB(); |
407 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( | 370 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
408 unknown, sRGB, ColorTransform::Intent::INTENT_PERCEPTUAL)); | 371 unknown, sRGB, ColorTransform::Intent::PERCEPTUAL)); |
409 | 372 |
410 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); | 373 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); |
411 t->transform(&tmp, 1); | 374 t->transform(&tmp, 1); |
412 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); | 375 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); |
413 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); | 376 EXPECT_NEAR(tmp.y(), 0.0f, 0.001f); |
414 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); | 377 EXPECT_NEAR(tmp.z(), 0.0f, 0.001f); |
415 | 378 |
416 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); | 379 tmp = ColorTransform::TriStim(235.0f / 255.0f, 0.5f, 0.5f); |
417 t->transform(&tmp, 1); | 380 t->transform(&tmp, 1); |
418 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); | 381 EXPECT_NEAR(tmp.x(), 1.0f, 0.001f); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 std::tr1::get<1>(GetParam()), | 440 std::tr1::get<1>(GetParam()), |
478 std::tr1::get<2>(GetParam()), | 441 std::tr1::get<2>(GetParam()), |
479 std::tr1::get<3>(GetParam())) {} | 442 std::tr1::get<3>(GetParam())) {} |
480 | 443 |
481 protected: | 444 protected: |
482 ColorSpace color_space_; | 445 ColorSpace color_space_; |
483 }; | 446 }; |
484 | 447 |
485 TEST_P(ColorSpaceTest, testNullTransform) { | 448 TEST_P(ColorSpaceTest, testNullTransform) { |
486 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( | 449 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
487 color_space_, color_space_, ColorTransform::Intent::INTENT_ABSOLUTE)); | 450 color_space_, color_space_, ColorTransform::Intent::ABSOLUTE)); |
488 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); | 451 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); |
489 t->transform(&tristim, 1); | 452 t->transform(&tristim, 1); |
490 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); | 453 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); |
491 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); | 454 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); |
492 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); | 455 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); |
493 } | 456 } |
494 | 457 |
495 TEST_P(ColorSpaceTest, toXYZandBack) { | 458 TEST_P(ColorSpaceTest, toXYZandBack) { |
496 std::unique_ptr<ColorTransform> t1(ColorTransform::NewColorTransform( | 459 std::unique_ptr<ColorTransform> t1(ColorTransform::NewColorTransform( |
497 color_space_, ColorSpace::CreateXYZD50(), | 460 color_space_, ColorSpace::CreateXYZD50(), |
498 ColorTransform::Intent::INTENT_ABSOLUTE)); | 461 ColorTransform::Intent::ABSOLUTE)); |
499 std::unique_ptr<ColorTransform> t2(ColorTransform::NewColorTransform( | 462 std::unique_ptr<ColorTransform> t2(ColorTransform::NewColorTransform( |
500 ColorSpace::CreateXYZD50(), color_space_, | 463 ColorSpace::CreateXYZD50(), color_space_, |
501 ColorTransform::Intent::INTENT_ABSOLUTE)); | 464 ColorTransform::Intent::ABSOLUTE)); |
502 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); | 465 ColorTransform::TriStim tristim(0.4f, 0.5f, 0.6f); |
503 t1->transform(&tristim, 1); | 466 t1->transform(&tristim, 1); |
504 t2->transform(&tristim, 1); | 467 t2->transform(&tristim, 1); |
505 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); | 468 EXPECT_NEAR(tristim.x(), 0.4f, 0.001f); |
506 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); | 469 EXPECT_NEAR(tristim.y(), 0.5f, 0.001f); |
507 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); | 470 EXPECT_NEAR(tristim.z(), 0.6f, 0.001f); |
508 } | 471 } |
509 | 472 |
510 INSTANTIATE_TEST_CASE_P( | 473 INSTANTIATE_TEST_CASE_P( |
511 A, | 474 A, |
(...skipping 12 matching lines...) Expand all Loading... |
524 testing::ValuesIn(all_ranges))); | 487 testing::ValuesIn(all_ranges))); |
525 | 488 |
526 INSTANTIATE_TEST_CASE_P( | 489 INSTANTIATE_TEST_CASE_P( |
527 C, | 490 C, |
528 ColorSpaceTest, | 491 ColorSpaceTest, |
529 testing::Combine(testing::ValuesIn(all_primaries), | 492 testing::Combine(testing::ValuesIn(all_primaries), |
530 testing::Values(ColorSpace::TransferID::BT709), | 493 testing::Values(ColorSpace::TransferID::BT709), |
531 testing::ValuesIn(all_matrices), | 494 testing::ValuesIn(all_matrices), |
532 testing::ValuesIn(all_ranges))); | 495 testing::ValuesIn(all_ranges))); |
533 } // namespace | 496 } // namespace |
OLD | NEW |