[babl] replace gamma approximations



commit e01c1bf249735b5cc83efc12789b79d96ec46252
Author: Øyvind Kolås <pippin gimp org>
Date:   Thu Aug 31 13:16:28 2017 +0200

    replace gamma approximations

 babl/babl-internal.h   |   24 +-----
 babl/babl-trc.c        |  217 +++++++++++++++++++++---------------------------
 babl/babl-trc.h        |   18 ++++-
 babl/base/model-gray.c |    8 +-
 babl/base/model-rgb.c  |   28 +++---
 extensions/cairo.c     |   17 ++--
 extensions/float.c     |   42 +++++-----
 extensions/gimp-8bit.c |    2 +-
 8 files changed, 161 insertions(+), 195 deletions(-)
---
diff --git a/babl/babl-internal.h b/babl/babl-internal.h
index 61d6e09..9ddb9c1 100644
--- a/babl/babl-internal.h
+++ b/babl/babl-internal.h
@@ -346,21 +346,6 @@ babl_trc_new (const char *name,
               int         n_lut,
               float      *lut);
 
-/**
- * babl_trc_from_linear:
- *
- * Makes linear data non-linear according to the trc.
- */
-float babl_trc_from_linear (const Babl *trc, float value);
-
-/**
- * babl_trc_from_linear:
- *
- * Makes non-linear data with the TRC linear data.
- */
-float babl_trc_to_linear   (const Babl *trc, float value);
-
-
 void babl_space_to_xyz   (const Babl *space, const double *rgb, double *xyz);
 void babl_space_from_xyz (const Babl *space, const double *xyz, double *rgb);
 
@@ -368,12 +353,11 @@ const Babl *babl_space_from_icc (const char *icc,
                                  int         length,
                                  char      **error);
 const Babl *babl_trc_lut_find (float *lut, int lut_size);
-const Babl * babl_trc_lut   (const char *name, int n, float *entries);
+const Babl *babl_trc_lut      (const char *name, int n, float *entries);
 
-Babl *
-format_new_from_format_with_space (const Babl *format, const Babl *space);
-int
-babl_list_destroy (void *data);
+Babl * format_new_from_format_with_space (const Babl *format, const Babl *space);
+
+int babl_list_destroy (void *data);
 
 const char *
 babl_conversion_create_name (Babl *source, Babl *destination, int is_reference);
diff --git a/babl/babl-trc.c b/babl/babl-trc.c
index 6de0fd1..29c56db 100644
--- a/babl/babl-trc.c
+++ b/babl/babl-trc.c
@@ -24,6 +24,10 @@
 
 static BablTRC trc_db[MAX_TRCS];
 
+static inline float _babl_trc_linear (const Babl *trc_, float value)
+{
+  return value;
+}
 
 static inline float babl_trc_lut_from_linear (const Babl *trc_, float value)
 {
@@ -49,11 +53,6 @@ static inline float babl_trc_lut_to_linear (const Babl *trc_, float value)
   return ret;
 }
 
-static inline float _babl_trc_linear (const Babl *trc_, float value)
-{
-  return 1.0;
-}
-
 /* origin: FreeBSD /usr/src/lib/msun/src/e_powf.c, copied from musl */
 /*
  * Conversion to float by Ian Lance Taylor, Cygnus Support, ian cygnus com.
@@ -356,137 +355,119 @@ static inline float _babl_trc_gamma_from_linear (const Babl *trc_, float value)
   return babl_powf (value, trc->rgamma);
 }
 
-#define POLY_DEGREE 9
-
 static inline float _babl_trc_gamma_1_8_to_linear (const Babl *trc_, float x)
 {
-  if (x >= 0.01f && x <= 1.0f)
+  if (x >= 0.01f && x < 0.7f)
   {
-#if POLY_DEGREE==9
-    float u = -2.9976517e+1f;
-    u = u * x + 1.2166704e+2f;
-    u = u * x + -2.0336221e+2f;
-    u = u * x + 1.8145976e+2f;
-    u = u * x + -9.4187362e+1f;
-    u = u * x + 2.9529147e+1f;
-    u = u * x + -6.013473f;
-    u = u * x + 1.8725695f;
-    u = u * x + 9.9435057e-3f;
-    return u * x + -3.0061697e-5f;
-#elif POLY_DEGREE==10
-    float u = 7.7739437e+1f;
-    u = u * x + -3.5356881e+2f;
-    u = u * x + 6.7648456e+2f;
-    u = u * x + -7.0946645e+2f;
-    u = u * x + 4.4648413e+2f;
-    u = u * x + -1.7452451e+2f;
-    u = u * x + 4.3126128e+1f;
-    u = u * x + -7.2036142f;
-    u = u * x + 1.9207626f;
-    u = u * x + 9.14659e-3f;
-    return u * x + -2.575215e-5f;
-#endif
+    double u = -1.326432065236105e+1;
+    u = u * x + 7.7192973347868776e+1;
+    u = u * x + -1.9639662782311719e+2;
+    u = u * x + 2.8719828602066411e+2;
+    u = u * x + -2.6718118019754855e+2;
+    u = u * x + 1.6562450069335532e+2;
+    u = u * x + -6.9988172743274441e+1;
+    u = u * x + 2.0568254985551865e+1;
+    u = u * x + -4.5302829214271245;
+    u = u * x + 1.7636048338730889;
+    u = u * x + 1.3015451332543148e-2;
+    return u * x + -5.4445726922508747e-5;
+  }
+  else if (x >= 0.7f && x < 1.4f)
+  {
+    double u = 2.4212422421184617e-3;
+    u = u * x + -2.0853930731707795e-2;
+    u = u * x + 8.2416801461966525e-2;
+    u = u * x + -2.1755799369117727e-1;
+    u = u * x + 1.0503926510667593;
+    u = u * x + 1.1196374095271941e-1;
+    return u * x + -8.7825075945914206e-3;
   }
-  return babl_powf (x, 1.8);
+  return babl_powf (x, 1.8f);
 }
 
 static inline float _babl_trc_gamma_1_8_from_linear (const Babl *trc_, float x)
 {
-  if (x >= 0.01f && x <= 1.0f)
+  if (x >= 0.01f && x < 0.25f)
   {
-#if POLY_DEGREE==9
-    float u = 7.6987344e+2f;
-    u = u * x + -3.4624161e+3f;
-    u = u * x + 6.5169973e+3f;
-    u = u * x + -6.6683502e+3f;
-    u = u * x + 4.037826e+3f;
-    u = u * x + -1.4810227e+3f;
-    u = u * x + 3.2670293e+2f;
-    u = u * x + -4.3240358e+1f;
-    u = u * x + 4.6009555f;
-    return u * x + 3.6000385e-2f;
-#elif POLY_DEGREE==10
-    float u = -2.2269134e+3f;
-    u = u * x + 1.1122916e+4f;
-    u = u * x + -2.3689515e+4f;
-    u = u * x + 2.8091743e+4f;
-    u = u * x + -2.0332165e+4f;
-    u = u * x + 9.2757293e+3f;
-    u = u * x + -2.6697086e+3f;
-    u = u * x + 4.7661489e+2f;
-    u = u * x + -5.2577079e+1f;
-    u = u * x + 4.8359543f;
-    return u * x + 3.4288484e-2f;
-#endif
+    double u = -7.0287082190390287e+7;
+    u = u * x + 9.6393346352028194e+7;
+    u = u * x + -5.734540040993472e+7;
+    u = u * x + 1.9423130902481005e+7;
+    u = u * x + -4.1360185772523716e+6;
+    u = u * x + 5.7798684366021459e+5;
+    u = u * x + -5.3914765738125787e+4;
+    u = u * x + 3.3827381495697474e+3;
+    u = u * x + -1.4758049734050082e+2;
+    u = u * x + 6.34823684277896;
+    return u * x + 2.5853366952641552e-2;
+  } else if (x >= 0.25f && x < 1.1f)
+  {
+    double u = -1.0514013917303294;
+    u = u * x + 7.7742547018698687;
+    u = u * x + -2.5688463052927626e+1;
+    u = u * x + 5.009448068094152e+1;
+    u = u * x + -6.4160579394623318e+1;
+    u = u * x + 5.6890996491836047e+1;
+    u = u * x + -3.5956430472666212e+1;
+    u = u * x + 1.6565821666356617e+1;
+    u = u * x + -5.8508167212560416;
+    u = u * x + 2.2859969154731878;
+    return u * x + 9.6140522367339399e-2;
   }
   return babl_powf (x, 1.0f/1.8f);
 }
 
 static inline float _babl_trc_gamma_2_2_to_linear (const Babl *trc_, float x)
 {
-  if (x >= 0.01f && x <= 1.0f)
+  if (x >= 0.01f && x < 1.0f)
   {
-#if POLY_DEGREE==9
-    float u = 1.4519824e+1f;
-    u = u * x + -5.6919938e+1f;
-    u = u * x + 9.1404232e+1f;
-    u = u * x + -7.7951568e+1f;
-    u = u * x + 3.8593448e+1f;
-    u = u * x + -1.1709313e+1f;
-    u = u * x + 2.594042f;
-    u = u * x + 4.716017e-1f;
-    u = u * x + -1.478392e-3f;
-    return u * x + 4.987805e-6f;
-#elif POLY_DEGREE==10
-    float u = -3.6278814e+1f;
-    u = u * x + 1.5984863e+2f;
-    u = u * x + -2.9493194e+2f;
-    u = u * x + 2.9678744e+2f;
-    u = u * x + -1.7840175e+2f;
-    u = u * x + 6.6563304e+1f;
-    u = u * x + -1.5968574e+1f;
-    u = u * x + 2.9224961f;
-    u = u * x + 4.5996165e-1f;
-    u = u * x + -1.306086e-3f;
-    return u * x + 4.1278131e-6f;
-#endif
+    double u = -1.7565198334207539;
+    u = u * x + 9.4503605497836926;
+    u = u * x + -2.2016178903082791e+1;
+    u = u * x + 2.9177361786084179e+1;
+    u = u * x + -2.4368251609523336e+1;
+    u = u * x + 1.3522663223248737e+1;
+    u = u * x + -5.253344907664925;
+    u = u * x + 1.7182864905042889;
+    u = u * x + 5.2860458501353106e-1;
+    u = u * x + -3.0000031884069502e-3;
+    return u * x + 1.6952727496833812e-5;
   }
   return babl_powf (x, 2.2f);
 }
 
 static inline float _babl_trc_gamma_2_2_from_linear (const Babl *trc_, float x)
 {
-  if (x >= 0.01f && x <= 1.0f)
+  if (x >= 0.01f && x < 0.25f)
   {
-#if POLY_DEGREE==9
-    float u = 1.0084733e+3f;
-    u = u * x + -4.5716932e+3f;
-    u = u * x + 8.6843755e+3f;
-    u = u * x + -8.9814293e+3f;
-    u = u * x + 5.5060078e+3f;
-    u = u * x + -2.0477969e+3f;
-    u = u * x + 4.5804658e+2f;
-    u = u * x + -6.0913328e+1f;
-    u = u * x + 5.8668695f;
-    return u * x + 7.1335777e-2f;
-#elif POLY_DEGREE==10
-    float u = -2.9423332e+3f;
-    u = u * x + 1.4803473e+4f;
-    u = u * x + -3.1791125e+4f;
-    u = u * x + 3.805972e+4f;
-    u = u * x + -2.7850114e+4f;
-    u = u * x + 1.2865342e+4f;
-    u = u * x + -3.7543241e+3f;
-    u = u * x + 6.7921578e+2f;
-    u = u * x + -7.5167916e+1f;
-    u = u * x + 6.239892f;
-    return u * x + 6.8539291e-2f;
-#endif
+    double u = -1.1853049266795914e+8;
+    u = u * x + 1.6235355750617304e+8;
+    u = u * x + -9.6434183855508922e+7;
+    u = u * x + 3.2595749146174438e+7;
+    u = u * x + -6.9216734175519044e+6;
+    u = u * x + 9.6337373983643336e+5;
+    u = u * x + -8.9295299887376452e+4;
+    u = u * x + 5.5387559329470092e+3;
+    u = u * x + -2.3522564268245811e+2;
+    u = u * x + 8.8234901614165394;
+    return u * x + 5.3919966190648492e-2;
+  } else if (x >= 0.25f && x < 1.0f)
+  {
+    double u = -2.1065242890384543e-1;
+    u = u * x + 1.7554867367832886;
+    u = u * x + -6.6371047248064382;
+    u = u * x + 1.5049549954517457e+1;
+    u = u * x + -2.279671781745644e+1;
+    u = u * x + 2.4331499227325978e+1;
+    u = u * x + -1.8839523095731037e+1;
+    u = u * x + 1.0802279176589768e+1;
+    u = u * x + -4.7776729355620852;
+    u = u * x + 2.1410886948010769;
+    return u * x + 1.817672123838504e-1;
   }
   return babl_powf (x, 1.0/2.2);
 }
 
-
 static inline float _babl_trc_srgb_to_linear (const Babl *trc_, float value)
 {
   return babl_gamma_2_2_to_linear (value);
@@ -497,18 +478,6 @@ static inline float _babl_trc_srgb_from_linear (const Babl *trc_, float value)
   return babl_linear_to_gamma_2_2f (value);
 }
 
-static inline float _babl_trc_from_linear (const Babl *trc_, float value)
-{
-  BablTRC *trc = (void*)trc_;
-  return trc->fun_from_linear (trc_, value);
-}
-
-static inline float _babl_trc_to_linear (const Babl *trc_, float value)
-{
-  BablTRC *trc = (void*)trc_;
-  return trc->fun_to_linear (trc_, value);
-}
-
 
 const Babl *
 babl_trc (const char *name)
@@ -663,15 +632,17 @@ babl_trc_class_init (void)
   babl_trc_new ("linear", BABL_TRC_LINEAR, 1.0, 0, NULL);
 }
 
+#if 0
 float babl_trc_from_linear (const Babl *trc_, float value)
 {
-  return _babl_trc_from_linear (trc_, value);
+  return babl_trc_from_linear (trc_, value);
 }
 
 float babl_trc_to_linear (const Babl *trc_, float value)
 {
-  return _babl_trc_to_linear (trc_, value);
+  return babl_trc_to_linear (trc_, value);
 }
+#endif
 
 const Babl *babl_trc_lut_find (float *lut, int lut_size)
 {
diff --git a/babl/babl-trc.h b/babl/babl-trc.h
index 0c9c23a..dc1abf9 100644
--- a/babl/babl-trc.h
+++ b/babl/babl-trc.h
@@ -40,13 +40,25 @@ typedef struct
   int              lut_size;
   double           gamma;
   float            rgamma;
-  char             name[128];
+  float          (*fun_to_linear)(const Babl *trc, float val);
+  float          (*fun_from_linear)(const Babl *trc, float val);
   float           *lut;
   float           *inv_lut;
-  float          (*fun_to_linear)(const Babl *trc_, float val);
-  float          (*fun_from_linear)(const Babl *trc_, float val);
+  char             name[128];
 } BablTRC;
 
+static inline float babl_trc_from_linear (const Babl *trc_, float value)
+{
+  BablTRC *trc = (void*)trc_;
+  return trc->fun_from_linear (trc_, value);
+}
+
+static inline float babl_trc_to_linear (const Babl *trc_, float value)
+{
+  BablTRC *trc = (void*)trc_;
+  return trc->fun_to_linear (trc_, value);
+}
+
 void
 babl_trc_class_init (void);
 
diff --git a/babl/base/model-gray.c b/babl/base/model-gray.c
index a7ad2a6..adb9fd8 100644
--- a/babl/base/model-gray.c
+++ b/babl/base/model-gray.c
@@ -206,7 +206,7 @@ rgb_to_gray_2_2 (Babl  *conversion,
       luminance = red   * RGB_LUMINANCE_RED +    // XXX: should be taken from BablSpace
                   green * RGB_LUMINANCE_GREEN +
                   blue  * RGB_LUMINANCE_BLUE;
-      *(double *) dst[0] = trc->trc.fun_from_linear (trc, luminance);
+      *(double *) dst[0] = babl_trc_from_linear (trc, luminance);
 
       if (dst_bands == 2)
         *(double *) dst[1] = alpha;
@@ -237,7 +237,7 @@ gray_2_2_to_rgb (Babl *conversion,
       double red, green, blue;
       double alpha;
 
-      luminance = trc->trc.fun_to_linear (trc, *(double *) src[0]);
+      luminance = babl_trc_to_linear (trc, *(double *) src[0]);
       red       = luminance;
       green     = luminance;
       blue      = luminance;
@@ -485,7 +485,7 @@ rgba2gray_gamma_2_2_premultiplied (Babl *conversion,
       luminance = red * RGB_LUMINANCE_RED +
                   green * RGB_LUMINANCE_GREEN +
                   blue * RGB_LUMINANCE_BLUE;
-      luma = trc->trc.fun_from_linear (trc, luminance);
+      luma = babl_trc_from_linear (trc, luminance);
 
       ((double *) dst)[0] = luma * alpha;
       ((double *) dst)[1] = alpha;
@@ -513,7 +513,7 @@ gray_gamma_2_2_premultiplied2rgba (Babl *conversion,
       double luminance;
 
       luma      = luma / alpha;
-      luminance = trc->trc.fun_to_linear (trc, luma);
+      luminance = babl_trc_to_linear (trc, luma);
 
       ((double *) dst)[0] = luminance;
       ((double *) dst)[1] = luminance;
diff --git a/babl/base/model-rgb.c b/babl/base/model-rgb.c
index 27a080e..4fcd2fb 100644
--- a/babl/base/model-rgb.c
+++ b/babl/base/model-rgb.c
@@ -201,7 +201,7 @@ g3_gamma_2_2 (Babl  *conversion,
     {
       int band;
       for (band = 0; band < 3; band++)
-        *(double *) dst[band] = trc[band]->trc.fun_from_linear (trc[band], (*(double *) src[band]));
+        *(double *) dst[band] = babl_trc_from_linear (trc[band], (*(double *) src[band]));
       for (; band < dst_bands; band++)
         *(double *) dst[band] = *(double *) src[band];
 
@@ -231,7 +231,7 @@ g3_inv_gamma_2_2 (Babl  *conversion,
       int band;
       for (band = 0; band < 3; band++)
         {
-          *(double *) dst[band] = trc[band]->trc.fun_to_linear (trc[band], (*(double *) src[band]));
+          *(double *) dst[band] = babl_trc_to_linear (trc[band], (*(double *) src[band]));
         }
       for (; band < dst_bands; band++)
         {
@@ -327,9 +327,9 @@ rgba2rgba_gamma_2_2_premultiplied (Babl *conversion,
   while (n--)
     {
       double alpha = ((double *) src)[3];
-      ((double *) dst)[0] = trc[0]->trc.fun_from_linear (trc[0], ((double *) src)[0]) * alpha;
-      ((double *) dst)[1] = trc[0]->trc.fun_from_linear (trc[1], ((double *) src)[1]) * alpha;
-      ((double *) dst)[2] = trc[0]->trc.fun_from_linear (trc[2], ((double *) src)[2]) * alpha;
+      ((double *) dst)[0] = babl_trc_from_linear (trc[0], ((double *) src)[0]) * alpha;
+      ((double *) dst)[1] = babl_trc_from_linear (trc[1], ((double *) src)[1]) * alpha;
+      ((double *) dst)[2] = babl_trc_from_linear (trc[2], ((double *) src)[2]) * alpha;
       ((double *) dst)[3] = alpha;
       src                += 4 * sizeof (double);
       dst                += 4 * sizeof (double);
@@ -353,9 +353,9 @@ rgba_gamma_2_2_premultiplied2rgba (Babl *conversion,
       double alpha = ((double *) src)[3];
       if (alpha > BABL_ALPHA_THRESHOLD)
         {
-          ((double *) dst)[0] = trc[0]->trc.fun_to_linear (trc[0], ((double *) src)[0] / alpha);
-          ((double *) dst)[1] = trc[1]->trc.fun_to_linear (trc[1], ((double *) src)[1] / alpha);
-          ((double *) dst)[2] = trc[2]->trc.fun_to_linear (trc[2], ((double *) src)[2] / alpha);
+          ((double *) dst)[0] = babl_trc_to_linear (trc[0], ((double *) src)[0] / alpha);
+          ((double *) dst)[1] = babl_trc_to_linear (trc[1], ((double *) src)[1] / alpha);
+          ((double *) dst)[2] = babl_trc_to_linear (trc[2], ((double *) src)[2] / alpha);
         }
       else
         {
@@ -385,9 +385,9 @@ rgba2rgba_gamma_2_2 (Babl *conversion,
   while (n--)
     {
       double alpha = ((double *) src)[3];
-      ((double *) dst)[0] = trc[0]->trc.fun_from_linear (trc[0], ((double *) src)[0]);
-      ((double *) dst)[1] = trc[1]->trc.fun_from_linear (trc[1], ((double *) src)[1]);
-      ((double *) dst)[2] = trc[2]->trc.fun_from_linear (trc[2], ((double *) src)[2]);
+      ((double *) dst)[0] = babl_trc_from_linear (trc[0], ((double *) src)[0]);
+      ((double *) dst)[1] = babl_trc_from_linear (trc[1], ((double *) src)[1]);
+      ((double *) dst)[2] = babl_trc_from_linear (trc[2], ((double *) src)[2]);
       ((double *) dst)[3] = alpha;
       src                += 4 * sizeof (double);
       dst                += 4 * sizeof (double);
@@ -409,9 +409,9 @@ rgba_gamma_2_22rgba (Babl *conversion,
   while (n--)
     {
       double alpha = ((double *) src)[3];
-      ((double *) dst)[0] = trc[0]->trc.fun_to_linear (trc[0], ((double *) src)[0]);
-      ((double *) dst)[1] = trc[1]->trc.fun_to_linear (trc[1], ((double *) src)[1]);
-      ((double *) dst)[2] = trc[2]->trc.fun_to_linear (trc[2], ((double *) src)[2]);
+      ((double *) dst)[0] = babl_trc_to_linear (trc[0], ((double *) src)[0]);
+      ((double *) dst)[1] = babl_trc_to_linear (trc[1], ((double *) src)[1]);
+      ((double *) dst)[2] = babl_trc_to_linear (trc[2], ((double *) src)[2]);
       ((double *) dst)[3] = alpha;
 
       src += 4 * sizeof (double);
diff --git a/extensions/cairo.c b/extensions/cairo.c
index c53da2a..e96c74b 100644
--- a/extensions/cairo.c
+++ b/extensions/cairo.c
@@ -300,11 +300,11 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,unsigned char *src,
       float alpha  = *fsrc++;
       if (alpha >= 1.0)
       {
-        int val = trc[2]->trc.fun_from_linear (trc[2], blue) * 0xff + 0.5f;
+        int val = babl_trc_from_linear (trc[2], blue) * 0xff + 0.5f;
         *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
-        val = trc[1]->trc.fun_from_linear (trc[1], green) * 0xff + 0.5f;
+        val = babl_trc_from_linear (trc[1], green) * 0xff + 0.5f;
         *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
-        val = trc[0]->trc.fun_from_linear (trc[0], red) * 0xff + 0.5f;
+        val = babl_trc_from_linear (trc[0], red) * 0xff + 0.5f;
         *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
         *cdst++ = 0xff;
       }
@@ -316,11 +316,11 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,unsigned char *src,
       else
       {
         float balpha = alpha * 0xff;
-        int val = trc[2]->trc.fun_from_linear (trc[2], blue) * balpha + 0.5f;
+        int val = babl_trc_from_linear (trc[2], blue) * balpha + 0.5f;
         *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
-        val = trc[1]->trc.fun_from_linear (trc[1], green) * balpha + 0.5f;
+        val = babl_trc_from_linear (trc[1], green) * balpha + 0.5f;
         *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
-        val = trc[0]->trc.fun_from_linear (trc[0], red) * balpha + 0.5f;
+        val = babl_trc_from_linear (trc[0], red) * balpha + 0.5f;
         *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
         *cdst++ = balpha + 0.5f;
       }
@@ -346,7 +346,7 @@ conv_yafloat_cairo32_le (const Babl *conversion,unsigned char *src,
       float alpha  = *fsrc++;
       if (alpha >= 1.0)
       {
-        int val = trc[0]->trc.fun_from_linear (trc[0], gray) * 0xff + 0.5f;
+        int val = babl_trc_from_linear (trc[0], gray) * 0xff + 0.5f;
         val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
         *cdst++ = val;
         *cdst++ = val;
@@ -361,7 +361,7 @@ conv_yafloat_cairo32_le (const Babl *conversion,unsigned char *src,
       else
       {
         float balpha = alpha * 0xff;
-        int val = trc[0]->trc.fun_from_linear (trc[0], gray) * balpha + 0.5f;
+        int val = babl_trc_from_linear (trc[0], gray) * balpha + 0.5f;
         val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
         *cdst++ = val;
         *cdst++ = val;
@@ -424,7 +424,6 @@ init (void)
       babl_conversion_new (babl_format ("Y'A u16"), f32, "linear",
                            conv_yA16_cairo32_le, NULL);
 
-
       babl_conversion_new (babl_format ("Y' u8"), f32, "linear",
                            conv_y8_cairo32_le, NULL);
       babl_conversion_new (babl_format ("Y' u16"), f32, "linear",
diff --git a/extensions/float.c b/extensions/float.c
index 0ebe81a..4eb26dd 100644
--- a/extensions/float.c
+++ b/extensions/float.c
@@ -45,9 +45,9 @@ conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src,
    while (n--)
      {
        float alpha = fsrc[3];
-       *fdst++ = trc[0]->trc.fun_from_linear (trc[0], *fsrc++) * alpha;
-       *fdst++ = trc[1]->trc.fun_from_linear (trc[1], *fsrc++) * alpha;
-       *fdst++ = trc[2]->trc.fun_from_linear (trc[2], *fsrc++) * alpha;
+       *fdst++ = babl_trc_from_linear (trc[0], *fsrc++) * alpha;
+       *fdst++ = babl_trc_from_linear (trc[1], *fsrc++) * alpha;
+       *fdst++ = babl_trc_from_linear (trc[2], *fsrc++) * alpha;
        *fdst++ = *fsrc++;
      }
   return samples;
@@ -78,17 +78,17 @@ conv_rgbAF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src,
          }
        else if (alpha >= 1.0)
          {
-           *fdst++ = trc[0]->trc.fun_from_linear (trc[0], *fsrc++) * alpha;
-           *fdst++ = trc[1]->trc.fun_from_linear (trc[1], *fsrc++) * alpha;
-           *fdst++ = trc[2]->trc.fun_from_linear (trc[2], *fsrc++) * alpha;
+           *fdst++ = babl_trc_from_linear (trc[0], *fsrc++) * alpha;
+           *fdst++ = babl_trc_from_linear (trc[1], *fsrc++) * alpha;
+           *fdst++ = babl_trc_from_linear (trc[2], *fsrc++) * alpha;
            *fdst++ = *fsrc++;
          }
        else
          {
            float alpha_recip = 1.0 / alpha;
-           *fdst++ = trc[0]->trc.fun_from_linear (trc[0], *fsrc++ * alpha_recip) * alpha;
-           *fdst++ = trc[1]->trc.fun_from_linear (trc[1], *fsrc++ * alpha_recip) * alpha;
-           *fdst++ = trc[2]->trc.fun_from_linear (trc[2], *fsrc++ * alpha_recip) * alpha;
+           *fdst++ = babl_trc_from_linear (trc[0], *fsrc++ * alpha_recip) * alpha;
+           *fdst++ = babl_trc_from_linear (trc[1], *fsrc++ * alpha_recip) * alpha;
+           *fdst++ = babl_trc_from_linear (trc[2], *fsrc++ * alpha_recip) * alpha;
            *fdst++ = *fsrc++;
          }
      }
@@ -109,9 +109,9 @@ conv_rgbaF_linear_rgbaF_gamma (const Babl *conversion,unsigned char *src,
 
    while (n--)
      {
-       *fdst++ = trc[0]->trc.fun_from_linear (trc[0], *fsrc++);
-       *fdst++ = trc[1]->trc.fun_from_linear (trc[1], *fsrc++);
-       *fdst++ = trc[2]->trc.fun_from_linear (trc[2], *fsrc++);
+       *fdst++ = babl_trc_from_linear (trc[0], *fsrc++);
+       *fdst++ = babl_trc_from_linear (trc[1], *fsrc++);
+       *fdst++ = babl_trc_from_linear (trc[2], *fsrc++);
        *fdst++ = *fsrc++;
      }
   return samples;
@@ -130,9 +130,9 @@ conv_rgbF_linear_rgbF_gamma (const Babl *conversion,unsigned char *src,
 
    while (n--)
      {
-       *fdst++ = trc[0]->trc.fun_from_linear (trc[0], *fsrc++);
-       *fdst++ = trc[1]->trc.fun_from_linear (trc[1], *fsrc++);
-       *fdst++ = trc[2]->trc.fun_from_linear (trc[2], *fsrc++);
+       *fdst++ = babl_trc_from_linear (trc[0], *fsrc++);
+       *fdst++ = babl_trc_from_linear (trc[1], *fsrc++);
+       *fdst++ = babl_trc_from_linear (trc[2], *fsrc++);
      }
   return samples;
 }
@@ -151,9 +151,9 @@ conv_rgbaF_gamma_rgbaF_linear (const Babl *conversion,unsigned char *src,
 
    while (n--)
      {
-       *fdst++ = trc[0]->trc.fun_to_linear (trc[0], *fsrc++);
-       *fdst++ = trc[1]->trc.fun_to_linear (trc[1], *fsrc++);
-       *fdst++ = trc[2]->trc.fun_to_linear (trc[2], *fsrc++);
+       *fdst++ = babl_trc_to_linear (trc[0], *fsrc++);
+       *fdst++ = babl_trc_to_linear (trc[1], *fsrc++);
+       *fdst++ = babl_trc_to_linear (trc[2], *fsrc++);
        *fdst++ = *fsrc++;
      }
   return samples;
@@ -172,9 +172,9 @@ conv_rgbF_gamma_rgbF_linear (const Babl *conversion,unsigned char *src,
 
    while (n--)
      {
-       *fdst++ = trc[0]->trc.fun_to_linear (trc[0], *fsrc++);
-       *fdst++ = trc[1]->trc.fun_to_linear (trc[1], *fsrc++);
-       *fdst++ = trc[2]->trc.fun_to_linear (trc[2], *fsrc++);
+       *fdst++ = babl_trc_to_linear (trc[0], *fsrc++);
+       *fdst++ = babl_trc_to_linear (trc[1], *fsrc++);
+       *fdst++ = babl_trc_to_linear (trc[2], *fsrc++);
      }
   return samples;
 }
diff --git a/extensions/gimp-8bit.c b/extensions/gimp-8bit.c
index 3b66364..de0099a 100644
--- a/extensions/gimp-8bit.c
+++ b/extensions/gimp-8bit.c
@@ -63,7 +63,7 @@ tables_init (const Babl *space)
   for (i = 0; i < 1 << 8; i++)
     {
       double value = i / 255.0;
-      lut_gamma_2_2[j][i] = _babl_trc_to_linear (space->space.trc[0], value);
+      lut_gamma_2_2[j][i] = babl_trc_to_linear (space->space.trc[0], value);
     }
 
   return j;


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