[babl] babl: abstract out TRC gamma detectors
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] babl: abstract out TRC gamma detectors
- Date: Wed, 13 Sep 2017 20:09:33 +0000 (UTC)
commit 65493f8eb8b7792d22f349dd4771a1f853da829f
Author: Øyvind Kolås <pippin gimp org>
Date: Wed Sep 13 22:08:27 2017 +0200
babl: abstract out TRC gamma detectors
babl/babl-trc.c | 83 +++++++++++++++++++-----------------------------------
1 files changed, 29 insertions(+), 54 deletions(-)
---
diff --git a/babl/babl-trc.c b/babl/babl-trc.c
index 4a05011..7d9f82f 100644
--- a/babl/babl-trc.c
+++ b/babl/babl-trc.c
@@ -474,81 +474,51 @@ float babl_trc_to_linear (const Babl *trc_, float value)
}
#endif
-const Babl *babl_trc_lut_find (float *lut, int lut_size)
+static int
+babl_lut_match_gamma (float *lut, int lut_size, float gamma)
{
- int i;
int match = 1;
-
- /* look for linear match */
- for (i = 0; match && i < lut_size; i++)
- if (fabs (lut[i] - i / (lut_size-1.0)) > 0.015)
- match = 0;
- if (match)
- return babl_trc_gamma (1.0);
-
- /* look for 2.2 match: */
- match = 1;
+ int i;
if (lut_size > 1024)
{
- for (i = 0; match && i < lut_size; i++)
- {
-#if 0
- fprintf (stderr, "%i %f %f\n", i,
- lut[i],
- pow ((i / (lut_size-1.0)), 2.2));
-#endif
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 2.2)) > 0.0001)
- match = 0;
- }
- }
- else
- {
for (i = 0; match && i < lut_size; i++)
{
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 2.2)) > 0.001)
+ if (fabs (lut[i] - pow ((i / (lut_size-1.0)), gamma)) > 0.0001)
match = 0;
}
}
- if (match)
- return babl_trc_gamma(2.2);
-
-
- /* look for 1.8 match: */
- match = 1;
- if (lut_size > 1024)
- {
- for (i = 0; match && i < lut_size; i++)
- {
-#if 0
- fprintf (stderr, "%i %f %f\n", i,
- lut[i],
- pow ((i / (lut_size-1.0)), 1.8));
-#endif
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 1.8)) > 0.0001)
- match = 0;
- }
- }
else
{
for (i = 0; match && i < lut_size; i++)
{
- if (fabs (lut[i] - pow ((i / (lut_size-1.0)), 1.8)) > 0.001)
+ if (fabs (lut[i] - pow ((i / (lut_size-1.0)), gamma)) > 0.001)
match = 0;
}
}
- if (match)
- return babl_trc_gamma(2.2);
+ return match;
+}
+const Babl *babl_trc_lut_find (float *lut, int lut_size)
+{
+ int i;
+ int match = 1;
+
+ /* look for linear match */
+ for (i = 0; match && i < lut_size; i++)
+ if (fabs (lut[i] - i / (lut_size-1.0)) > 0.015)
+ match = 0;
+ if (match)
+ return babl_trc_gamma (1.0);
/* look for sRGB match: */
match = 1;
if (lut_size > 1024)
{
- for (i = 0; match && i < lut_size; i++)
- {
- if (fabs (lut[i] - gamma_2_2_to_linear (i / (lut_size-1.0))) > 0.0001)
- match = 0;
- }
+ for (i = 0; match && i < lut_size; i++)
+ {
+ if (fabs (lut[i] - gamma_2_2_to_linear (i / (lut_size-1.0))) > 0.0001)
+ match = 0;
+ }
}
else
{
@@ -561,6 +531,11 @@ const Babl *babl_trc_lut_find (float *lut, int lut_size)
if (match)
return babl_trc ("sRGB");
+ if (babl_lut_match_gamma (lut, lut_size, 2.2))
+ return babl_trc_gamma(2.2);
+
+ if (babl_lut_match_gamma (lut, lut_size, 1.8))
+ return babl_trc_gamma(1.8);
+
return NULL;
}
-
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]