[babl] babl-icc: detect 2.2 and 1.8 gammas LUTs



commit 2e1328ab54eb4ac826ff1ef89ae2cf76fa872bf3
Author: Øyvind Kolås <pippin gimp org>
Date:   Wed Aug 23 22:43:34 2017 +0200

    babl-icc: detect 2.2 and 1.8 gammas LUTs

 babl/babl-icc.c |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 52 insertions(+), 2 deletions(-)
---
diff --git a/babl/babl-icc.c b/babl/babl-icc.c
index f48a9e0..649ed7d 100644
--- a/babl/babl-icc.c
+++ b/babl/babl-icc.c
@@ -311,13 +311,63 @@ static const Babl *babl_trc_lut_find (float *lut, int lut_size)
   if (match)
     return babl_trc_gamma (1.0);
 
+  /* look for 2.2 match: */
+  match = 1;
+  if (lut_size > 1024)
+  {
+  for (i = 0; match && i < lut_size; i++)
+  {
+    fprintf (stderr, "%i %f %f\n", i,
+                   lut[i],
+                   pow ((i / (lut_size-1.0)), 2.2));
+    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)
+        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++)
+  {
+    fprintf (stderr, "%i %f %f\n", i,
+                   lut[i],
+                   pow ((i / (lut_size-1.0)), 1.8));
+    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)
+        match = 0;
+    }
+  }
+  if (match)
+    return babl_trc_gamma(2.2);
+
+
   /* 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.00001)
+    if (fabs (lut[i] - gamma_2_2_to_linear (i / (lut_size-1.0))) > 0.0001)
       match = 0;
   }
   }
@@ -325,7 +375,7 @@ static const Babl *babl_trc_lut_find (float *lut, int lut_size)
   {
     for (i = 0; match && i < lut_size; i++)
     {
-      if (fabs (lut[i] - gamma_2_2_to_linear (i / (lut_size-1.0))) > 0.015)
+      if (fabs (lut[i] - gamma_2_2_to_linear (i / (lut_size-1.0))) > 0.001)
         match = 0;
     }
   }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]