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

Unified Diff: ui/gfx/icc_profile.cc

Issue 2755953005: color: Use SkColorSpaceXform instead of QCMS for LUTs (Closed)
Patch Set: Rebase Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/color_transform.cc ('k') | ui/gfx/icc_profile_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/icc_profile.cc
diff --git a/ui/gfx/icc_profile.cc b/ui/gfx/icc_profile.cc
index d2ddfef45f3a6a04c5c27791f32ca0f27f937850..b845c7d8d05165c6cc60aed0a89677ba3464e3b3 100644
--- a/ui/gfx/icc_profile.cc
+++ b/ui/gfx/icc_profile.cc
@@ -9,6 +9,7 @@
#include "base/containers/mru_cache.h"
#include "base/lazy_instance.h"
#include "base/synchronization/lock.h"
+#include "third_party/skia/include/core/SkColorSpaceXform.h"
#include "third_party/skia/include/core/SkICC.h"
#include "ui/gfx/color_transform.h"
#include "ui/gfx/skia_color_space_util.h"
@@ -71,10 +72,8 @@ ICCProfile ICCProfile::FromData(const void* data, size_t size) {
ICCProfile ICCProfile::FromDataWithId(const void* data,
size_t size,
uint64_t new_profile_id) {
- if (!size) {
- DLOG(ERROR) << "Invalid empty ICC profile.";
+ if (!size)
return ICCProfile();
- }
const char* data_as_char = reinterpret_cast<const char*>(data);
{
@@ -176,8 +175,20 @@ void ICCProfile::ComputeColorSpaceAndCache() {
}
}
+ // Parse the profile and attempt to create a SkColorSpaceXform out of it.
+ sk_sp<SkColorSpace> sk_srgb_color_space = SkColorSpace::MakeSRGB();
sk_sp<SkICC> sk_icc = SkICC::Make(data_.data(), data_.size());
- if (sk_icc) {
+ sk_sp<SkColorSpace> sk_icc_color_space;
+ std::unique_ptr<SkColorSpaceXform> sk_color_space_xform;
+ if (sk_icc)
+ sk_icc_color_space = SkColorSpace::MakeICC(data_.data(), data_.size());
+ if (sk_icc_color_space) {
+ sk_color_space_xform = SkColorSpaceXform::New(sk_srgb_color_space.get(),
+ sk_icc_color_space.get());
+ }
+
+ // Attempt to extract a parametric represetation for this space.
+ if (sk_color_space_xform) {
bool parametric_color_space_is_accurate = false;
successfully_parsed_by_sk_icc_ = true;
@@ -226,11 +237,14 @@ void ICCProfile::ComputeColorSpaceAndCache() {
color_space_ = ColorSpace(ColorSpace::PrimaryID::ICC_BASED,
ColorSpace::TransferID::ICC_BASED);
color_space_.icc_profile_id_ = id_;
- color_space_.icc_profile_sk_color_space_ =
- SkColorSpace::MakeICC(data_.data(), data_.size());
+ color_space_.icc_profile_sk_color_space_ = sk_icc_color_space;
}
+ } else if (sk_icc_color_space) {
+ DLOG(ERROR) << "Parsed ICCProfile, but unable to create an "
+ "SkColorSpaceXform from it.";
+ successfully_parsed_by_sk_icc_ = false;
} else {
- DLOG(ERROR) << "Unable parse ICCProfile.";
+ DLOG(ERROR) << "Unable to parse ICCProfile.";
successfully_parsed_by_sk_icc_ = false;
}
« no previous file with comments | « ui/gfx/color_transform.cc ('k') | ui/gfx/icc_profile_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698