[babl] babl: abstract out TRC gamma detectors



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]