Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: tests/ColorSpaceTest.cpp

Issue 2324843003: Fix storage of gamut transform matrices in SkColorSpace (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "Resources.h" 8 #include "Resources.h"
9 #include "SkCodec.h" 9 #include "SkCodec.h"
10 #include "SkColorSpace.h" 10 #include "SkColorSpace.h"
(...skipping 12 matching lines...) Expand all
23 23
24 REPORTER_ASSERT(r, nullptr != space); 24 REPORTER_ASSERT(r, nullptr != space);
25 REPORTER_ASSERT(r, expectedGamma == as_CSB(space)->gammaNamed()); 25 REPORTER_ASSERT(r, expectedGamma == as_CSB(space)->gammaNamed());
26 26
27 const SkMatrix44& mat = space->toXYZD50(); 27 const SkMatrix44& mat = space->toXYZD50();
28 const float src[] = { 28 const float src[] = {
29 1, 0, 0, 1, 29 1, 0, 0, 1,
30 0, 1, 0, 1, 30 0, 1, 0, 1,
31 0, 0, 1, 1, 31 0, 0, 1, 1,
32 }; 32 };
33 const float* ref[3] = { red, green, blue };
33 float dst[4]; 34 float dst[4];
34 for (int i = 0; i < 3; ++i) { 35 for (int i = 0; i < 3; ++i) {
35 mat.mapScalars(&src[i*4], dst); 36 mat.mapScalars(&src[i*4], dst);
36 REPORTER_ASSERT(r, almost_equal(red[i], dst[0])); 37 REPORTER_ASSERT(r, almost_equal(ref[i][0], dst[0]));
37 REPORTER_ASSERT(r, almost_equal(green[i], dst[1])); 38 REPORTER_ASSERT(r, almost_equal(ref[i][1], dst[1]));
38 REPORTER_ASSERT(r, almost_equal(blue[i], dst[2])); 39 REPORTER_ASSERT(r, almost_equal(ref[i][2], dst[2]));
39 } 40 }
40 } 41 }
41 42
42 static SkStreamAsset* resource(const char path[]) { 43 static SkStreamAsset* resource(const char path[]) {
43 SkString fullPath = GetResourcePath(path); 44 SkString fullPath = GetResourcePath(path);
44 return SkStream::NewFromFile(fullPath.c_str()); 45 return SkStream::NewFromFile(fullPath.c_str());
45 } 46 }
46 47
47 static void test_path(skiatest::Reporter* r, const char* path, 48 static void test_path(skiatest::Reporter* r, const char* path,
48 const float red[], const float green[], const float blue[] , 49 const float red[], const float green[], const float blue[] ,
49 const SkGammaNamed expectedGamma) { 50 const SkGammaNamed expectedGamma) {
50 SkAutoTDelete<SkStream> stream(resource(path)); 51 SkAutoTDelete<SkStream> stream(resource(path));
51 REPORTER_ASSERT(r, nullptr != stream); 52 REPORTER_ASSERT(r, nullptr != stream);
52 if (!stream) { 53 if (!stream) {
53 return; 54 return;
54 } 55 }
55 56
56 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.release())); 57 SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.release()));
57 REPORTER_ASSERT(r, nullptr != codec); 58 REPORTER_ASSERT(r, nullptr != codec);
58 if (!codec) { 59 if (!codec) {
59 return; 60 return;
60 } 61 }
61 62
62 SkColorSpace* colorSpace = codec->getInfo().colorSpace(); 63 SkColorSpace* colorSpace = codec->getInfo().colorSpace();
63 test_space(r, colorSpace, red, green, blue, expectedGamma); 64 test_space(r, colorSpace, red, green, blue, expectedGamma);
64 } 65 }
65 66
66 const float g_sRGB_XYZ[] = { 0.4358f, 0.2224f, 0.0139f, // R 67 static constexpr float g_sRGB_XYZ[]{
67 0.3853f, 0.7170f, 0.0971f, // G 68 0.4358f, 0.3853f, 0.1430f, // Rx, Gx, Bx
68 0.1430f, 0.0606f, 0.7139f }; // B 69 0.2224f, 0.7170f, 0.0606f, // Ry, Gy, Gz
70 0.0139f, 0.0971f, 0.7139f, // Rz, Gz, Bz
71 };
72
73 static constexpr float g_sRGB_R[]{ 0.4358f, 0.2224f, 0.0139f };
74 static constexpr float g_sRGB_G[]{ 0.3853f, 0.7170f, 0.0971f };
75 static constexpr float g_sRGB_B[]{ 0.1430f, 0.0606f, 0.7139f };
69 76
70 DEF_TEST(ColorSpace_sRGB, r) { 77 DEF_TEST(ColorSpace_sRGB, r) {
71 test_space(r, SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named).get(), 78 test_space(r, SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named).get(),
72 g_sRGB_XYZ, &g_sRGB_XYZ[3], &g_sRGB_XYZ[6], kSRGB_SkGammaNamed); 79 g_sRGB_R, g_sRGB_G, g_sRGB_B, kSRGB_SkGammaNamed);
73 80
74 } 81 }
75 82
76 DEF_TEST(ColorSpaceParseICCProfiles, r) { 83 DEF_TEST(ColorSpaceParseICCProfiles, r) {
77 84
78 #if (PNG_LIBPNG_VER_MAJOR > 1) || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_M INOR >= 6) 85 #if (PNG_LIBPNG_VER_MAJOR > 1) || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_M INOR >= 6)
79 test_path(r, "color_wheel_with_profile.png", &g_sRGB_XYZ[0], &g_sRGB_XYZ[3], &g_sRGB_XYZ[6], 86 test_path(r, "color_wheel_with_profile.png", g_sRGB_R, g_sRGB_G, g_sRGB_B,
80 kSRGB_SkGammaNamed); 87 kSRGB_SkGammaNamed);
81 #endif 88 #endif
82 89
83 const float red[] = { 0.385117f, 0.716904f, 0.0970612f }; 90 const float red[] = { 0.385117f, 0.716904f, 0.0970612f };
84 const float green[] = { 0.143051f, 0.0606079f, 0.713913f }; 91 const float green[] = { 0.143051f, 0.0606079f, 0.713913f };
85 const float blue[] = { 0.436035f, 0.222488f, 0.013916f }; 92 const float blue[] = { 0.436035f, 0.222488f, 0.013916f };
86 test_path(r, "icc-v2-gbr.jpg", red, green, blue, k2Dot2Curve_SkGammaNamed); 93 test_path(r, "icc-v2-gbr.jpg", red, green, blue, k2Dot2Curve_SkGammaNamed);
87 94
88 test_path(r, "webp-color-profile-crash.webp", 95 test_path(r, "webp-color-profile-crash.webp",
89 red, green, blue, kNonStandard_SkGammaNamed); 96 red, green, blue, kNonStandard_SkGammaNamed);
(...skipping 28 matching lines...) Expand all
118 static sk_sp<SkData> WriteToICC(SkColorSpace* space) { 125 static sk_sp<SkData> WriteToICC(SkColorSpace* space) {
119 return as_CSB(space)->writeToICC(); 126 return as_CSB(space)->writeToICC();
120 } 127 }
121 }; 128 };
122 129
123 DEF_TEST(ColorSpaceWriteICC, r) { 130 DEF_TEST(ColorSpaceWriteICC, r) {
124 // Test writing a new ICC profile 131 // Test writing a new ICC profile
125 sk_sp<SkColorSpace> namedColorSpace = SkColorSpace::NewNamed(SkColorSpace::k SRGB_Named); 132 sk_sp<SkColorSpace> namedColorSpace = SkColorSpace::NewNamed(SkColorSpace::k SRGB_Named);
126 sk_sp<SkData> namedData = ColorSpaceTest::WriteToICC(namedColorSpace.get()); 133 sk_sp<SkData> namedData = ColorSpaceTest::WriteToICC(namedColorSpace.get());
127 sk_sp<SkColorSpace> iccColorSpace = SkColorSpace::NewICC(namedData->data(), namedData->size()); 134 sk_sp<SkColorSpace> iccColorSpace = SkColorSpace::NewICC(namedData->data(), namedData->size());
128 test_space(r, iccColorSpace.get(), g_sRGB_XYZ, &g_sRGB_XYZ[3], &g_sRGB_XYZ[6 ], 135 test_space(r, iccColorSpace.get(), g_sRGB_R, g_sRGB_G, g_sRGB_B, k2Dot2Curve _SkGammaNamed);
129 k2Dot2Curve_SkGammaNamed);
130 // FIXME (msarett): Test disabled. sRGB profiles are written approximately as 2.2f curves. 136 // FIXME (msarett): Test disabled. sRGB profiles are written approximately as 2.2f curves.
131 // REPORTER_ASSERT(r, iccColorSpace == namedColorSpace); 137 // REPORTER_ASSERT(r, iccColorSpace == namedColorSpace);
132 138
133 // Test saving the original ICC data 139 // Test saving the original ICC data
134 sk_sp<SkData> monitorData = SkData::MakeFromFileName( 140 sk_sp<SkData> monitorData = SkData::MakeFromFileName(
135 GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str()); 141 GetResourcePath("icc_profiles/HP_ZR30w.icc").c_str());
136 REPORTER_ASSERT(r, monitorData); 142 REPORTER_ASSERT(r, monitorData);
137 if (!monitorData) { 143 if (!monitorData) {
138 return; 144 return;
139 } 145 }
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 REPORTER_ASSERT(r, !SkColorSpace::Equals(srgb.get(), nullptr)); 248 REPORTER_ASSERT(r, !SkColorSpace::Equals(srgb.get(), nullptr));
243 REPORTER_ASSERT(r, !SkColorSpace::Equals(adobe.get(), srgb.get())); 249 REPORTER_ASSERT(r, !SkColorSpace::Equals(adobe.get(), srgb.get()));
244 REPORTER_ASSERT(r, !SkColorSpace::Equals(z30.get(), srgb.get())); 250 REPORTER_ASSERT(r, !SkColorSpace::Equals(z30.get(), srgb.get()));
245 REPORTER_ASSERT(r, !SkColorSpace::Equals(z32.get(), z30.get())); 251 REPORTER_ASSERT(r, !SkColorSpace::Equals(z32.get(), z30.get()));
246 REPORTER_ASSERT(r, !SkColorSpace::Equals(upperLeft.get(), srgb.get())); 252 REPORTER_ASSERT(r, !SkColorSpace::Equals(upperLeft.get(), srgb.get()));
247 REPORTER_ASSERT(r, !SkColorSpace::Equals(upperLeft.get(), upperRight.get())) ; 253 REPORTER_ASSERT(r, !SkColorSpace::Equals(upperLeft.get(), upperRight.get())) ;
248 REPORTER_ASSERT(r, !SkColorSpace::Equals(z30.get(), upperRight.get())); 254 REPORTER_ASSERT(r, !SkColorSpace::Equals(z30.get(), upperRight.get()));
249 REPORTER_ASSERT(r, !SkColorSpace::Equals(upperRight.get(), adobe.get())); 255 REPORTER_ASSERT(r, !SkColorSpace::Equals(upperRight.get(), adobe.get()));
250 REPORTER_ASSERT(r, !SkColorSpace::Equals(rgb1.get(), rgb2.get())); 256 REPORTER_ASSERT(r, !SkColorSpace::Equals(rgb1.get(), rgb2.get()));
251 } 257 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698