summaryrefslogtreecommitdiff
path: root/src/xyz_srgb_lut.cc
blob: 3d207195d3e7cf916e02d528d3c2290b7f22f0ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cmath>
#include "xyz_srgb_lut.h"

using namespace libdcp;

LUTCache<XYZsRGBLUT> XYZsRGBLUT::cache;

XYZsRGBLUT::XYZsRGBLUT(int bits, float gamma)
	: LUT<int> (bits, gamma)
{
	int const bit_length = pow(2, bits);

	for (int i = 0; i < bit_length; ++i) {
		float v = float(i) / (bit_length - 1);
		if (v < (0.04045 / 12.92)) {
			v *= 12.92;
		} else {
			v = (1.055 * pow (v, (1 / gamma))) - 0.055;
		}

		_lut[i] = int(v * 255);
	}
}