Index: third_party/qcms/src/transform.c |
diff --git a/third_party/qcms/src/transform.c b/third_party/qcms/src/transform.c |
index 08db142be6ad1076bb3d5629cdb9879edcdad7fb..9fd82389f84c0aef8a0515a6f4616836c9df1b43 100644 |
--- a/third_party/qcms/src/transform.c |
+++ b/third_party/qcms/src/transform.c |
@@ -1118,28 +1118,31 @@ qcms_transform* qcms_transform_precacheLUT_float(qcms_transform *transform, qcms |
float* src = NULL; |
float* dest = NULL; |
float* lut = NULL; |
+ float inverse; |
src = malloc(lutSize*sizeof(float)); |
dest = malloc(lutSize*sizeof(float)); |
if (src && dest) { |
- /* Prepare a list of points we want to sample */ |
+ /* Prepare a list of points we want to sample: x, y, z order */ |
l = 0; |
+ inverse = 1 / (float)(samples-1); |
for (x = 0; x < samples; x++) { |
for (y = 0; y < samples; y++) { |
for (z = 0; z < samples; z++) { |
- src[l++] = x / (float)(samples-1); |
- src[l++] = y / (float)(samples-1); |
- src[l++] = z / (float)(samples-1); |
+ src[l++] = x * inverse; // r |
+ src[l++] = y * inverse; // g |
+ src[l++] = z * inverse; // b |
} |
} |
} |
lut = qcms_chain_transform(in, out, src, dest, lutSize); |
+ |
if (lut) { |
- transform->r_clut = &lut[0]; |
- transform->g_clut = &lut[1]; |
- transform->b_clut = &lut[2]; |
+ transform->r_clut = &lut[0]; // r |
+ transform->g_clut = &lut[1]; // g |
+ transform->b_clut = &lut[2]; // b |
transform->grid_size = samples; |
if (in_type == QCMS_DATA_RGBA_8) { |
transform->transform_fn = qcms_transform_data_tetra_clut_rgba; |
@@ -1149,8 +1152,8 @@ qcms_transform* qcms_transform_precacheLUT_float(qcms_transform *transform, qcms |
} |
} |
- |
- //XXX: qcms_modular_transform_data may return either the src or dest buffer. If so it must not be free-ed |
+ // XXX: qcms_modular_transform_data may return the lut in either the src or the |
+ // dest buffer. If so, it must not be free-ed. |
if (src && lut != src) { |
free(src); |
} |