From 6eab18513b46e7ba9d18965a75da8176e21091d5 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 15 Aug 2012 22:52:28 +0100 Subject: [PATCH] Missing files. --- .gitignore | 4 ++ lut.py | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 lut.py diff --git a/.gitignore b/.gitignore index e32ab30c..a62199ae 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,7 @@ build doc/html doc/latex src/version.cc +src/lut.cc +src/lut.h +*.pyc + diff --git a/lut.py b/lut.py new file mode 100644 index 00000000..954f094f --- /dev/null +++ b/lut.py @@ -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 + + 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() -- 2.30.2