| // Copyright 2022 Google Inc. All Rights Reserved. | |
| // | |
| // Use of this source code is governed by a BSD-style license | |
| // that can be found in the COPYING file in the root of the source | |
| // tree. An additional intellectual property rights grant can be found | |
| // in the file PATENTS. All contributing project authors may | |
| // be found in the AUTHORS file in the root of the source tree. | |
| // ----------------------------------------------------------------------------- | |
| // | |
| // Colorspace utilities. | |
| extern "C" { | |
| // Range of YUV values. | |
| typedef enum { | |
| kSharpYuvRangeFull, // YUV values between [0;255] (for 8 bit) | |
| kSharpYuvRangeLimited // Y in [16;235], YUV in [16;240] (for 8 bit) | |
| } SharpYuvRange; | |
| // Constants that define a YUV color space. | |
| typedef struct { | |
| // Kr and Kb are defined such that: | |
| // Y = Kr * r + Kg * g + Kb * b where Kg = 1 - Kr - Kb. | |
| float kr; | |
| float kb; | |
| int bit_depth; // 8, 10 or 12 | |
| SharpYuvRange range; | |
| } SharpYuvColorSpace; | |
| // Fills in 'matrix' for the given YUVColorSpace. | |
| SHARPYUV_EXTERN void SharpYuvComputeConversionMatrix( | |
| const SharpYuvColorSpace* yuv_color_space, | |
| SharpYuvConversionMatrix* matrix); | |
| // Enums for precomputed conversion matrices. | |
| typedef enum { | |
| kSharpYuvMatrixWebp = 0, | |
| kSharpYuvMatrixRec601Limited, | |
| kSharpYuvMatrixRec601Full, | |
| kSharpYuvMatrixRec709Limited, | |
| kSharpYuvMatrixRec709Full, | |
| kSharpYuvMatrixNum | |
| } SharpYuvMatrixType; | |
| // Returns a pointer to a matrix for one of the predefined colorspaces. | |
| SHARPYUV_EXTERN const SharpYuvConversionMatrix* SharpYuvGetConversionMatrix( | |
| SharpYuvMatrixType matrix_type); | |
| } // extern "C" | |