1*b2055c35SXin Li // Copyright 2022 Google Inc. All Rights Reserved. 2*b2055c35SXin Li // 3*b2055c35SXin Li // Use of this source code is governed by a BSD-style license 4*b2055c35SXin Li // that can be found in the COPYING file in the root of the source 5*b2055c35SXin Li // tree. An additional intellectual property rights grant can be found 6*b2055c35SXin Li // in the file PATENTS. All contributing project authors may 7*b2055c35SXin Li // be found in the AUTHORS file in the root of the source tree. 8*b2055c35SXin Li // ----------------------------------------------------------------------------- 9*b2055c35SXin Li // 10*b2055c35SXin Li // Colorspace utilities. 11*b2055c35SXin Li 12*b2055c35SXin Li #ifndef WEBP_SHARPYUV_SHARPYUV_CSP_H_ 13*b2055c35SXin Li #define WEBP_SHARPYUV_SHARPYUV_CSP_H_ 14*b2055c35SXin Li 15*b2055c35SXin Li #include "sharpyuv/sharpyuv.h" 16*b2055c35SXin Li 17*b2055c35SXin Li #ifdef __cplusplus 18*b2055c35SXin Li extern "C" { 19*b2055c35SXin Li #endif 20*b2055c35SXin Li 21*b2055c35SXin Li // Range of YUV values. 22*b2055c35SXin Li typedef enum { 23*b2055c35SXin Li kSharpYuvRangeFull, // YUV values between [0;255] (for 8 bit) 24*b2055c35SXin Li kSharpYuvRangeLimited // Y in [16;235], YUV in [16;240] (for 8 bit) 25*b2055c35SXin Li } SharpYuvRange; 26*b2055c35SXin Li 27*b2055c35SXin Li // Constants that define a YUV color space. 28*b2055c35SXin Li typedef struct { 29*b2055c35SXin Li // Kr and Kb are defined such that: 30*b2055c35SXin Li // Y = Kr * r + Kg * g + Kb * b where Kg = 1 - Kr - Kb. 31*b2055c35SXin Li float kr; 32*b2055c35SXin Li float kb; 33*b2055c35SXin Li int bit_depth; // 8, 10 or 12 34*b2055c35SXin Li SharpYuvRange range; 35*b2055c35SXin Li } SharpYuvColorSpace; 36*b2055c35SXin Li 37*b2055c35SXin Li // Fills in 'matrix' for the given YUVColorSpace. 38*b2055c35SXin Li SHARPYUV_EXTERN void SharpYuvComputeConversionMatrix( 39*b2055c35SXin Li const SharpYuvColorSpace* yuv_color_space, 40*b2055c35SXin Li SharpYuvConversionMatrix* matrix); 41*b2055c35SXin Li 42*b2055c35SXin Li // Enums for precomputed conversion matrices. 43*b2055c35SXin Li typedef enum { 44*b2055c35SXin Li kSharpYuvMatrixWebp = 0, 45*b2055c35SXin Li kSharpYuvMatrixRec601Limited, 46*b2055c35SXin Li kSharpYuvMatrixRec601Full, 47*b2055c35SXin Li kSharpYuvMatrixRec709Limited, 48*b2055c35SXin Li kSharpYuvMatrixRec709Full, 49*b2055c35SXin Li kSharpYuvMatrixNum 50*b2055c35SXin Li } SharpYuvMatrixType; 51*b2055c35SXin Li 52*b2055c35SXin Li // Returns a pointer to a matrix for one of the predefined colorspaces. 53*b2055c35SXin Li SHARPYUV_EXTERN const SharpYuvConversionMatrix* SharpYuvGetConversionMatrix( 54*b2055c35SXin Li SharpYuvMatrixType matrix_type); 55*b2055c35SXin Li 56*b2055c35SXin Li #ifdef __cplusplus 57*b2055c35SXin Li } // extern "C" 58*b2055c35SXin Li #endif 59*b2055c35SXin Li 60*b2055c35SXin Li #endif // WEBP_SHARPYUV_SHARPYUV_CSP_H_ 61