| Index: ui/gfx/color_transform_unittest.cc
|
| diff --git a/ui/gfx/color_transform_unittest.cc b/ui/gfx/color_transform_unittest.cc
|
| index 3fc43c2b239b45462fd91eb46f56ca2959bb8427..46fa0e5913b13845cf8733573c9abc4fa37229ff 100644
|
| --- a/ui/gfx/color_transform_unittest.cc
|
| +++ b/ui/gfx/color_transform_unittest.cc
|
| @@ -84,6 +84,53 @@ TEST(SimpleColorSpace, BT709toSRGB) {
|
| EXPECT_GT(tmp.z(), tmp.y());
|
| }
|
|
|
| +TEST(SimpleColorSpace, SRGBFromICCAndNotICC) {
|
| + float kEpsilon = 0.001f;
|
| + ColorTransform::TriStim value_fromicc;
|
| + ColorTransform::TriStim value_default;
|
| +
|
| + ICCProfile srgb_icc_profile = ICCProfileForTestingSRGB();
|
| + ColorSpace srgb_fromicc = srgb_icc_profile.GetColorSpace();
|
| + ColorSpace srgb_default = gfx::ColorSpace::CreateSRGB();
|
| + ColorSpace xyzd50 = gfx::ColorSpace::CreateXYZD50();
|
| +
|
| + value_fromicc = value_default = ColorTransform::TriStim(0.1, 0.5, 0.9);
|
| +
|
| + std::unique_ptr<ColorTransform> toxyzd50_fromicc(
|
| + ColorTransform::NewColorTransform(
|
| + srgb_fromicc, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + // This will have 1 step, namely, the QCMS transform.
|
| + EXPECT_EQ(toxyzd50_fromicc->NumberOfStepsForTesting(), 1u);
|
| + toxyzd50_fromicc->transform(&value_fromicc, 1);
|
| +
|
| + std::unique_ptr<ColorTransform> toxyzd50_default(
|
| + ColorTransform::NewColorTransform(
|
| + srgb_default, xyzd50, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + // This will have a transfer function and then linear transform.
|
| + EXPECT_EQ(toxyzd50_default->NumberOfStepsForTesting(), 2u);
|
| + toxyzd50_default->transform(&value_default, 1);
|
| +
|
| + EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon);
|
| +
|
| + value_fromicc = value_default = ColorTransform::TriStim(0.1, 0.5, 0.9);
|
| +
|
| + std::unique_ptr<ColorTransform> fromxyzd50_fromicc(
|
| + ColorTransform::NewColorTransform(
|
| + xyzd50, srgb_fromicc, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + fromxyzd50_fromicc->transform(&value_fromicc, 1);
|
| +
|
| + std::unique_ptr<ColorTransform> fromxyzd50_default(
|
| + ColorTransform::NewColorTransform(
|
| + xyzd50, srgb_default, ColorTransform::Intent::INTENT_ABSOLUTE));
|
| + fromxyzd50_default->transform(&value_default, 1);
|
| +
|
| + EXPECT_NEAR(value_fromicc.x(), value_default.x(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.y(), value_default.y(), kEpsilon);
|
| + EXPECT_NEAR(value_fromicc.z(), value_default.z(), kEpsilon);
|
| +}
|
| +
|
| TEST(SimpleColorSpace, BT709toSRGBICC) {
|
| ICCProfile srgb_icc = ICCProfileForTestingSRGB();
|
| ColorSpace bt709 = ColorSpace::CreateREC709();
|
| @@ -175,10 +222,33 @@ TEST(SimpleColorSpace, UnknownToSRGB) {
|
| class TransferTest : public testing::TestWithParam<ColorSpace::TransferID> {};
|
|
|
| TEST_P(TransferTest, basicTest) {
|
| + gfx::ColorSpace space_with_transfer(ColorSpace::PrimaryID::BT709, GetParam(),
|
| + ColorSpace::MatrixID::RGB,
|
| + ColorSpace::RangeID::FULL);
|
| + gfx::ColorSpace space_linear(
|
| + ColorSpace::PrimaryID::BT709, ColorSpace::TransferID::LINEAR,
|
| + ColorSpace::MatrixID::RGB, ColorSpace::RangeID::FULL);
|
| +
|
| + std::unique_ptr<ColorTransform> to_linear(ColorTransform::NewColorTransform(
|
| + space_with_transfer, space_linear,
|
| + ColorTransform::Intent::INTENT_ABSOLUTE));
|
| +
|
| + std::unique_ptr<ColorTransform> from_linear(ColorTransform::NewColorTransform(
|
| + space_linear, space_with_transfer,
|
| + ColorTransform::Intent::INTENT_ABSOLUTE));
|
| +
|
| + // The transforms will ahve 1 or 0 steps (0 for linear).
|
| + size_t expected_steps = 1u;
|
| + if (GetParam() == ColorSpace::TransferID::LINEAR)
|
| + expected_steps = 0u;
|
| + EXPECT_EQ(to_linear->NumberOfStepsForTesting(), expected_steps);
|
| + EXPECT_EQ(from_linear->NumberOfStepsForTesting(), expected_steps);
|
| +
|
| for (float x = 0.0f; x <= 1.0f; x += 1.0f / 128.0f) {
|
| - float linear = ColorTransform::ToLinearForTesting(GetParam(), x);
|
| - float x2 = ColorTransform::FromLinearForTesting(GetParam(), linear);
|
| - EXPECT_NEAR(x, x2, 0.001f);
|
| + ColorTransform::TriStim tristim(x, x, x);
|
| + to_linear->transform(&tristim, 1);
|
| + from_linear->transform(&tristim, 1);
|
| + EXPECT_NEAR(x, tristim.x(), 0.001f);
|
| }
|
| }
|
|
|
|
|