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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/ColorSpace.cpp

Issue 2652313004: Implement color-gamut media query (Closed)
Patch Set: fix windows build Created 3 years, 10 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
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/ColorSpace.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2008, Google Inc. All rights reserved. 2 * Copyright (c) 2008, Google Inc. All rights reserved.
3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> 3 * Copyright (C) 2009 Dirk Schulze <krit@webkit.org>
4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are 7 * modification, are permitted provided that the following conditions are
8 * met: 8 * met:
9 * 9 *
10 * * Redistributions of source code must retain the above copyright 10 * * Redistributions of source code must retain the above copyright
(...skipping 15 matching lines...) Expand all
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */ 31 */
32 32
33 #include "platform/graphics/ColorSpace.h" 33 #include "platform/graphics/ColorSpace.h"
34 34
35 #include "platform/graphics/skia/SkiaUtils.h" 35 #include "platform/graphics/skia/SkiaUtils.h"
36 #include "public/platform/WebScreenInfo.h"
37 #include "third_party/skia/include/core/SkColorSpaceXform.h"
36 #include "third_party/skia/include/effects/SkTableColorFilter.h" 38 #include "third_party/skia/include/effects/SkTableColorFilter.h"
37 #include "wtf/MathExtras.h" 39 #include "wtf/MathExtras.h"
38 #include <algorithm> 40 #include <algorithm>
39 41
40 namespace blink { 42 namespace blink {
41 43
42 namespace ColorSpaceUtilities { 44 namespace ColorSpaceUtilities {
43 45
44 static const uint8_t* getLinearRgbLUT() { 46 static const uint8_t* getLinearRgbLUT() {
45 static uint8_t linearRgbLUT[256]; 47 static uint8_t linearRgbLUT[256];
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 111
110 sk_sp<SkColorFilter> createColorSpaceFilter(ColorSpace srcColorSpace, 112 sk_sp<SkColorFilter> createColorSpaceFilter(ColorSpace srcColorSpace,
111 ColorSpace dstColorSpace) { 113 ColorSpace dstColorSpace) {
112 const uint8_t* lookupTable = getConversionLUT(dstColorSpace, srcColorSpace); 114 const uint8_t* lookupTable = getConversionLUT(dstColorSpace, srcColorSpace);
113 if (!lookupTable) 115 if (!lookupTable)
114 return nullptr; 116 return nullptr;
115 117
116 return SkTableColorFilter::MakeARGB(0, lookupTable, lookupTable, lookupTable); 118 return SkTableColorFilter::MakeARGB(0, lookupTable, lookupTable, lookupTable);
117 } 119 }
118 120
121 ColorSpaceGamut getColorSpaceGamut(const WebScreenInfo& screenInfo) {
122 const gfx::ICCProfile& profile = screenInfo.iccProfile;
123 if (profile == gfx::ICCProfile())
124 return ColorSpaceGamut::Unknown;
125
126 return ColorSpaceUtilities::getColorSpaceGamut(
127 profile.GetColorSpace().ToSkColorSpace().get());
128 }
129
130 ColorSpaceGamut getColorSpaceGamut(SkColorSpace* colorSpace) {
Noel Gordon 2017/01/31 02:29:57 The color profile media spec does not say how to c
131 sk_sp<SkColorSpace> scRGB(
132 SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named));
133 std::unique_ptr<SkColorSpaceXform> transform(
134 SkColorSpaceXform::New(colorSpace, scRGB.get()));
135
136 if (!transform)
137 return ColorSpaceGamut::Unknown;
138
139 unsigned char in[3][4];
140 float out[3][4];
141 memset(in, 0, sizeof(in));
142 in[0][0] = 255;
143 in[1][1] = 255;
144 in[2][2] = 255;
145 in[0][3] = 255;
146 in[1][3] = 255;
147 in[2][3] = 255;
148 transform->apply(SkColorSpaceXform::kRGBA_F32_ColorFormat, out,
149 SkColorSpaceXform::kRGBA_8888_ColorFormat, in, 3,
150 kOpaque_SkAlphaType);
151 float score = out[0][0] * out[1][1] * out[2][2];
Noel Gordon 2017/01/31 02:29:57 Aside: by the looks, this appears to compute a sco
hubbe 2017/01/31 04:06:20 While I agree that this is a hacky method, I do th
152
153 if (score < 0.9)
154 return ColorSpaceGamut::LessThanNTSC;
155 if (score < 0.95)
156 return ColorSpaceGamut::NTSC; // actual score 0.912839
157 if (score < 1.1)
158 return ColorSpaceGamut::SRGB; // actual score 1.0
159 if (score < 1.3)
160 return ColorSpaceGamut::AlmostP3;
161 if (score < 1.425)
162 return ColorSpaceGamut::P3; // actual score 1.401899
163 if (score < 1.5)
164 return ColorSpaceGamut::AdobeRGB; // actual score 1.458385
165 if (score < 2.0)
166 return ColorSpaceGamut::Wide;
167 if (score < 2.2)
168 return ColorSpaceGamut::BT2020; // actual score 2.104520
169 if (score < 2.7)
170 return ColorSpaceGamut::ProPhoto; // actual score 2.913247
171 return ColorSpaceGamut::UltraWide;
172 }
173
119 } // namespace ColorSpaceUtilities 174 } // namespace ColorSpaceUtilities
120 175
121 } // namespace blink 176 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/ColorSpace.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698