4 import generateLUT as genlut
9 def createCanonLog(gamut, transferFunction, name, lutDir, lutResolution1d):
10 name = "%s - %s" % (transferFunction, gamut)
11 if transferFunction == "":
12 name = "Linear - %s" % gamut
14 name = "%s" % transferFunction
22 def legalToFull(codeValue):
23 return (codeValue - 64.0)/(940.0 - 64.0)
25 def canonLogToLinear(codeValue):
26 # log = fullToLegal(c1 * log10(c2*linear + 1) + c3)
27 # linear = (pow(10, (legalToFul(log) - c3)/c1) - 1)/c2
32 linear = (pow(10.0, (legalToFull(codeValue) - c3)/c1) -1.0)/c2
34 #print( codeValue, linear )
37 cs.toReferenceTransforms = []
39 if transferFunction == "Canon-Log":
40 data = array.array('f', "\0" * lutResolution1d * 4)
41 for c in range(lutResolution1d):
42 data[c] = canonLogToLinear(1023.0*c/(lutResolution1d-1))
44 lut = "%s_to_linear.spi1d" % transferFunction
45 genlut.writeSPI1D(lutDir + "/" + lut, 0.0, 1.0, data, lutResolution1d, 1)
47 cs.toReferenceTransforms.append( {
50 'interpolation':'linear',
54 if gamut == 'Rec. 709 Daylight':
55 cs.toReferenceTransforms.append( {
57 'matrix':[0.561538969, 0.402060105, 0.036400926, 0.0,
58 0.092739623, 0.924121198, -0.016860821, 0.0,
59 0.084812961, 0.006373835, 0.908813204, 0.0,
63 elif gamut == 'Rec. 709 Tungsten':
64 cs.toReferenceTransforms.append( {
66 'matrix':[0.566996399, 0.365079418, 0.067924183, 0.0,
67 0.070901044, 0.880331008, 0.048767948, 0.0,
68 0.073013542, -0.066540862, 0.99352732, 0.0,
72 elif gamut == 'DCI-P3 Daylight':
73 cs.toReferenceTransforms.append( {
75 'matrix':[0.607160575, 0.299507286, 0.093332140, 0.0,
76 0.004968120, 1.050982224, -0.055950343, 0.0,
77 -0.007839939, 0.000809127, 1.007030813, 0.0,
81 elif gamut == 'DCI-P3 Tungsten':
82 cs.toReferenceTransforms.append( {
84 'matrix':[0.650279125, 0.253880169, 0.095840706, 0.0,
85 -0.026137986, 1.017900530, 0.008237456, 0.0,
86 0.007757558, -0.063081669, 1.055324110, 0.0,
90 elif gamut == 'Cinema Gamut Daylight':
91 cs.toReferenceTransforms.append( {
93 'matrix':[0.763064455, 0.149021161, 0.087914384, 0.0,
94 0.003657457, 1.10696038, -0.110617837, 0.0,
95 -0.009407794,-0.218383305, 1.227791099, 0.0,
99 elif gamut == 'Cinema Gamut Tungsten':
100 cs.toReferenceTransforms.append( {
102 'matrix':[0.817416293, 0.090755698, 0.091828009, 0.0,
103 -0.035361374, 1.065690585, -0.030329211, 0.0,
104 0.010390366, -0.299271107, 1.288880741, 0.0,
106 'direction':'forward'
109 cs.fromReferenceTransforms = []
112 # Generate all color spaces conversion
113 def createColorSpaces(lutDir, lutResolution1d):
117 CanonLog1 = createCanonLog("Rec. 709 Daylight", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
118 colorspaces.append(CanonLog1)
120 CanonLog2 = createCanonLog("Rec. 709 Tungsten", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
121 colorspaces.append(CanonLog2)
123 CanonLog3 = createCanonLog("DCI-P3 Daylight", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
124 colorspaces.append(CanonLog3)
126 CanonLog4 = createCanonLog("DCI-P3 Tungsten", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
127 colorspaces.append(CanonLog4)
129 CanonLog5 = createCanonLog("Cinema Gamut Daylight", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
130 colorspaces.append(CanonLog5)
132 CanonLog6 = createCanonLog("Cinema Gamut Tungsten", "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
133 colorspaces.append(CanonLog6)
136 CanonLog7 = createCanonLog('', "Canon-Log", "Canon-Log", lutDir, lutResolution1d)
137 colorspaces.append(CanonLog7)
140 CanonLog8 = createCanonLog("Rec. 709 Daylight", "", "Canon-Log", lutDir, lutResolution1d)
141 colorspaces.append(CanonLog8)
143 CanonLog9 = createCanonLog("Rec. 709 Tungsten", "", "Canon-Log", lutDir, lutResolution1d)
144 colorspaces.append(CanonLog9)
146 CanonLog10 = createCanonLog("DCI-P3 Daylight", "", "Canon-Log", lutDir, lutResolution1d)
147 colorspaces.append(CanonLog10)
149 CanonLog11 = createCanonLog("DCI-P3 Tungsten", "", "Canon-Log", lutDir, lutResolution1d)
150 colorspaces.append(CanonLog11)
152 CanonLog12 = createCanonLog("Cinema Gamut Daylight", "", "Canon-Log", lutDir, lutResolution1d)
153 colorspaces.append(CanonLog12)
155 CanonLog13 = createCanonLog("Cinema Gamut Tungsten", "", "Canon-Log", lutDir, lutResolution1d)
156 colorspaces.append(CanonLog13)