Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Unified Diff: third_party/qcms/src/chain.c

Issue 1494473003: [qcms] Add a color profile white point transform api (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/qcms/README.chromium ('k') | third_party/qcms/src/qcms.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/qcms/src/chain.c
diff --git a/third_party/qcms/src/chain.c b/third_party/qcms/src/chain.c
index aa8506e41deeed4f2e19f2997cac000dc1c54b12..4e4b000a8a703e2c77cde569e069ded8d9daf01e 100644
--- a/third_party/qcms/src/chain.c
+++ b/third_party/qcms/src/chain.c
@@ -893,7 +893,7 @@ remove_next:
}
*/
-static struct qcms_modular_transform* qcms_modular_transform_create(qcms_profile *in, qcms_profile *out)
+static struct qcms_modular_transform* qcms_modular_transform_create(qcms_profile *in, qcms_profile *out, bool pcs_xyz_only)
{
struct qcms_modular_transform *first_transform = NULL;
struct qcms_modular_transform **next_transform = &first_transform;
@@ -918,6 +918,9 @@ static struct qcms_modular_transform* qcms_modular_transform_create(qcms_profile
lab_to_pcs->transform_module_fn = qcms_transform_module_LAB_to_XYZ;
}
+ if (pcs_xyz_only)
+ return first_transform;
+
// This does not improve accuracy in practice, something is wrong here.
//if (in->chromaticAdaption.invalid == false) {
// struct qcms_modular_transform* chromaticAdaption;
@@ -984,7 +987,7 @@ static float* qcms_modular_transform_data(struct qcms_modular_transform *transfo
float* qcms_chain_transform(qcms_profile *in, qcms_profile *out, float *src, float *dest, size_t lutSize)
{
- struct qcms_modular_transform *transform_list = qcms_modular_transform_create(in, out);
+ struct qcms_modular_transform *transform_list = qcms_modular_transform_create(in, out, false);
if (transform_list != NULL) {
float *lut = qcms_modular_transform_data(transform_list, src, dest, lutSize/3);
qcms_modular_transform_release(transform_list);
@@ -992,3 +995,27 @@ float* qcms_chain_transform(qcms_profile *in, qcms_profile *out, float *src, flo
}
return NULL;
}
+
+qcms_bool qcms_profile_white_transform(qcms_profile *profile, float XYZ[3])
+{
+ static qcms_profile xyz_pcs_profile;
robert.bradford 2015/12/02 15:25:39 What's the rationale for this? Is this a performan
Noel Gordon 2015/12/03 03:14:50 Nope, not perf critical. The chrome memory usage
+
+ if (xyz_pcs_profile.pcs != XYZ_SIGNATURE) {
Justin Novosad 2015/12/02 15:40:08 Is qcms not concerned about thread safety?
Noel Gordon 2015/12/03 03:14:51 Yes it is, always. We currently create profiles o
+ memset(&xyz_pcs_profile, 0, sizeof(xyz_pcs_profile));
robert.bradford 2015/12/02 15:25:39 static variables are initialised to zero always, n
Noel Gordon 2015/12/03 03:14:51 Ack, but ditched the static anyway.
+ xyz_pcs_profile.pcs = XYZ_SIGNATURE;
+ }
robert.bradford 2015/12/02 15:25:39 Alternative (using C99 initialisers): static cons
Noel Gordon 2015/12/03 03:14:51 Ditched the static profile, but thanks for the tip
+
+ struct qcms_modular_transform *transform_list = qcms_modular_transform_create(profile, &xyz_pcs_profile, true);
+ if (transform_list != NULL) {
+ // Calculate how the given profile transforms white input color to PCS XYZ space.
+ XYZ[0] = XYZ[1] = XYZ[2] = 1.0f;
+ qcms_modular_transform_data(transform_list, XYZ, XYZ, 1);
+ XYZ[0] *= 1.999969482421875f;
Noel Gordon 2015/12/02 10:38:34 Note: qcms_modular_transform_data internally scale
Justin Novosad 2015/12/02 15:40:08 Readability nit from a qcms outsider: put this num
Noel Gordon 2015/12/03 03:14:51 On 2015/12/02 15:40:08, Justin Novosad wrote: That
+ XYZ[1] *= 1.999969482421875f;
+ XYZ[2] *= 1.999969482421875f;
+ qcms_modular_transform_release(transform_list);
+ return true;
+ }
+
+ return false;
+}
« no previous file with comments | « third_party/qcms/README.chromium ('k') | third_party/qcms/src/qcms.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698