| 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/test/icc_profiles.h" | 10 #include "ui/gfx/test/icc_profiles.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f); | 77 EXPECT_NEAR(tmp.y(), 1.0f, 0.001f); |
| 78 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f); | 78 EXPECT_NEAR(tmp.z(), 1.0f, 0.001f); |
| 79 | 79 |
| 80 // Test a blue color | 80 // Test a blue color |
| 81 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); | 81 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); |
| 82 t->transform(&tmp, 1); | 82 t->transform(&tmp, 1); |
| 83 EXPECT_GT(tmp.z(), tmp.x()); | 83 EXPECT_GT(tmp.z(), tmp.x()); |
| 84 EXPECT_GT(tmp.z(), tmp.y()); | 84 EXPECT_GT(tmp.z(), tmp.y()); |
| 85 } | 85 } |
| 86 | 86 |
| 87 TEST(SimpleColorSpace, SRGBFromICCAndNotICC) { |
| 88 float kEpsilon = 0.001f; |
| 89 ColorTransform::TriStim value_fromicc; |
| 90 ColorTransform::TriStim value_default; |
| 91 |
| 92 ICCProfile srgb_icc_profile = ICCProfileForTestingSRGB(); |
| 93 ColorSpace srgb_fromicc = srgb_icc_profile.GetColorSpace(); |
| 94 ColorSpace srgb_default = gfx::ColorSpace::CreateSRGB(); |
| 95 ColorSpace xyzd50 = gfx::ColorSpace::CreateXYZD50(); |
| 96 |
| 97 value_fromicc = value_default = ColorTransform::TriStim(0.1, 0.5, 0.9); |
| 98 |
| 99 std::unique_ptr<ColorTransform> toxyzd50_fromicc( |
| 100 ColorTransform::NewColorTransform( |
| 101 srgb_fromicc, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 102 // This will have 1 step, namely, the QCMS transform. |
| 103 EXPECT_EQ(toxyzd50_fromicc->NumberOfStepsForTesting(), 1u); |
| 104 toxyzd50_fromicc->transform(&value_fromicc, 1); |
| 105 |
| 106 std::unique_ptr<ColorTransform> toxyzd50_default( |
| 107 ColorTransform::NewColorTransform( |
| 108 srgb_default, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 109 // This will have a transfer function and then linear transform. |
| 110 EXPECT_EQ(toxyzd50_default->NumberOfStepsForTesting(), 2u); |
| 111 toxyzd50_default->transform(&value_default, 1); |
| 112 |
| 113 EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon); |
| 114 EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon); |
| 115 EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon); |
| 116 |
| 117 value_fromicc = value_default = ColorTransform::TriStim(0.1, 0.5, 0.9); |
| 118 |
| 119 std::unique_ptr<ColorTransform> fromxyzd50_fromicc( |
| 120 ColorTransform::NewColorTransform( |
| 121 xyzd50, srgb_fromicc, ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 122 fromxyzd50_fromicc->transform(&value_fromicc, 1); |
| 123 |
| 124 std::unique_ptr<ColorTransform> fromxyzd50_default( |
| 125 ColorTransform::NewColorTransform( |
| 126 xyzd50, srgb_default, ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 127 fromxyzd50_default->transform(&value_default, 1); |
| 128 |
| 129 EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon); |
| 130 EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon); |
| 131 EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon); |
| 132 } |
| 133 |
| 87 TEST(SimpleColorSpace, BT709toSRGBICC) { | 134 TEST(SimpleColorSpace, BT709toSRGBICC) { |
| 88 ICCProfile srgb_icc = ICCProfileForTestingSRGB(); | 135 ICCProfile srgb_icc = ICCProfileForTestingSRGB(); |
| 89 ColorSpace bt709 = ColorSpace::CreateREC709(); | 136 ColorSpace bt709 = ColorSpace::CreateREC709(); |
| 90 ColorSpace sRGB = srgb_icc.GetColorSpace(); | 137 ColorSpace sRGB = srgb_icc.GetColorSpace(); |
| 91 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( | 138 std::unique_ptr<ColorTransform> t(ColorTransform::NewColorTransform( |
| 92 bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE)); | 139 bt709, sRGB, ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 93 | 140 |
| 94 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); | 141 ColorTransform::TriStim tmp(16.0f / 255.0f, 0.5f, 0.5f); |
| 95 t->transform(&tmp, 1); | 142 t->transform(&tmp, 1); |
| 96 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); | 143 EXPECT_NEAR(tmp.x(), 0.0f, 0.001f); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 // Test a blue color | 215 // Test a blue color |
| 169 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); | 216 tmp = ColorTransform::TriStim(128.0f / 255.0f, 240.0f / 255.0f, 0.5f); |
| 170 t->transform(&tmp, 1); | 217 t->transform(&tmp, 1); |
| 171 EXPECT_GT(tmp.z(), tmp.x()); | 218 EXPECT_GT(tmp.z(), tmp.x()); |
| 172 EXPECT_GT(tmp.z(), tmp.y()); | 219 EXPECT_GT(tmp.z(), tmp.y()); |
| 173 } | 220 } |
| 174 | 221 |
| 175 class TransferTest : public testing::TestWithParam<ColorSpace::TransferID> {}; | 222 class TransferTest : public testing::TestWithParam<ColorSpace::TransferID> {}; |
| 176 | 223 |
| 177 TEST_P(TransferTest, basicTest) { | 224 TEST_P(TransferTest, basicTest) { |
| 225 gfx::ColorSpace space_with_transfer(ColorSpace::PrimaryID::BT709, GetParam(), |
| 226 ColorSpace::MatrixID::RGB, |
| 227 ColorSpace::RangeID::FULL); |
| 228 gfx::ColorSpace space_linear( |
| 229 ColorSpace::PrimaryID::BT709, ColorSpace::TransferID::LINEAR, |
| 230 ColorSpace::MatrixID::RGB, ColorSpace::RangeID::FULL); |
| 231 |
| 232 std::unique_ptr<ColorTransform> to_linear(ColorTransform::NewColorTransform( |
| 233 space_with_transfer, space_linear, |
| 234 ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 235 |
| 236 std::unique_ptr<ColorTransform> from_linear(ColorTransform::NewColorTransform( |
| 237 space_linear, space_with_transfer, |
| 238 ColorTransform::Intent::INTENT_ABSOLUTE)); |
| 239 |
| 240 // The transforms will ahve 1 or 0 steps (0 for linear). |
| 241 size_t expected_steps = 1u; |
| 242 if (GetParam() == ColorSpace::TransferID::LINEAR) |
| 243 expected_steps = 0u; |
| 244 EXPECT_EQ(to_linear->NumberOfStepsForTesting(), expected_steps); |
| 245 EXPECT_EQ(from_linear->NumberOfStepsForTesting(), expected_steps); |
| 246 |
| 178 for (float x = 0.0f; x <= 1.0f; x += 1.0f / 128.0f) { | 247 for (float x = 0.0f; x <= 1.0f; x += 1.0f / 128.0f) { |
| 179 float linear = ColorTransform::ToLinearForTesting(GetParam(), x); | 248 ColorTransform::TriStim tristim(x, x, x); |
| 180 float x2 = ColorTransform::FromLinearForTesting(GetParam(), linear); | 249 to_linear->transform(&tristim, 1); |
| 181 EXPECT_NEAR(x, x2, 0.001f); | 250 from_linear->transform(&tristim, 1); |
| 251 EXPECT_NEAR(x, tristim.x(), 0.001f); |
| 182 } | 252 } |
| 183 } | 253 } |
| 184 | 254 |
| 185 INSTANTIATE_TEST_CASE_P(ColorSpace, | 255 INSTANTIATE_TEST_CASE_P(ColorSpace, |
| 186 TransferTest, | 256 TransferTest, |
| 187 testing::ValuesIn(all_transfers)); | 257 testing::ValuesIn(all_transfers)); |
| 188 | 258 |
| 189 typedef std::tr1::tuple<ColorSpace::PrimaryID, | 259 typedef std::tr1::tuple<ColorSpace::PrimaryID, |
| 190 ColorSpace::TransferID, | 260 ColorSpace::TransferID, |
| 191 ColorSpace::MatrixID, | 261 ColorSpace::MatrixID, |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 | 320 |
| 251 INSTANTIATE_TEST_CASE_P( | 321 INSTANTIATE_TEST_CASE_P( |
| 252 C, | 322 C, |
| 253 ColorSpaceTest, | 323 ColorSpaceTest, |
| 254 testing::Combine(testing::ValuesIn(all_primaries), | 324 testing::Combine(testing::ValuesIn(all_primaries), |
| 255 testing::Values(ColorSpace::TransferID::BT709), | 325 testing::Values(ColorSpace::TransferID::BT709), |
| 256 testing::ValuesIn(all_matrices), | 326 testing::ValuesIn(all_matrices), |
| 257 testing::ValuesIn(all_ranges), | 327 testing::ValuesIn(all_ranges), |
| 258 testing::ValuesIn(intents))); | 328 testing::ValuesIn(intents))); |
| 259 } // namespace | 329 } // namespace |
| OLD | NEW |