| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SKIA_EXT_CICP_H_ |
| #define SKIA_EXT_CICP_H_ |
| |
| #include <stdint.h> |
| |
| #include "third_party/skia/include/core/SkColorSpace.h" |
| #include "third_party/skia/include/core/SkImageInfo.h" |
| |
| namespace skia { |
| |
| // Convert from a CICP primary value listed in Rec. ITU-T H.273, Table 2 to an |
| // SkColorSpacePrimaries. Return true if `primaries` is valid. All valid values |
| // are supported. |
| SK_API bool CICPGetPrimaries(uint8_t primaries, |
| SkColorSpacePrimaries& sk_primaries); |
| |
| // Convert from a CICP transfer value listed in Rec. ITU-T H.273, Table 3 to an |
| // skcms_TransferFunction. Return true if `transfer_characteristics` is valid |
| // and can be represented using an skcms_TransferFunction (several valid values |
| // cannot). If `prefer_srgb_trfn` is set to true, then use the sRGB transfer |
| // function for all Rec709-like content. |
| SK_API bool CICPGetTransferFn(uint8_t transfer_characteristics, |
| bool prefer_srgb_trfn, |
| skcms_TransferFunction& sk_trfn); |
| |
| // Return the SkColorSpace resulting from the CICPGetPrimaries and |
| // CICPGetTransferFn. This function does not populate an SkYUVColorSpace, so |
| // return nullptr if `matrix_coefficients` is not the identity or |
| // `full_range_flag` is not full range. |
| SK_API sk_sp<SkColorSpace> CICPGetSkColorSpace(uint8_t color_primaries, |
| uint8_t transfer_characteristics, |
| uint8_t matrix_coefficients, |
| uint8_t full_range_flag, |
| bool prefer_srgb_trfn); |
| |
| // Convert from a CICP matrix value listed in Rec. ITU-T H.273, Table 4 to an |
| // SkYUVColorSpace. The result depends on full or limited range as well as |
| // the number of bits per color. Return true if the combination of |
| // `matrix_coefficients`, `full_range_flag`, and `bits_per_color` is valid and |
| // supported (several valid combinations are not supported). |
| SK_API bool CICPGetSkYUVColorSpace(uint8_t matrix_coefficients, |
| uint8_t full_range_flag, |
| uint8_t bits_per_color, |
| SkYUVColorSpace& yuv_color_space); |
| |
| } // namespace skia |
| |
| #endif // SKIA_EXT_CICP_H_ |