tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

sharpyuv_csp.h (2152B)


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