Chromium Code Reviews| Index: ui/gfx/color_space.cc |
| diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc |
| index 27a0f54364ac73b8e6a28919253bb1cf5f783e99..042900e0c49159652512c024fa4b2838c219bdb5 100644 |
| --- a/ui/gfx/color_space.cc |
| +++ b/ui/gfx/color_space.cc |
| @@ -427,18 +427,47 @@ sk_sp<SkColorSpace> ColorSpace::ToSkColorSpace() const { |
| return SkColorSpace::MakeSRGBLinear(); |
| } |
| - SkMatrix44 to_xyz_d50; |
| - GetPrimaryMatrix(&to_xyz_d50); |
| - |
| - // Use the named sRGB and linear transfer functions. |
| - if (transfer_ == TransferID::IEC61966_2_1) { |
| - return SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, |
| - to_xyz_d50); |
| + // Prefer to used the named gamma and gamut, if possible. |
| + bool has_named_gamma = true; |
| + SkColorSpace::RenderTargetGamma named_gamma = |
| + SkColorSpace::kSRGB_RenderTargetGamma; |
| + switch (transfer_) { |
| + case TransferID::IEC61966_2_1: |
| + break; |
| + case TransferID::LINEAR: |
| + case TransferID::LINEAR_HDR: |
| + named_gamma = SkColorSpace::kLinear_RenderTargetGamma; |
| + break; |
| + default: |
| + has_named_gamma = false; |
| + break; |
| } |
| - if (transfer_ == TransferID::LINEAR || transfer_ == TransferID::LINEAR_HDR) { |
| - return SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, |
| - to_xyz_d50); |
| + bool has_named_gamut = true; |
| + SkColorSpace::Gamut named_gamut = SkColorSpace::kSRGB_Gamut; |
| + switch (primaries_) { |
| + case PrimaryID::BT709: |
| + break; |
| + case PrimaryID::ADOBE_RGB: |
| + named_gamut = SkColorSpace::kAdobeRGB_Gamut; |
| + break; |
| + case PrimaryID::SMPTEST432_1: |
| + named_gamut = SkColorSpace::kDCIP3_D65_Gamut; |
| + break; |
| + case PrimaryID::BT2020: |
| + named_gamut = SkColorSpace::kRec2020_Gamut; |
| + break; |
| + default: |
| + has_named_gamut = false; |
| + break; |
| } |
| + if (has_named_gamut && has_named_gamma) |
| + return SkColorSpace::MakeRGB(named_gamma, named_gamut); |
| + |
| + // Use named gamma with custom primaries, if possible. |
| + SkMatrix44 to_xyz_d50; |
| + GetPrimaryMatrix(&to_xyz_d50); |
| + if (has_named_gamma) |
| + return SkColorSpace::MakeRGB(named_gamma, to_xyz_d50); |
|
msarett1
2017/04/17 21:30:43
Is there ever a case where has_named_gamut is true
ccameron
2017/04/17 23:08:05
Good point -- added that case.
|
| // Use the parametric transfer function if no other option is available. |
| SkColorSpaceTransferFn fn; |