Skia
2D Graphics Library
skcms.cc File Reference
#include "skcms.h"
#include "skcms_internal.h"
#include <assert.h>
#include <float.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "src/Transform_inl.h"
Include dependency graph for skcms.cc:

Classes

struct  TF_PQish
 
struct  TF_HLGish
 
struct  header_Layout
 
struct  tag_Layout
 
struct  sf32_Layout
 
struct  XYZ_Layout
 
struct  para_Layout
 
struct  curv_Layout
 
struct  mft_CommonLayout
 
struct  mft1_Layout
 
struct  mft2_Layout
 
struct  mAB_Layout
 
struct  mABCLUT_Layout
 
struct  skcms_Vector3
 
struct  OpAndArg
 

Namespaces

 baseline
 

Macros

#define SAFE_SIZEOF(x)   ((uint64_t)sizeof(x))
 
#define SAFE_FIXED_SIZE(type)   ((uint64_t)offsetof(type, variable))
 
#define INFINITY_   inf_.f
 
#define small_memcpy   memcpy
 
#define N   1
 

Typedefs

template<typename T >
using baseline::V = T
 
using baseline::Color = float
 

Enumerations

enum  TFKind {
  Bad, sRGBish, PQish, HLGish,
  HLGinvish
}
 
enum  {
  skcms_Signature_acsp = 0x61637370, skcms_Signature_rTRC = 0x72545243, skcms_Signature_gTRC = 0x67545243, skcms_Signature_bTRC = 0x62545243,
  skcms_Signature_kTRC = 0x6B545243, skcms_Signature_rXYZ = 0x7258595A, skcms_Signature_gXYZ = 0x6758595A, skcms_Signature_bXYZ = 0x6258595A,
  skcms_Signature_A2B0 = 0x41324230, skcms_Signature_A2B1 = 0x41324231, skcms_Signature_mAB = 0x6D414220, skcms_Signature_CHAD = 0x63686164,
  skcms_Signature_WTPT = 0x77747074, skcms_Signature_curv = 0x63757276, skcms_Signature_mft1 = 0x6D667431, skcms_Signature_mft2 = 0x6D667432,
  skcms_Signature_para = 0x70617261, skcms_Signature_sf32 = 0x73663332
}
 
enum  Op {
  Op_load_a8, Op_load_g8, Op_load_8888_palette8, Op_load_4444,
  Op_load_565, Op_load_888, Op_load_8888, Op_load_1010102,
  Op_load_161616LE, Op_load_16161616LE, Op_load_161616BE, Op_load_16161616BE,
  Op_load_hhh, Op_load_hhhh, Op_load_fff, Op_load_ffff,
  Op_swap_rb, Op_clamp, Op_invert, Op_force_opaque,
  Op_premul, Op_unpremul, Op_matrix_3x3, Op_matrix_3x4,
  Op_lab_to_xyz, Op_tf_r, Op_tf_g, Op_tf_b,
  Op_tf_a, Op_pq_r, Op_pq_g, Op_pq_b,
  Op_pq_a, Op_hlg_r, Op_hlg_g, Op_hlg_b,
  Op_hlg_a, Op_hlginv_r, Op_hlginv_g, Op_hlginv_b,
  Op_hlginv_a, Op_table_r, Op_table_g, Op_table_b,
  Op_table_a, Op_clut, Op_store_a8, Op_store_g8,
  Op_store_4444, Op_store_565, Op_store_888, Op_store_8888,
  Op_store_1010102, Op_store_161616LE, Op_store_16161616LE, Op_store_161616BE,
  Op_store_16161616BE, Op_store_hhh, Op_store_hhhh, Op_store_fff,
  Op_store_ffff
}
 

Functions

void skcms_DisableRuntimeCPUDetection ()
 
static float log2f_ (float x)
 
static float logf_ (float x)
 
static float exp2f_ (float x)
 
float powf_ (float x, float y)
 
static float expf_ (float x)
 
static float fmaxf_ (float x, float y)
 
static float fminf_ (float x, float y)
 
static bool isfinitef_ (float x)
 
static float minus_1_ulp (float x)
 
static float TFKind_marker (TFKind kind)
 
static TFKind classify (const skcms_TransferFunction &tf, TF_PQish *pq=nullptr, TF_HLGish *hlg=nullptr)
 
bool skcms_TransferFunction_isSRGBish (const skcms_TransferFunction *tf)
 
bool skcms_TransferFunction_isPQish (const skcms_TransferFunction *tf)
 
bool skcms_TransferFunction_isHLGish (const skcms_TransferFunction *tf)
 
bool skcms_TransferFunction_makePQish (skcms_TransferFunction *tf, float A, float B, float C, float D, float E, float F)
 
bool skcms_TransferFunction_makeScaledHLGish (skcms_TransferFunction *tf, float K, float R, float G, float a, float b, float c)
 
float skcms_TransferFunction_eval (const skcms_TransferFunction *tf, float x)
 
static float eval_curve (const skcms_Curve *curve, float x)
 
float skcms_MaxRoundtripError (const skcms_Curve *curve, const skcms_TransferFunction *inv_tf)
 
bool skcms_AreApproximateInverses (const skcms_Curve *curve, const skcms_TransferFunction *inv_tf)
 
static uint16_t read_big_u16 (const uint8_t *ptr)
 
static uint32_t read_big_u32 (const uint8_t *ptr)
 
static int32_t read_big_i32 (const uint8_t *ptr)
 
static float read_big_fixed (const uint8_t *ptr)
 
static const tag_Layoutget_tag_table (const skcms_ICCProfile *profile)
 
bool skcms_GetCHAD (const skcms_ICCProfile *profile, skcms_Matrix3x3 *m)
 
static bool read_tag_xyz (const skcms_ICCTag *tag, float *x, float *y, float *z)
 
bool skcms_GetWTPT (const skcms_ICCProfile *profile, float xyz[3])
 
static bool read_to_XYZD50 (const skcms_ICCTag *rXYZ, const skcms_ICCTag *gXYZ, const skcms_ICCTag *bXYZ, skcms_Matrix3x3 *toXYZ)
 
static bool read_curve_para (const uint8_t *buf, uint32_t size, skcms_Curve *curve, uint32_t *curve_size)
 
static bool read_curve_curv (const uint8_t *buf, uint32_t size, skcms_Curve *curve, uint32_t *curve_size)
 
static bool read_curve (const uint8_t *buf, uint32_t size, skcms_Curve *curve, uint32_t *curve_size)
 
static bool read_mft_common (const mft_CommonLayout *mftTag, skcms_A2B *a2b)
 
static bool init_a2b_tables (const uint8_t *table_base, uint64_t max_tables_len, uint32_t byte_width, uint32_t input_table_entries, uint32_t output_table_entries, skcms_A2B *a2b)
 
static bool read_tag_mft1 (const skcms_ICCTag *tag, skcms_A2B *a2b)
 
static bool read_tag_mft2 (const skcms_ICCTag *tag, skcms_A2B *a2b)
 
static bool read_curves (const uint8_t *buf, uint32_t size, uint32_t curve_offset, uint32_t num_curves, skcms_Curve *curves)
 
static bool read_tag_mab (const skcms_ICCTag *tag, skcms_A2B *a2b, bool pcs_is_xyz)
 
static int fit_linear (const skcms_Curve *curve, int N, float tol, float *c, float *d, float *f=nullptr)
 
static bool read_a2b (const skcms_ICCTag *tag, skcms_A2B *a2b, bool pcs_is_xyz)
 
void skcms_GetTagByIndex (const skcms_ICCProfile *profile, uint32_t idx, skcms_ICCTag *tag)
 
bool skcms_GetTagBySignature (const skcms_ICCProfile *profile, uint32_t sig, skcms_ICCTag *tag)
 
static bool usable_as_src (const skcms_ICCProfile *profile)
 
bool skcms_Parse (const void *buf, size_t len, skcms_ICCProfile *profile)
 
const skcms_ICCProfile * skcms_sRGB_profile ()
 
const skcms_ICCProfile * skcms_XYZD50_profile ()
 
const skcms_TransferFunction * skcms_sRGB_TransferFunction ()
 
const skcms_TransferFunction * skcms_sRGB_Inverse_TransferFunction ()
 
const skcms_TransferFunction * skcms_Identity_TransferFunction ()
 
bool skcms_ApproximatelyEqualProfiles (const skcms_ICCProfile *A, const skcms_ICCProfile *B)
 
bool skcms_TRCs_AreApproximateInverse (const skcms_ICCProfile *profile, const skcms_TransferFunction *inv_tf)
 
static bool is_zero_to_one (float x)
 
static skcms_Vector3 mv_mul (const skcms_Matrix3x3 *m, const skcms_Vector3 *v)
 
bool skcms_AdaptToXYZD50 (float wx, float wy, skcms_Matrix3x3 *toXYZD50)
 
bool skcms_PrimariesToXYZD50 (float rx, float ry, float gx, float gy, float bx, float by, float wx, float wy, skcms_Matrix3x3 *toXYZD50)
 
bool skcms_Matrix3x3_invert (const skcms_Matrix3x3 *src, skcms_Matrix3x3 *dst)
 
skcms_Matrix3x3 skcms_Matrix3x3_concat (const skcms_Matrix3x3 *A, const skcms_Matrix3x3 *B)
 
bool skcms_TransferFunction_invert (const skcms_TransferFunction *src, skcms_TransferFunction *dst)
 
static float rg_nonlinear (float x, const skcms_Curve *curve, const skcms_TransferFunction *tf, float dfdP[3])
 
static bool gauss_newton_step (const skcms_Curve *curve, skcms_TransferFunction *tf, float x0, float dx, int N)
 
static float max_roundtrip_error_checked (const skcms_Curve *curve, const skcms_TransferFunction *tf_inv)
 
static bool fit_nonlinear (const skcms_Curve *curve, int L, int N, skcms_TransferFunction *tf)
 
bool skcms_ApproximateCurve (const skcms_Curve *curve, skcms_TransferFunction *approx, float *max_error)
 
static OpAndArg select_curve_op (const skcms_Curve *curve, int channel)
 
static size_t bytes_per_pixel (skcms_PixelFormat fmt)
 
static bool prep_for_destination (const skcms_ICCProfile *profile, skcms_Matrix3x3 *fromXYZD50, skcms_TransferFunction *invR, skcms_TransferFunction *invG, skcms_TransferFunction *invB)
 
bool skcms_Transform (const void *src, skcms_PixelFormat srcFmt, skcms_AlphaFormat srcAlpha, const skcms_ICCProfile *srcProfile, void *dst, skcms_PixelFormat dstFmt, skcms_AlphaFormat dstAlpha, const skcms_ICCProfile *dstProfile, size_t npixels)
 
bool skcms_TransformWithPalette (const void *src, skcms_PixelFormat srcFmt, skcms_AlphaFormat srcAlpha, const skcms_ICCProfile *srcProfile, void *dst, skcms_PixelFormat dstFmt, skcms_AlphaFormat dstAlpha, const skcms_ICCProfile *dstProfile, size_t nz, const void *palette)
 
static void assert_usable_as_destination (const skcms_ICCProfile *profile)
 
bool skcms_MakeUsableAsDestination (skcms_ICCProfile *profile)
 
bool skcms_MakeUsableAsDestinationWithSingleCurve (skcms_ICCProfile *profile)
 

Variables

static bool runtime_cpu_detection = true
 
union {
   uint32_t   bits
 
   float   f
 
inf_ = { 0x7f800000 }
 
const uint8_t skcms_252_random_bytes []
 

Macro Definition Documentation

◆ INFINITY_

#define INFINITY_   inf_.f

◆ N

#define N   1

◆ SAFE_FIXED_SIZE

#define SAFE_FIXED_SIZE (   type)    ((uint64_t)offsetof(type, variable))

◆ SAFE_SIZEOF

#define SAFE_SIZEOF (   x)    ((uint64_t)sizeof(x))

◆ small_memcpy

#define small_memcpy   memcpy

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
skcms_Signature_acsp 
skcms_Signature_rTRC 
skcms_Signature_gTRC 
skcms_Signature_bTRC 
skcms_Signature_kTRC 
skcms_Signature_rXYZ 
skcms_Signature_gXYZ 
skcms_Signature_bXYZ 
skcms_Signature_A2B0 
skcms_Signature_A2B1 
skcms_Signature_mAB 
skcms_Signature_CHAD 
skcms_Signature_WTPT 
skcms_Signature_curv 
skcms_Signature_mft1 
skcms_Signature_mft2 
skcms_Signature_para 
skcms_Signature_sf32 

◆ Op

enum Op

The logical operations that can be performed when combining two SkRegion.

Enumerator
Op_load_a8 
Op_load_g8 
Op_load_8888_palette8 
Op_load_4444 
Op_load_565 
Op_load_888 
Op_load_8888 
Op_load_1010102 
Op_load_161616LE 
Op_load_16161616LE 
Op_load_161616BE 
Op_load_16161616BE 
Op_load_hhh 
Op_load_hhhh 
Op_load_fff 
Op_load_ffff 
Op_swap_rb 
Op_clamp 
Op_invert 
Op_force_opaque 
Op_premul 
Op_unpremul 
Op_matrix_3x3 
Op_matrix_3x4 
Op_lab_to_xyz 
Op_tf_r 
Op_tf_g 
Op_tf_b 
Op_tf_a 
Op_pq_r 
Op_pq_g 
Op_pq_b 
Op_pq_a 
Op_hlg_r 
Op_hlg_g 
Op_hlg_b 
Op_hlg_a 
Op_hlginv_r 
Op_hlginv_g 
Op_hlginv_b 
Op_hlginv_a 
Op_table_r 
Op_table_g 
Op_table_b 
Op_table_a 
Op_clut 
Op_store_a8 
Op_store_g8 
Op_store_4444 
Op_store_565 
Op_store_888 
Op_store_8888 
Op_store_1010102 
Op_store_161616LE 
Op_store_16161616LE 
Op_store_161616BE 
Op_store_16161616BE 
Op_store_hhh 
Op_store_hhhh 
Op_store_fff 
Op_store_ffff 

◆ TFKind

enum TFKind
Enumerator
Bad 
sRGBish 
PQish 
HLGish 
HLGinvish 

Function Documentation

◆ assert_usable_as_destination()

static void assert_usable_as_destination ( const skcms_ICCProfile *  profile)
static

◆ bytes_per_pixel()

static size_t bytes_per_pixel ( skcms_PixelFormat  fmt)
static

◆ classify()

static TFKind classify ( const skcms_TransferFunction &  tf,
TF_PQish pq = nullptr,
TF_HLGish hlg = nullptr 
)
static

◆ eval_curve()

static float eval_curve ( const skcms_Curve *  curve,
float  x 
)
static

◆ exp2f_()

static float exp2f_ ( float  x)
static

◆ expf_()

static float expf_ ( float  x)
static

◆ fit_linear()

static int fit_linear ( const skcms_Curve *  curve,
int  N,
float  tol,
float *  c,
float *  d,
float *  f = nullptr 
)
static

◆ fit_nonlinear()

static bool fit_nonlinear ( const skcms_Curve *  curve,
int  L,
int  N,
skcms_TransferFunction *  tf 
)
static

◆ fmaxf_()

static float fmaxf_ ( float  x,
float  y 
)
static

◆ fminf_()

static float fminf_ ( float  x,
float  y 
)
static

◆ gauss_newton_step()

static bool gauss_newton_step ( const skcms_Curve *  curve,
skcms_TransferFunction *  tf,
float  x0,
float  dx,
int  N 
)
static

◆ get_tag_table()

static const tag_Layout* get_tag_table ( const skcms_ICCProfile *  profile)
static

◆ init_a2b_tables()

static bool init_a2b_tables ( const uint8_t *  table_base,
uint64_t  max_tables_len,
uint32_t  byte_width,
uint32_t  input_table_entries,
uint32_t  output_table_entries,
skcms_A2B *  a2b 
)
static

◆ is_zero_to_one()

static bool is_zero_to_one ( float  x)
static

◆ isfinitef_()

static bool isfinitef_ ( float  x)
static

◆ log2f_()

static float log2f_ ( float  x)
static

◆ logf_()

static float logf_ ( float  x)
static

◆ max_roundtrip_error_checked()

static float max_roundtrip_error_checked ( const skcms_Curve *  curve,
const skcms_TransferFunction *  tf_inv 
)
static

◆ minus_1_ulp()

static float minus_1_ulp ( float  x)
static

◆ mv_mul()

static skcms_Vector3 mv_mul ( const skcms_Matrix3x3 *  m,
const skcms_Vector3 v 
)
static

◆ powf_()

float powf_ ( float  x,
float  y 
)

◆ prep_for_destination()

static bool prep_for_destination ( const skcms_ICCProfile *  profile,
skcms_Matrix3x3 *  fromXYZD50,
skcms_TransferFunction *  invR,
skcms_TransferFunction *  invG,
skcms_TransferFunction *  invB 
)
static

◆ read_a2b()

static bool read_a2b ( const skcms_ICCTag tag,
skcms_A2B *  a2b,
bool  pcs_is_xyz 
)
static

◆ read_big_fixed()

static float read_big_fixed ( const uint8_t *  ptr)
static

◆ read_big_i32()

static int32_t read_big_i32 ( const uint8_t *  ptr)
static

◆ read_big_u16()

static uint16_t read_big_u16 ( const uint8_t *  ptr)
static

◆ read_big_u32()

static uint32_t read_big_u32 ( const uint8_t *  ptr)
static

◆ read_curve()

static bool read_curve ( const uint8_t *  buf,
uint32_t  size,
skcms_Curve *  curve,
uint32_t *  curve_size 
)
static

◆ read_curve_curv()

static bool read_curve_curv ( const uint8_t *  buf,
uint32_t  size,
skcms_Curve *  curve,
uint32_t *  curve_size 
)
static

◆ read_curve_para()

static bool read_curve_para ( const uint8_t *  buf,
uint32_t  size,
skcms_Curve *  curve,
uint32_t *  curve_size 
)
static

◆ read_curves()

static bool read_curves ( const uint8_t *  buf,
uint32_t  size,
uint32_t  curve_offset,
uint32_t  num_curves,
skcms_Curve *  curves 
)
static

◆ read_mft_common()

static bool read_mft_common ( const mft_CommonLayout mftTag,
skcms_A2B *  a2b 
)
static

◆ read_tag_mab()

static bool read_tag_mab ( const skcms_ICCTag tag,
skcms_A2B *  a2b,
bool  pcs_is_xyz 
)
static

◆ read_tag_mft1()

static bool read_tag_mft1 ( const skcms_ICCTag tag,
skcms_A2B *  a2b 
)
static

◆ read_tag_mft2()

static bool read_tag_mft2 ( const skcms_ICCTag tag,
skcms_A2B *  a2b 
)
static

◆ read_tag_xyz()

static bool read_tag_xyz ( const skcms_ICCTag tag,
float *  x,
float *  y,
float *  z 
)
static

◆ read_to_XYZD50()

static bool read_to_XYZD50 ( const skcms_ICCTag rXYZ,
const skcms_ICCTag gXYZ,
const skcms_ICCTag bXYZ,
skcms_Matrix3x3 *  toXYZ 
)
static

◆ rg_nonlinear()

static float rg_nonlinear ( float  x,
const skcms_Curve *  curve,
const skcms_TransferFunction *  tf,
float  dfdP[3] 
)
static

◆ select_curve_op()

static OpAndArg select_curve_op ( const skcms_Curve *  curve,
int  channel 
)
static

◆ skcms_AdaptToXYZD50()

bool skcms_AdaptToXYZD50 ( float  wx,
float  wy,
skcms_Matrix3x3 *  toXYZD50 
)

◆ skcms_ApproximateCurve()

bool skcms_ApproximateCurve ( const skcms_Curve *  curve,
skcms_TransferFunction *  approx,
float *  max_error 
)

◆ skcms_ApproximatelyEqualProfiles()

bool skcms_ApproximatelyEqualProfiles ( const skcms_ICCProfile *  A,
const skcms_ICCProfile *  B 
)

◆ skcms_AreApproximateInverses()

bool skcms_AreApproximateInverses ( const skcms_Curve *  curve,
const skcms_TransferFunction *  inv_tf 
)

◆ skcms_DisableRuntimeCPUDetection()

void skcms_DisableRuntimeCPUDetection ( )

◆ skcms_GetCHAD()

bool skcms_GetCHAD ( const skcms_ICCProfile *  profile,
skcms_Matrix3x3 *  m 
)

◆ skcms_GetTagByIndex()

void skcms_GetTagByIndex ( const skcms_ICCProfile *  profile,
uint32_t  idx,
skcms_ICCTag tag 
)

◆ skcms_GetTagBySignature()

bool skcms_GetTagBySignature ( const skcms_ICCProfile *  profile,
uint32_t  sig,
skcms_ICCTag tag 
)

◆ skcms_GetWTPT()

bool skcms_GetWTPT ( const skcms_ICCProfile *  profile,
float  xyz[3] 
)

◆ skcms_Identity_TransferFunction()

const skcms_TransferFunction* skcms_Identity_TransferFunction ( )

◆ skcms_MakeUsableAsDestination()

bool skcms_MakeUsableAsDestination ( skcms_ICCProfile *  profile)

◆ skcms_MakeUsableAsDestinationWithSingleCurve()

bool skcms_MakeUsableAsDestinationWithSingleCurve ( skcms_ICCProfile *  profile)

◆ skcms_Matrix3x3_concat()

skcms_Matrix3x3 skcms_Matrix3x3_concat ( const skcms_Matrix3x3 *  A,
const skcms_Matrix3x3 *  B 
)

◆ skcms_Matrix3x3_invert()

bool skcms_Matrix3x3_invert ( const skcms_Matrix3x3 *  src,
skcms_Matrix3x3 *  dst 
)

◆ skcms_MaxRoundtripError()

float skcms_MaxRoundtripError ( const skcms_Curve *  curve,
const skcms_TransferFunction *  inv_tf 
)

◆ skcms_Parse()

bool skcms_Parse ( const void *  buf,
size_t  len,
skcms_ICCProfile *  profile 
)

◆ skcms_PrimariesToXYZD50()

bool skcms_PrimariesToXYZD50 ( float  rx,
float  ry,
float  gx,
float  gy,
float  bx,
float  by,
float  wx,
float  wy,
skcms_Matrix3x3 *  toXYZD50 
)

◆ skcms_sRGB_Inverse_TransferFunction()

const skcms_TransferFunction* skcms_sRGB_Inverse_TransferFunction ( )

◆ skcms_sRGB_profile()

const skcms_ICCProfile* skcms_sRGB_profile ( )

◆ skcms_sRGB_TransferFunction()

const skcms_TransferFunction* skcms_sRGB_TransferFunction ( )

◆ skcms_TransferFunction_eval()

float skcms_TransferFunction_eval ( const skcms_TransferFunction *  tf,
float  x 
)

◆ skcms_TransferFunction_invert()

bool skcms_TransferFunction_invert ( const skcms_TransferFunction *  src,
skcms_TransferFunction *  dst 
)

◆ skcms_TransferFunction_isHLGish()

bool skcms_TransferFunction_isHLGish ( const skcms_TransferFunction *  tf)

◆ skcms_TransferFunction_isPQish()

bool skcms_TransferFunction_isPQish ( const skcms_TransferFunction *  tf)

◆ skcms_TransferFunction_isSRGBish()

bool skcms_TransferFunction_isSRGBish ( const skcms_TransferFunction *  tf)

◆ skcms_TransferFunction_makePQish()

bool skcms_TransferFunction_makePQish ( skcms_TransferFunction *  tf,
float  A,
float  B,
float  C,
float  D,
float  E,
float  F 
)

◆ skcms_TransferFunction_makeScaledHLGish()

bool skcms_TransferFunction_makeScaledHLGish ( skcms_TransferFunction *  tf,
float  K,
float  R,
float  G,
float  a,
float  b,
float  c 
)

◆ skcms_Transform()

bool skcms_Transform ( const void *  src,
skcms_PixelFormat  srcFmt,
skcms_AlphaFormat  srcAlpha,
const skcms_ICCProfile *  srcProfile,
void *  dst,
skcms_PixelFormat  dstFmt,
skcms_AlphaFormat  dstAlpha,
const skcms_ICCProfile *  dstProfile,
size_t  npixels 
)

◆ skcms_TransformWithPalette()

bool skcms_TransformWithPalette ( const void *  src,
skcms_PixelFormat  srcFmt,
skcms_AlphaFormat  srcAlpha,
const skcms_ICCProfile *  srcProfile,
void *  dst,
skcms_PixelFormat  dstFmt,
skcms_AlphaFormat  dstAlpha,
const skcms_ICCProfile *  dstProfile,
size_t  nz,
const void *  palette 
)

◆ skcms_TRCs_AreApproximateInverse()

bool skcms_TRCs_AreApproximateInverse ( const skcms_ICCProfile *  profile,
const skcms_TransferFunction *  inv_tf 
)

◆ skcms_XYZD50_profile()

const skcms_ICCProfile* skcms_XYZD50_profile ( )

◆ TFKind_marker()

static float TFKind_marker ( TFKind  kind)
static

◆ usable_as_src()

static bool usable_as_src ( const skcms_ICCProfile *  profile)
static

Variable Documentation

◆ bits

uint32_t bits

◆ f

float f

◆ inf_

const { ... } inf_

◆ runtime_cpu_detection

bool runtime_cpu_detection = true
static

◆ skcms_252_random_bytes

const uint8_t skcms_252_random_bytes[]
Initial value:
= {
8, 179, 128, 204, 253, 38, 134, 184, 68, 102, 32, 138, 99, 39, 169, 215,
119, 26, 3, 223, 95, 239, 52, 132, 114, 74, 81, 234, 97, 116, 244, 205, 30,
154, 173, 12, 51, 159, 122, 153, 61, 226, 236, 178, 229, 55, 181, 220, 191,
194, 160, 126, 168, 82, 131, 18, 180, 245, 163, 22, 246, 69, 235, 252, 57,
108, 14, 6, 152, 240, 255, 171, 242, 20, 227, 177, 238, 96, 85, 16, 211,
70, 200, 149, 155, 146, 127, 145, 100, 151, 109, 19, 165, 208, 195, 164,
137, 254, 182, 248, 64, 201, 45, 209, 5, 147, 207, 210, 113, 162, 83, 225,
9, 31, 15, 231, 115, 37, 58, 53, 24, 49, 197, 56, 120, 172, 48, 21, 214,
129, 111, 11, 50, 187, 196, 34, 60, 103, 71, 144, 47, 203, 77, 80, 232,
140, 222, 250, 206, 166, 247, 139, 249, 221, 72, 106, 27, 199, 117, 54,
219, 135, 118, 40, 79, 41, 251, 46, 93, 212, 92, 233, 148, 28, 121, 63,
123, 158, 105, 59, 29, 42, 143, 23, 0, 107, 176, 87, 104, 183, 156, 193,
189, 90, 188, 65, 190, 17, 198, 7, 186, 161, 1, 124, 78, 125, 170, 133,
174, 218, 67, 157, 75, 101, 89, 217, 62, 33, 141, 228, 25, 35, 91, 230, 4,
2, 13, 73, 86, 167, 237, 84, 243, 44, 185, 66, 130, 110, 150, 142, 216, 88,
112, 36, 224, 136, 202, 76, 94, 98, 175, 213
}