Introduction
Introduction Statistics Contact Development Disclaimer Help
colour.h - blind - suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
colour.h (5369B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <math.h>
3
4 #define D65_XYY_X 0.312726871026564878786047074755
5 #define D65_XYY_Y 0.329023206641284038376227272238
6
7 #define D65_XYZ_X (D65_XYY_X / D65_XYY_Y)
8 #define D65_XYZ_Z (1 / D65_XYY_Y - 1 - D65_XYZ_X)
9
10 #define SRGB_ENCODE(TYPE, NAME_SUFFIX, MATH_SUFFIX)\
11 static inline TYPE\
12 srgb_encode##NAME_SUFFIX(TYPE t)\
13 {\
14 TYPE sign = 1;\
15 if (t < 0) {\
16 t = -t;\
17 sign = -1;\
18 }\
19 t = t <= (TYPE)0.0031306684425217108\
20 ? (TYPE)12.92 * t\
21 : (TYPE)1.055 * pow##MATH_SUFFIX(t, (TYPE)1.0 / …
22 return t * sign;\
23 }
24 SRGB_ENCODE(double, _d,)
25 SRGB_ENCODE(float, _f, f)
26 #undef SRGB_ENCODE
27
28 #define SRGB_DECODE(TYPE, NAME_SUFFIX, MATH_SUFFIX)\
29 static inline TYPE\
30 srgb_decode##NAME_SUFFIX(TYPE t)\
31 {\
32 TYPE sign = 1;\
33 if (t < 0) {\
34 t = -t;\
35 sign = -1;\
36 }\
37 t = t <= (TYPE)0.0031306684425217108 * (TYPE)12.92\
38 ? t / (TYPE)12.92\
39 : pow##MATH_SUFFIX((t + (TYPE)0.055) / (TYPE)1.0…
40 return t * sign;\
41 }
42 SRGB_DECODE(double, _d,)
43 SRGB_DECODE(float, _f, f)
44 #undef SRGB_DECODE
45
46
47 #define MATRIX_MULTIPLY_FUNCTION(FUNCTION, TYPE, R1C1, R1C2, R1C3, R2C1,…
48 static inline void\
49 FUNCTION(TYPE ia, TYPE ib, TYPE ic, TYPE *oa, TYPE *ob, TYPE *oc…
50 {\
51 *oa = (TYPE)(R1C1) * ia + (TYPE)(R1C2) * ib + (TYPE)(R1C…
52 *ob = (TYPE)(R2C1) * ia + (TYPE)(R2C2) * ib + (TYPE)(R2C…
53 *oc = (TYPE)(R3C1) * ia + (TYPE)(R3C2) * ib + (TYPE)(R3C…
54 }
55 #define MATRIX_MULTIPLY_FUNCTIONS(FUNCTION_BASE, ...)\
56 MATRIX_MULTIPLY_FUNCTION(FUNCTION_BASE##_d, double, __VA_ARGS__)\
57 MATRIX_MULTIPLY_FUNCTION(FUNCTION_BASE##_f, float, __VA_ARGS__)
58
59 MATRIX_MULTIPLY_FUNCTIONS(yuv_to_srgb,
60 0.9998394605874789675681313383392989635467529…
61 -0.0011131462925777491079770697979256510734558…
62 1.5956196024979483194528029343928210437297821…
63 0.9998394605876228524721227586269378662109375…
64 -0.3912437451399455312639474868774414062500000…
65 -0.8130420103656186281426698769791983067989349…
66 0.9998394605875743357259466392861213535070419…
67 2.0174178677237781798226023965980857610702514…
68 0.0011581972192616640793261240105493925511837…
69
70 MATRIX_MULTIPLY_FUNCTIONS(srgb_to_yuv,
71 0.2990615856704488817463527539075585082173347…
72 0.5870798544208948310796358782681636512279510…
73 0.1140191250981231751993050238525029271841049…
74 -0.1484681372549019606754683309191022999584674…
75 -0.2907475490196078649063338161795400083065032…
76 0.4392156862745097978262265314697287976741790…
77 0.4392156862745097978262265314697287976741790…
78 -0.3680759803921568873441572122828802093863487…
79 -0.0711397058823529382376449348157620988786220…
80
81 MATRIX_MULTIPLY_FUNCTIONS(ciexyz_to_srgb,
82 3.240446254647737500675930277794,
83 -1.537134761820080575134284117667,
84 -0.498530193022728718155178739835,
85 -0.969266606244679751469561779231,
86 1.876011959788370209167851498933,
87 0.041556042214430065351304932619,
88 0.055643503564352832235773149705,
89 -0.204026179735960239147729566866,
90 1.057226567722703292062647051353)
91
92 MATRIX_MULTIPLY_FUNCTIONS(srgb_to_ciexyz,
93 0.412457445582367576708548995157,
94 0.357575865245515878143578447634,
95 0.180437247826399665973085006954,
96 0.212673370378408277403536885686,
97 0.715151730491031756287156895269,
98 0.072174899130559869164791564344,
99 0.019333942761673460208893260415,
100 0.119191955081838593666354597644,
101 0.950302838552371742508739771438)
102
103 MATRIX_MULTIPLY_FUNCTIONS(scaled_yuv_to_ciexyz,
104 0.0000145009227232664705245415021073185357636…
105 0.0000034128157717418533674232691138561435195…
106 0.0000056093685351140681549461132482381486852…
107 0.0000152565722222869366430254151056900013827…
108 -0.0000020512466139801788471278606168501923434…
109 -0.0000036929733608348407281540479174530844375…
110 0.0000166117942545252278104851717532852717340…
111 0.0000285420507795943411387395993727977838716…
112 -0.0000009911926544591312073011158886859384153…
113
114 MATRIX_MULTIPLY_FUNCTIONS(ciexyz_to_scaled_yuv,
115 26633.45812403910895227454602718353271484375 …
116 40527.367131481194519437849521636962890625 …
117 -272.000824317600745416712015867233276367187…
118 -11458.90154486896426533348858356475830078125,
119 -26662.3801805758339469321072101593017578125,
120 34490.0235254608633113093674182891845703125,
121 116394.099928013441967777907848358154296875,
122 -88546.58492295184987597167491912841796875,
123 -20281.0410136536011123098433017730712890625)
124
125 #undef MATRIX_MULTIPLY_FUNCTIONS
126 #undef MATRIX_MULTIPLY_FUNCTION
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.