| // 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. |
| |
| #ifndef WEBP_SHARPYUV_SHARPYUV_CSP_H_ |
| #define WEBP_SHARPYUV_SHARPYUV_CSP_H_ |
| |
| #include "sharpyuv/sharpyuv.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // 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); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif |
| |
| #endif // WEBP_SHARPYUV_SHARPYUV_CSP_H_ |