diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-08-15 22:52:28 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-08-15 22:52:28 +0100 |
| commit | 6eab18513b46e7ba9d18965a75da8176e21091d5 (patch) | |
| tree | ad5195e3fed95f96914221b853da2898c947d982 | |
| parent | 753912e0f4a70343b693b1b5aefff101edd28874 (diff) | |
Missing files.
| -rw-r--r-- | .gitignore | 4 | ||||
| -rw-r--r-- | lut.py | 126 |
2 files changed, 130 insertions, 0 deletions
@@ -6,3 +6,7 @@ build doc/html doc/latex src/version.cc +src/lut.cc +src/lut.h +*.pyc + @@ -0,0 +1,126 @@ +import math + +BIT_DEPTH = 12 +DCI_GAMMA = 2.6 +SRGB_GAMMA = 2.4; +BIT_LENGTH = int(math.pow(2, BIT_DEPTH)) +COLOR_DEPTH = BIT_LENGTH - 1 + +def boilerplate(f): + print >>f, """/* + Copyright (C) 2012 Carl Hetherington <cth@carlh.net> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + + +/* This file is auto-generated by the build scripts; edits will be lost + on ./waf configure. +*/ +""" + +def make_luts(): + cc = open('src/lut.cc', 'w') + + boilerplate(cc) + + print >>cc,"#include \"lut.h\"" + + print >>cc, """ +/* sRGB color matrix for XYZ -> RGB */ +float color_matrix[3][3] = { + { 3.240454836, -1.537138850, -0.498531547}, + {-0.969266390, 1.876010929, 0.041556082}, + { 0.055643420, -0.204025854, 1.057225162} +};\n\n +""" + + print >>cc, """ +float lut_in[COLOR_DEPTH + 1] = {\n +\t/* Bit depth: %d +\t * Reference white: DCI +\t * Gamma: %f +\t */ +""" % (BIT_DEPTH, DCI_GAMMA) + + c = 0 + for i in range(0, BIT_LENGTH): + v = math.pow (i / (BIT_LENGTH - 1.0), DCI_GAMMA); + + if (c == 0): + print >> cc," ", + + if i < BIT_LENGTH - 1: + print >> cc,"%06f, " % v, + if c == 12: + c = 0; + print >> cc,"" + else: + c += 1 + else: + print >> cc,"%06f" % v + + print >>cc,"};" + + print >>cc, """ +int lut_out[COLOR_DEPTH + 1] = { +\t/* Bit depth: %d +\t * Reference white: sRGB +\t * Gamma: %f +\t */ +""" + + c = 0 + for i in range (0, BIT_LENGTH): + v = i / (BIT_LENGTH - 1.0) + + if (v < (0.04045 / 12.92)): + v *= 12.92 + else: + v = (1.055 * pow (v, (1 / SRGB_GAMMA))) - 0.055; + + v *= 255 + + if c == 0: + print >> cc," ", + + if i < BIT_LENGTH - 1: + print >> cc, "%d, " % v, + if c == 12: + c = 0; + print >> cc,"" + else: + c += 1 + else: + print >> cc,"%d" % v + + print >>cc,"};" + + h = open('src/lut.h', 'w') + + boilerplate(h) + + print >> h,""" +#define COLOR_DEPTH (%d) +#define DCI_COEFFICIENT (48.0/52.37) + +extern float color_matrix[3][3]; +extern int lut_out[COLOR_DEPTH + 1]; +extern float lut_in[COLOR_DEPTH + 1]; +""" % COLOR_DEPTH + +if __name__ == "__main__": + make_luts() |
