2 # -*- coding: utf-8 -*-
6 import aces_ocio.generateLUT as genlut
7 from aces_ocio.util import ColorSpace, mat44FromMat33
12 def createCanonLog(gamut, transferFunction, name, lutDir, lutResolution1d):
13 name = "%s - %s" % (transferFunction, gamut)
14 if transferFunction == "":
15 name = "Linear - %s" % gamut
17 name = "%s" % transferFunction
25 def legalToFull(codeValue):
26 return (codeValue - 64.0)/(940.0 - 64.0)
28 def canonLogToLinear(codeValue):
29 # log = fullToLegal(c1 * log10(c2*linear + 1) + c3)
30 # linear = (pow(10, (legalToFul(log) - c3)/c1) - 1)/c2
35 linear = (pow(10.0, (legalToFull(codeValue) - c3)/c1) -1.0)/c2
37 #print( codeValue, linear )
40 cs.toReferenceTransforms = []
42 if transferFunction == "Canon-Log":
43 data = array.array('f', "\0" * lutResolution1d * 4)
44 for c in range(lutResolution1d):
45 data[c] = canonLogToLinear(1023.0*c/(lutResolution1d-1))
47 lut = "%s_to_linear.spi1d" % transferFunction
48 genlut.writeSPI1D(lutDir + "/" + lut, 0.0, 1.0, data, lutResolution1d, 1)
50 cs.toReferenceTransforms.append( {
53 'interpolation':'linear',
57 if gamut == 'Rec. 709 Daylight':
58 cs.toReferenceTransforms.append( {
60 'matrix':[0.561538969, 0.402060105, 0.036400926, 0.0,
61 0.092739623, 0.924121198, -0.016860821, 0.0,
62 0.084812961, 0.006373835, 0.908813204, 0.0,
66 elif gamut == 'Rec. 709 Tungsten':
67 cs.toReferenceTransforms.append( {
69 'matrix':[0.566996399, 0.365079418, 0.067924183, 0.0,
70 0.070901044, 0.880331008, 0.048767948, 0.0,
71 0.073013542, -0.066540862, 0.99352732, 0.0,
75 elif gamut == 'DCI-P3 Daylight':
76 cs.toReferenceTransforms.append( {
78 'matrix':[0.607160575, 0.299507286, 0.093332140, 0.0,
79 0.004968120, 1.050982224, -0.055950343, 0.0,
80 -0.007839939, 0.000809127, 1.007030813, 0.0,
84 elif gamut == 'DCI-P3 Tungsten':
85 cs.toReferenceTransforms.append( {
87 'matrix':[0.650279125, 0.253880169, 0.095840706, 0.0,
88 -0.026137986, 1.017900530, 0.008237456, 0.0,
89 0.007757558, -0.063081669, 1.055324110, 0.0,
93 elif gamut == 'Cinema Gamut Daylight':
94 cs.toReferenceTransforms.append( {
96 'matrix':[0.763064455, 0.149021161, 0.087914384, 0.0,
97 0.003657457, 1.10696038, -0.110617837, 0.0,
98 -0.009407794,-0.218383305, 1.227791099, 0.0,
100 'direction':'forward'
102 elif gamut == 'Cinema Gamut Tungsten':
103 cs.toReferenceTransforms.append( {
105 'matrix':[0.817416293, 0.090755698, 0.091828009, 0.0,
106 -0.035361374, 1.065690585, -0.030329211, 0.0,
107 0.010390366, -0.299271107, 1.288880741, 0.0,
109 'direction':'forward'
112 cs.fromReferenceTransforms = []
115 # Generate all color spaces conversion
116 def createColorSpaces(lutDir, lutResolution1d):
120 CanonLog1 = createCanonLog("Rec. 709 Daylight", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
121 colorspaces.append(CanonLog1)
123 CanonLog2 = createCanonLog("Rec. 709 Tungsten", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
124 colorspaces.append(CanonLog2)
126 CanonLog3 = createCanonLog("DCI-P3 Daylight", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
127 colorspaces.append(CanonLog3)
129 CanonLog4 = createCanonLog("DCI-P3 Tungsten", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
130 colorspaces.append(CanonLog4)
132 CanonLog5 = createCanonLog("Cinema Gamut Daylight", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
133 colorspaces.append(CanonLog5)
135 CanonLog6 = createCanonLog("Cinema Gamut Tungsten", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
136 colorspaces.append(CanonLog6)
139 CanonLog7 = createCanonLog('', "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
140 colorspaces.append(CanonLog7)
143 CanonLog8 = createCanonLog("Rec. 709 Daylight", "", "Canon-Log", lutDir, lutResolution1d)
144 colorspaces.append(CanonLog8)
146 CanonLog9 = createCanonLog("Rec. 709 Tungsten", "", "Canon-Log", lutDir, lutResolution1d)
147 colorspaces.append(CanonLog9)
149 CanonLog10 = createCanonLog("DCI-P3 Daylight", "", "Canon-Log", lutDir, lutResolution1d)
150 colorspaces.append(CanonLog10)
152 CanonLog11 = createCanonLog("DCI-P3 Tungsten", "", "Canon-Log", lutDir, lutResolution1d)
153 colorspaces.append(CanonLog11)
155 CanonLog12 = createCanonLog("Cinema Gamut Daylight", "", "Canon-Log", lutDir, lutResolution1d)
156 colorspaces.append(CanonLog12)
158 CanonLog13 = createCanonLog("Cinema Gamut Tungsten", "", "Canon-Log", lutDir, lutResolution1d)
159 colorspaces.append(CanonLog13)