| 
									
										
										
										
											2022-08-23 16:47:48 +02:00
										 |  |  | // 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.
 | 
					
						
							| 
									
										
										
										
											2023-01-25 10:24:01 -03:00
										 |  |  | SHARPYUV_EXTERN void SharpYuvComputeConversionMatrix( | 
					
						
							|  |  |  |     const SharpYuvColorSpace* yuv_color_space, | 
					
						
							|  |  |  |     SharpYuvConversionMatrix* matrix); | 
					
						
							| 
									
										
										
										
											2022-08-23 16:47:48 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | // 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.
 | 
					
						
							| 
									
										
										
										
											2023-01-25 10:24:01 -03:00
										 |  |  | SHARPYUV_EXTERN const SharpYuvConversionMatrix* SharpYuvGetConversionMatrix( | 
					
						
							| 
									
										
										
										
											2022-08-23 16:47:48 +02:00
										 |  |  |     SharpYuvMatrixType matrix_type); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | }  // extern "C"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif  // WEBP_SHARPYUV_SHARPYUV_CSP_H_
 |