[babl] Add the BablConversion as first argument of all conversions



commit e604fd0385006d63af449c1961756c1f100b2c13
Author: Øyvind Kolås <pippin gimp org>
Date:   Fri Aug 18 22:46:26 2017 +0200

    Add the BablConversion as first argument of all conversions
    
    This is neccesary to be able to access state of source/destination from within
    registered conversions.

 babl/babl-conversion.c       |   29 +++++----
 babl/babl-conversion.h       |   23 ++++---
 babl/babl-core.c             |   18 +++---
 babl/babl-internal.h         |    9 +++
 babl/babl-palette.c          |   34 +++++++----
 babl/babl-types.h            |    7 ++-
 babl/base/model-gray.c       |   37 +++++++----
 babl/base/model-rgb.c        |   35 +++++++----
 babl/base/model-ycbcr.c      |   12 +++-
 babl/base/type-float.c       |    6 +-
 babl/base/type-half.c        |   14 +++--
 babl/base/type-u15.c         |   33 ++++++-----
 babl/base/type-u16.c         |   14 +++--
 babl/base/type-u32.c         |   14 +++--
 babl/base/type-u8.c          |   14 +++--
 extensions/16bit.c           |    4 +-
 extensions/CIE.c             |   52 ++++++++++------
 extensions/HCY.c             |   16 +++---
 extensions/HSL.c             |   16 +++---
 extensions/HSV.c             |   16 +++---
 extensions/cairo.c           |   30 +++++-----
 extensions/fast-float.c      |   20 +++---
 extensions/float-half.c      |   28 ++++----
 extensions/float.c           |   12 ++--
 extensions/gegl-fixups.c     |   32 +++++-----
 extensions/gggl-lies.c       |  128 ++++++++++++++++++++--------------------
 extensions/gggl-table-lies.c |   56 +++++++++---------
 extensions/gggl-table.c      |   60 +++++++++---------
 extensions/gggl.c            |  136 +++++++++++++++++++++---------------------
 extensions/gimp-8bit.c       |   56 +++++++++---------
 extensions/grey.c            |    6 +-
 extensions/naive-CMYK.c      |   16 +++---
 extensions/simple.c          |   78 ++++++++++++------------
 extensions/sse-half.c        |   28 ++++----
 extensions/sse2-float.c      |   30 +++++-----
 extensions/sse2-int16.c      |    4 +-
 extensions/sse2-int8.c       |   18 +++---
 extensions/sse4-int8.c       |   14 ++--
 extensions/two-table.c       |   14 ++--
 extensions/ycbcr.c           |    8 +-
 40 files changed, 628 insertions(+), 549 deletions(-)
---
diff --git a/babl/babl-conversion.c b/babl/babl-conversion.c
index dbdce50..766e6c4 100644
--- a/babl/babl-conversion.c
+++ b/babl/babl-conversion.c
@@ -26,15 +26,15 @@
 #include "babl-db.h"
 #include "babl-ref-pixels.h"
 
-static Babl *
-conversion_new (const char    *name,
-                int            id,
-                Babl          *source,
-                Babl          *destination,
-                BablFuncLinear linear,
-                BablFuncPlane  plane,
-                BablFuncPlanar planar,
-                void          *user_data)
+Babl *
+_conversion_new (const char    *name,
+                 int            id,
+                 Babl          *source,
+                 Babl          *destination,
+                 BablFuncLinear linear,
+                 BablFuncPlane  plane,
+                 BablFuncPlanar planar,
+                 void          *user_data)
 {
   Babl *babl = NULL;
 
@@ -281,7 +281,7 @@ babl_conversion_new (const void *first_arg,
       babl = babl_db_exist (db, id, name);
     }
 
-  babl = conversion_new (name, id, source, destination, linear, plane, planar, 
+  babl = _conversion_new (name, id, source, destination, linear, plane, planar, 
                          user_data);
 
   /* Since there is not an already registered instance by the required
@@ -300,7 +300,8 @@ babl_conversion_linear_process (BablConversion *conversion,
                                 void           *destination,
                                 long            n)
 {
-  return conversion->function.linear (source, destination, n, conversion->data);
+  return conversion->function.linear ((void*)conversion,
+                                   source, destination, n, conversion->data);
 }
 
 static long
@@ -311,7 +312,8 @@ babl_conversion_plane_process (BablConversion *conversion,
                                int             dst_pitch,
                                long            n)
 {
-  return conversion->function.plane (source, destination,
+  return conversion->function.plane ((void*)conversion,
+                                     source, destination,
                                      src_pitch, dst_pitch,
                                      n,
                                      conversion->data);
@@ -334,7 +336,8 @@ babl_conversion_planar_process (BablConversion *conversion,
   memcpy (src_data, source->data, sizeof (void *) * source->components);
   memcpy (dst_data, destination->data, sizeof (void *) * destination->components);
 
-  return conversion->function.planar (source->components,
+  return conversion->function.planar ((void*)conversion,
+                                      source->components,
                                       src_data,
                                       source->pitch,
                                       destination->components,
diff --git a/babl/babl-conversion.h b/babl/babl-conversion.h
index 902beb5..ac7ade6 100644
--- a/babl/babl-conversion.h
+++ b/babl/babl-conversion.h
@@ -23,19 +23,22 @@ BABL_CLASS_DECLARE (conversion);
 
 const Babl * babl_conversion (const char *name);
 
+typedef struct _BablConversion BablConversion;
+
+
 /* Signature of functions registered for reference type
  * conversions,
  */
-typedef long (*BablFuncPlane)     (const char  *src,
-                                   char        *dst,
-                                   int          src_pitch,
-                                   int          dst_pitch,
-                                   long         n,
-                                   void        *user_data);
-
+typedef long (*BablFuncPlane)     (BablConversion *conversion,
+                                   const char     *src,
+                                   char           *dst,
+                                   int             src_pitch,
+                                   int             dst_pitch,
+                                   long            n,
+                                   void           *user_data);
 
-typedef struct
-BablConversion {
+struct
+_BablConversion {
   BablInstance           instance;
   const Babl            *source;
   const Babl            *destination;
@@ -50,6 +53,6 @@ BablConversion {
   void                  *data;  /* user data */
   int                    processings;
   long                   pixels;
-} BablConversion;
+};
 
 #endif
diff --git a/babl/babl-core.c b/babl/babl-core.c
index 00e43e8..d591d73 100644
--- a/babl/babl-core.c
+++ b/babl/babl-core.c
@@ -22,11 +22,12 @@
 #include "util.h"
 
 static long
-convert_double_double (char *src,
-                       char *dst,
-                       int   src_pitch,
-                       int   dst_pitch,
-                       long  n)
+convert_double_double (const Babl *babl,
+                       char       *src,
+                       char       *dst,
+                       int         src_pitch,
+                       int         dst_pitch,
+                       long        n)
 {
   if (src_pitch == 64 &&
       dst_pitch == 64)
@@ -77,9 +78,10 @@ convert_double_double (char *src,
 
  */
 static long
-rgba_to_rgba (char *src,
-              char *dst,
-              long  n)
+rgba_to_rgba (const Babl *babl,
+              char       *src,
+              char       *dst,
+              long        n)
 {
   memcpy (dst, src, n * sizeof (double) * 4);
   return n;
diff --git a/babl/babl-internal.h b/babl/babl-internal.h
index 78f2b56..c193998 100644
--- a/babl/babl-internal.h
+++ b/babl/babl-internal.h
@@ -319,6 +319,15 @@ static inline double babl_parse_double (const char *str)
   return result;
 }
 
+Babl *
+_conversion_new (const char    *name,
+                 int            id,
+                 Babl          *source,
+                 Babl          *destination,
+                 BablFuncLinear linear,
+                 BablFuncPlane  plane,
+                 BablFuncPlanar planar,
+                 void          *user_data);
 
 double _babl_legal_error (void);
 void babl_init_db (void);
diff --git a/babl/babl-palette.c b/babl/babl-palette.c
index ad90608..7284d6b 100644
--- a/babl/babl-palette.c
+++ b/babl/babl-palette.c
@@ -177,7 +177,8 @@ static BablPalette *default_palette (void)
 }
 
 static long
-rgba_to_pal (char *src,
+rgba_to_pal (Babl *conversion,
+             char *src,
              char *dst,
              long  n,
              void *dst_model_data)
@@ -218,7 +219,8 @@ rgba_to_pal (char *src,
 }
 
 static long
-rgba_to_pala (char *src,
+rgba_to_pala (Babl *conversion,
+              char *src,
               char *dst,
               long  n,
               void *dst_model_data)
@@ -264,7 +266,8 @@ rgba_to_pala (char *src,
 }
 
 static long
-pal_to_rgba (char *src,
+pal_to_rgba (Babl *conversion,
+             char *src,
              char *dst,
              long  n,
              void *src_model_data)
@@ -290,7 +293,8 @@ pal_to_rgba (char *src,
 }
 
 static long
-pala_to_rgba (char *src,
+pala_to_rgba (Babl *conversion,
+              char *src,
               char *dst,
               long  n,
               void *src_model_data)
@@ -320,10 +324,11 @@ pala_to_rgba (char *src,
 }
 
 static long
-rgba_u8_to_pal (unsigned char *src,
+rgba_u8_to_pal (Babl          *conversion,
+                unsigned char *src,
                 unsigned char *dst,
-                long  n,
-                void *src_model_data)
+                long           n,
+                void          *src_model_data)
 {
   BablPalette **palptr = src_model_data;
   BablPalette *pal;
@@ -342,7 +347,8 @@ rgba_u8_to_pal (unsigned char *src,
 }
 
 static long
-rgba_u8_to_pal_a (char *src,
+rgba_u8_to_pal_a (Babl *conversion,
+                  char *src,
                   char *dst,
                   long  n,
                   void *src_model_data)
@@ -364,7 +370,8 @@ rgba_u8_to_pal_a (char *src,
 }
 
 static long
-pal_u8_to_rgba_u8 (char *src,
+pal_u8_to_rgba_u8 (Babl *conversion,
+                   char *src,
                    char *dst,
                    long  n,
                    void *src_model_data)
@@ -392,7 +399,8 @@ pal_u8_to_rgba_u8 (char *src,
 }
 
 static long
-pala_u8_to_rgba_u8 (char *src,
+pala_u8_to_rgba_u8 (Babl *conversion,
+                    char *src,
                     char *dst,
                     long  n,
                     void *src_model_data)
@@ -424,7 +432,8 @@ pala_u8_to_rgba_u8 (char *src,
 #include "base/util.h"
 
 static inline long
-conv_pal8_pala8 (unsigned char *src, unsigned char *dst, long samples)
+conv_pal8_pala8 (Babl *conversion,
+                 unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -439,7 +448,8 @@ conv_pal8_pala8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static inline long
-conv_pala8_pal8 (unsigned char *src, unsigned char *dst, long samples)
+conv_pala8_pal8 (Babl *conversion,
+                 unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
diff --git a/babl/babl-types.h b/babl/babl-types.h
index 252a382..e4e5a85 100644
--- a/babl/babl-types.h
+++ b/babl/babl-types.h
@@ -33,16 +33,19 @@
  **/
 typedef union _Babl Babl;
 
+
 /* Conversion function between linear data of a either a data types or
  * color formats.
  */
-typedef long (*BablFuncLinear)    (const char  *src,
+typedef long (*BablFuncLinear)    (const Babl *conversion,
+                                   const char  *src,
                                    char  *dst,
                                    long   n,
                                    void  *user_data);
 
 /* TypePlanar,ModelPlanar and FormatPlanar */
-typedef long (*BablFuncPlanar)    (int    src_bands,
+typedef long (*BablFuncPlanar)    (const Babl *conversion,
+                                   int    src_bands,
                                    const char  *src[],
                                    int    src_pitch[],
                                    int    dst_bands,
diff --git a/babl/base/model-gray.c b/babl/base/model-gray.c
index 239333e..d2e7d68 100644
--- a/babl/base/model-gray.c
+++ b/babl/base/model-gray.c
@@ -110,7 +110,8 @@ models (void)
 
 
 static long
-rgba_to_graya (char *src,
+rgba_to_graya (Babl *conversion,
+               char *src,
                char *dst,
                long  n)
 {
@@ -138,7 +139,8 @@ rgba_to_graya (char *src,
 }
 
 static long
-rgba_to_gray (char *src,
+rgba_to_gray (Babl *conversion,
+              char *src,
               char *dst,
               long  n)
 {
@@ -165,7 +167,8 @@ rgba_to_gray (char *src,
 
 
 static long
-rgb_to_gray_2_2 (int    src_bands,
+rgb_to_gray_2_2 (Babl  *conversion,
+                 int    src_bands,
                  char **src,
                  int   *src_pitch,
                  int    dst_bands,
@@ -202,7 +205,8 @@ rgb_to_gray_2_2 (int    src_bands,
 
 
 static long
-gray_2_2_to_rgb (int    src_bands,
+gray_2_2_to_rgb (Babl  *conversion,
+                 int    src_bands,
                  char **src,
                  int   *src_pitch,
                  int    dst_bands,
@@ -241,7 +245,8 @@ gray_2_2_to_rgb (int    src_bands,
 
 
 static long
-graya_to_rgba (char *src,
+graya_to_rgba (Babl *conversion,
+               char *src,
                char *dst,
                long  n)
 {
@@ -270,7 +275,8 @@ graya_to_rgba (char *src,
 
 
 static long
-gray_to_rgba (char *src,
+gray_to_rgba (Babl *conversion,
+              char *src,
               char *dst,
               long  n)
 {
@@ -296,7 +302,8 @@ gray_to_rgba (char *src,
 }
 
 static long
-gray_alpha_premultiplied_to_rgba (int    src_bands,
+gray_alpha_premultiplied_to_rgba (Babl  *conversion,
+                                  int    src_bands,
                                   char **src,
                                   int   *src_pitch,
                                   int    dst_bands,
@@ -333,7 +340,8 @@ gray_alpha_premultiplied_to_rgba (int    src_bands,
 
 
 static long
-rgba_to_gray_alpha_premultiplied (int    src_bands,
+rgba_to_gray_alpha_premultiplied (Babl  *conversion,
+                                  int    src_bands,
                                   char **src,
                                   int   *src_pitch,
                                   int    dst_bands,
@@ -367,7 +375,8 @@ rgba_to_gray_alpha_premultiplied (int    src_bands,
 }
 
 static long
-non_premultiplied_to_premultiplied (int    src_bands,
+non_premultiplied_to_premultiplied (Babl  *conversion,
+                                    int    src_bands,
                                     char **src,
                                     int   *src_pitch,
                                     int    dst_bands,
@@ -395,7 +404,8 @@ non_premultiplied_to_premultiplied (int    src_bands,
 }
 
 static long
-premultiplied_to_non_premultiplied (int    src_bands,
+premultiplied_to_non_premultiplied (Babl  *conversion,
+                                    int    src_bands,
                                     char **src,
                                     int   *src_pitch,
                                     int    dst_bands,
@@ -430,7 +440,8 @@ premultiplied_to_non_premultiplied (int    src_bands,
 }
 
 static long
-rgba2gray_gamma_2_2_premultiplied (char *src,
+rgba2gray_gamma_2_2_premultiplied (Babl *conversion,
+                                   char *src,
                                    char *dst,
                                    long  n)
 {
@@ -458,9 +469,9 @@ rgba2gray_gamma_2_2_premultiplied (char *src,
   return n;
 }
 
-
 static long
-gray_gamma_2_2_premultiplied2rgba (char *src,
+gray_gamma_2_2_premultiplied2rgba (Babl *conversion,
+                                   char *src,
                                    char *dst,
                                    long  n)
 {
diff --git a/babl/base/model-rgb.c b/babl/base/model-rgb.c
index 4ba6f7d..69c3b53 100644
--- a/babl/base/model-rgb.c
+++ b/babl/base/model-rgb.c
@@ -151,7 +151,8 @@ models (void)
 }
 
 static long
-copy_strip_1 (int    src_bands,
+copy_strip_1 (BablConversion *conversion,
+              int    src_bands,
               char **src,
               int   *src_pitch,
               int    dst_bands,
@@ -182,7 +183,8 @@ copy_strip_1 (int    src_bands,
 }
 
 static long
-g3_gamma_2_2 (int    src_bands,
+g3_gamma_2_2 (BablConversion *conversion,
+              int    src_bands,
               char **src,
               int   *src_pitch,
               int    dst_bands,
@@ -208,7 +210,8 @@ g3_gamma_2_2 (int    src_bands,
 
 
 static long
-g3_inv_gamma_2_2 (int    src_bands,
+g3_inv_gamma_2_2 (BablConversion *conversion,
+                  int    src_bands,
                   char **src,
                   int   *src_pitch,
                   int    dst_bands,
@@ -239,7 +242,8 @@ g3_inv_gamma_2_2 (int    src_bands,
 }
 
 static long
-non_premultiplied_to_premultiplied (int    src_bands,
+non_premultiplied_to_premultiplied (BablConversion *conversion,
+                                    int    src_bands,
                                     char **src,
                                     int   *src_pitch,
                                     int    dst_bands,
@@ -268,7 +272,8 @@ non_premultiplied_to_premultiplied (int    src_bands,
 }
 
 static long
-premultiplied_to_non_premultiplied (int    src_bands,
+premultiplied_to_non_premultiplied (BablConversion *conversion,
+                                    int    src_bands,
                                     char **src,
                                     int   *src_pitch,
                                     int    dst_bands,
@@ -306,7 +311,8 @@ premultiplied_to_non_premultiplied (int    src_bands,
 
 
 static long
-rgba2rgba_gamma_2_2_premultiplied (char *src,
+rgba2rgba_gamma_2_2_premultiplied (BablConversion *conversion,
+                                   char *src,
                                    char *dst,
                                    long  samples)
 {
@@ -327,9 +333,10 @@ rgba2rgba_gamma_2_2_premultiplied (char *src,
 
 
 static long
-rgba_gamma_2_2_premultiplied2rgba (char *src,
-                                   char *dst,
-                                   long  samples)
+rgba_gamma_2_2_premultiplied2rgba (BablConversion *conversion,
+                                   char           *src,
+                                   char           *dst,
+                                   long            samples)
 {
   long n = samples;
 
@@ -358,9 +365,10 @@ rgba_gamma_2_2_premultiplied2rgba (char *src,
 
 
 static long
-rgba2rgba_gamma_2_2 (char *src,
-                     char *dst,
-                     long  samples)
+rgba2rgba_gamma_2_2 (BablConversion *conversion,
+                     char           *src,
+                     char           *dst,
+                     long            samples)
 {
   long n = samples;
 
@@ -379,7 +387,8 @@ rgba2rgba_gamma_2_2 (char *src,
 
 
 static long
-rgba_gamma_2_22rgba (char *src,
+rgba_gamma_2_22rgba (BablConversion *conversion,
+                     char *src,
                      char *dst,
                      long  samples)
 {
diff --git a/babl/base/model-ycbcr.c b/babl/base/model-ycbcr.c
index 6a6370e..c6de014 100644
--- a/babl/base/model-ycbcr.c
+++ b/babl/base/model-ycbcr.c
@@ -78,7 +78,8 @@ models (void)
 }
 
 static long
-rgba_to_ycbcra (char *src,
+rgba_to_ycbcra (BablConversion *conversion,
+                char *src,
                 char *dst,
                 long  n)
 {
@@ -112,7 +113,8 @@ rgba_to_ycbcra (char *src,
 
 
 static long
-rgba_to_ycbcr (char *src,
+rgba_to_ycbcr (BablConversion *conversion,
+               char *src,
                char *dst,
                long  n)
 {
@@ -143,7 +145,8 @@ rgba_to_ycbcr (char *src,
 }
 
 static long
-ycbcra_to_rgba (char *src,
+ycbcra_to_rgba (BablConversion *conversion,
+                char *src,
                 char *dst,
                 long  n)
 {
@@ -177,7 +180,8 @@ ycbcra_to_rgba (char *src,
 
 
 static long
-ycbcr_to_rgba (char *src,
+ycbcr_to_rgba (BablConversion *conversion,
+               char *src,
                char *dst,
                long  n)
 {
diff --git a/babl/base/type-float.c b/babl/base/type-float.c
index ce7e407..8c62021 100644
--- a/babl/base/type-float.c
+++ b/babl/base/type-float.c
@@ -26,7 +26,8 @@
 #include "babl-base.h"
 
 static long
-convert_double_float (char *src,
+convert_double_float (BablConversion *conversion,
+                      char *src,
                       char *dst,
                       int   src_pitch,
                       int   dst_pitch,
@@ -42,7 +43,8 @@ convert_double_float (char *src,
 }
 
 static long
-convert_float_double (char *src,
+convert_float_double (BablConversion *conversion,
+                      char *src,
                       char *dst,
                       int   src_pitch,
                       int   dst_pitch,
diff --git a/babl/base/type-half.c b/babl/base/type-half.c
index 61a63ca..64fd15d 100644
--- a/babl/base/type-half.c
+++ b/babl/base/type-half.c
@@ -184,7 +184,8 @@ static void halfp2doubles(void *target, void *source, long numel)
 }
 
 static long
-convert_double_half (char *src,
+convert_double_half (BablConversion *conversion,
+                     char *src,
                      char *dst,
                      int   src_pitch,
                      int   dst_pitch,
@@ -200,11 +201,12 @@ convert_double_half (char *src,
 }
 
 static long
-convert_half_double (char *src,
-                      char *dst,
-                      int   src_pitch,
-                      int   dst_pitch,
-                      long  n)
+convert_half_double (BablConversion *conversion,
+                     char *src,
+                     char *dst,
+                     int   src_pitch,
+                     int   dst_pitch,
+                     long  n)
 {
   while (n--)
     {
diff --git a/babl/base/type-u15.c b/babl/base/type-u15.c
index 47e3878..ee188e8 100644
--- a/babl/base/type-u15.c
+++ b/babl/base/type-u15.c
@@ -27,15 +27,16 @@
 
 
 static inline long
-convert_double_u15_scaled (double   min_val,
-                           double   max_val,
-                           uint16_t min,
-                           uint16_t max,
-                           char    *src,
-                           char    *dst,
-                           int      src_pitch,
-                           int      dst_pitch,
-                           long     n)
+convert_double_u15_scaled (BablConversion *conversion,
+                           double          min_val,
+                           double          max_val,
+                           uint16_t        min,
+                           uint16_t        max,
+                           char           *src,
+                           char           *dst,
+                           int             src_pitch,
+                           int             dst_pitch,
+                           long            n)
 {
   while (n--)
     {
@@ -57,8 +58,9 @@ convert_double_u15_scaled (double   min_val,
 }
 
 static inline long
-convert_u15_double_scaled (double   min_val,
-                           double   max_val,
+convert_u15_double_scaled (BablConversion *conversion,
+                           double          min_val,
+                           double          max_val,
                            uint16_t min,
                            uint16_t max,
                            char    *src,
@@ -88,23 +90,24 @@ convert_u15_double_scaled (double   min_val,
 
 #define MAKE_CONVERSIONS(name, min_val, max_val, min, max)      \
   static long \
-  convert_ ## name ## _double (void *src, \
+  convert_ ## name ## _double (BablConversion *conversion, \
+                               void *src, \
                                void *dst, \
                                int src_pitch, \
                                int dst_pitch, \
                                long n)                               \
   { \
-    return convert_u15_double_scaled (min_val, max_val, min, max, \
+    return convert_u15_double_scaled (conversion, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }                                                               \
   static long \
-  convert_double_ ## name (void *src, \
+  convert_double_ ## name (BablConversion *conversion, void *src, \
                            void *dst, \
                            int src_pitch, \
                            int dst_pitch, \
                            long n)                                 \
   { \
-    return convert_double_u15_scaled (min_val, max_val, min, max, \
+    return convert_double_u15_scaled (conversion, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }
 
diff --git a/babl/base/type-u16.c b/babl/base/type-u16.c
index 9fcad8b..697f1da 100644
--- a/babl/base/type-u16.c
+++ b/babl/base/type-u16.c
@@ -27,7 +27,8 @@
 
 
 static inline long
-convert_double_u16_scaled (double   min_val,
+convert_double_u16_scaled (BablConversion *conversion,
+                           double   min_val,
                            double   max_val,
                            uint16_t min,
                            uint16_t max,
@@ -57,7 +58,8 @@ convert_double_u16_scaled (double   min_val,
 }
 
 static inline long
-convert_u16_double_scaled (double   min_val,
+convert_u16_double_scaled (BablConversion *conversion,
+                           double   min_val,
                            double   max_val,
                            uint16_t min,
                            uint16_t max,
@@ -88,23 +90,23 @@ convert_u16_double_scaled (double   min_val,
 
 #define MAKE_CONVERSIONS(name, min_val, max_val, min, max)      \
   static long \
-  convert_ ## name ## _double (void *src, \
+  convert_ ## name ## _double (BablConversion *c, void *src, \
                                void *dst, \
                                int src_pitch, \
                                int dst_pitch, \
                                long n)                               \
   { \
-    return convert_u16_double_scaled (min_val, max_val, min, max, \
+    return convert_u16_double_scaled (c, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }                                                               \
   static long \
-  convert_double_ ## name (void *src, \
+  convert_double_ ## name (BablConversion *c, void *src, \
                            void *dst, \
                            int src_pitch, \
                            int dst_pitch, \
                            long n)                                 \
   { \
-    return convert_double_u16_scaled (min_val, max_val, min, max, \
+    return convert_double_u16_scaled (c, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }
 
diff --git a/babl/base/type-u32.c b/babl/base/type-u32.c
index fc38a01..b934dbe 100644
--- a/babl/base/type-u32.c
+++ b/babl/base/type-u32.c
@@ -26,7 +26,8 @@
 #include "babl-base.h"
 
 static inline long
-convert_double_u32_scaled (double   min_val,
+convert_double_u32_scaled (BablConversion *c,
+                           double   min_val,
                            double   max_val,
                            uint32_t min,
                            uint32_t max,
@@ -56,7 +57,8 @@ convert_double_u32_scaled (double   min_val,
 }
 
 static inline long
-convert_u32_double_scaled (double   min_val,
+convert_u32_double_scaled (BablConversion *c,
+                           double   min_val,
                            double   max_val,
                            uint32_t min,
                            uint32_t max,
@@ -87,23 +89,23 @@ convert_u32_double_scaled (double   min_val,
 
 #define MAKE_CONVERSIONS(name, min_val, max_val, min, max)      \
   static long \
-  convert_ ## name ## _double (void *src, \
+  convert_ ## name ## _double (BablConversion *c, void *src, \
                                void *dst, \
                                int src_pitch, \
                                int dst_pitch, \
                                long n)                               \
   { \
-    return convert_u32_double_scaled (min_val, max_val, min, max, \
+    return convert_u32_double_scaled (c, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }                                                               \
   static long \
-  convert_double_ ## name (void *src, \
+  convert_double_ ## name (BablConversion *c, void *src, \
                            void *dst, \
                            int src_pitch, \
                            int dst_pitch, \
                            long n)                                 \
   { \
-    return convert_double_u32_scaled (min_val, max_val, min, max, \
+    return convert_double_u32_scaled (c, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }
 
diff --git a/babl/base/type-u8.c b/babl/base/type-u8.c
index 9a67a0e..86d889e 100644
--- a/babl/base/type-u8.c
+++ b/babl/base/type-u8.c
@@ -26,7 +26,8 @@
 
 #include <math.h>
 static inline long
-convert_double_u8_scaled (double        min_val,
+convert_double_u8_scaled (BablConversion *c,
+                          double        min_val,
                           double        max_val,
                           unsigned char min,
                           unsigned char max,
@@ -56,7 +57,8 @@ convert_double_u8_scaled (double        min_val,
 }
 
 static inline long
-convert_u8_double_scaled (double        min_val,
+convert_u8_double_scaled (BablConversion *c,
+                          double        min_val,
                           double        max_val,
                           unsigned char min,
                           unsigned char max,
@@ -88,23 +90,23 @@ convert_u8_double_scaled (double        min_val,
 
 #define MAKE_CONVERSIONS(name, min_val, max_val, min, max)      \
   static long \
-  convert_ ## name ## _double (void *src, \
+  convert_ ## name ## _double (BablConversion *c, void *src, \
                                void *dst, \
                                int src_pitch, \
                                int dst_pitch, \
                                long n)                               \
   { \
-    return convert_u8_double_scaled (min_val, max_val, min, max, \
+    return convert_u8_double_scaled (c, min_val, max_val, min, max, \
                                      src, dst, src_pitch, dst_pitch, n); \
   }                                                               \
   static long \
-  convert_double_ ## name (void *src, \
+  convert_double_ ## name (BablConversion *c, void *src, \
                            void *dst, \
                            int src_pitch, \
                            int dst_pitch, \
                            long n)                                 \
   { \
-    return convert_double_u8_scaled (min_val, max_val, min, max, \
+    return convert_double_u8_scaled (c, min_val, max_val, min, max, \
                                      src, dst, src_pitch, dst_pitch, n); \
   }
 
diff --git a/extensions/16bit.c b/extensions/16bit.c
index 96701ef..9071fad 100644
--- a/extensions/16bit.c
+++ b/extensions/16bit.c
@@ -26,7 +26,7 @@
 #include "extensions/util.h"
 
 static inline long
-conv_rgbu16_rgbau16 (unsigned char *src, 
+conv_rgbu16_rgbau16 (const Babl *conversion,unsigned char *src, 
                      unsigned char *dst, 
                      long           samples)
 
@@ -48,7 +48,7 @@ conv_rgbu16_rgbau16 (unsigned char *src,
 }
 
 static inline long
-conv_yu16_yau16 (unsigned char *src, 
+conv_yu16_yau16 (const Babl *conversion,unsigned char *src, 
                  unsigned char *dst, 
                  long           samples)
 
diff --git a/extensions/CIE.c b/extensions/CIE.c
index 040c03c..61c2bce 100644
--- a/extensions/CIE.c
+++ b/extensions/CIE.c
@@ -300,7 +300,8 @@ LAB_to_XYZ (double L,
 }
 
 static long
-rgba_to_lab (char *src,
+rgba_to_lab (Babl *babl,
+             char *src,
              char *dst,
              long  n)
 {
@@ -328,7 +329,8 @@ rgba_to_lab (char *src,
 }
 
 static long
-lab_to_rgba (char *src,
+lab_to_rgba (Babl *babl,
+             char *src,
              char *dst,
              long  n)
 {
@@ -357,7 +359,8 @@ lab_to_rgba (char *src,
 }
 
 static long
-rgba_to_laba (char *src,
+rgba_to_laba (Babl *babl,
+              char *src,
               char *dst,
               long  n)
 {
@@ -387,7 +390,8 @@ rgba_to_laba (char *src,
 }
 
 static long
-laba_to_rgba (char *src,
+laba_to_rgba (Babl *babl,
+              char *src,
               char *dst,
               long  n)
 {
@@ -441,7 +445,8 @@ ab_to_CHab (double  a,
 }
 
 static long
-rgba_to_lchab (char *src,
+rgba_to_lchab (Babl *babl,
+               char *src,
                char *dst,
                long  n)
 {
@@ -472,7 +477,8 @@ rgba_to_lchab (char *src,
 }
 
 static long
-lchab_to_rgba (char *src,
+lchab_to_rgba (Babl *babl,
+               char *src,
                char *dst,
                long  n)
 {
@@ -504,7 +510,8 @@ lchab_to_rgba (char *src,
 }
 
 static long
-rgba_to_lchaba (char *src,
+rgba_to_lchaba (Babl *babl,
+                char *src,
                 char *dst,
                 long  n)
 {
@@ -537,7 +544,8 @@ rgba_to_lchaba (char *src,
 }
 
 static long
-lchaba_to_rgba (char *src,
+lchaba_to_rgba (Babl *babl,
+                char *src,
                 char *dst,
                 long  n)
 {
@@ -1143,7 +1151,8 @@ formats (void)
 /******** begin  integer RGB/CIE color space conversions **************/
 
 static inline long
-convert_double_u8_scaled (double        min_val,
+convert_double_u8_scaled (const Babl   *babl,
+                          double        min_val,
                           double        max_val,
                           unsigned char min,
                           unsigned char max,
@@ -1173,7 +1182,8 @@ convert_double_u8_scaled (double        min_val,
 }
 
 static inline long
-convert_u8_double_scaled (double        min_val,
+convert_u8_double_scaled (const Babl   *c,
+                          double        min_val,
                           double        max_val,
                           unsigned char min,
                           unsigned char max,
@@ -1205,23 +1215,23 @@ convert_u8_double_scaled (double        min_val,
 
 #define MAKE_CONVERSIONS(name, min_val, max_val, min, max) \
   static long \
-  convert_ ## name ## _double (char *src, \
+  convert_ ## name ## _double (const Babl *c, char *src, \
                                char *dst, \
                                int src_pitch, \
                                int dst_pitch, \
                                long n)        \
   { \
-    return convert_u8_double_scaled (min_val, max_val, min, max, \
+    return convert_u8_double_scaled (c, min_val, max_val, min, max, \
                                      src, dst, src_pitch, dst_pitch, n); \
   }                                                               \
   static long \
-  convert_double_ ## name (char *src, \
+  convert_double_ ## name (const Babl *c, char *src, \
                            char *dst, \
                            int src_pitch, \
                            int dst_pitch, \
                            long n)        \
   { \
-    return convert_double_u8_scaled (min_val, max_val, min, max, \
+    return convert_double_u8_scaled (c, min_val, max_val, min, max, \
                                      src, dst, src_pitch, dst_pitch, n); \
   }
 
@@ -1283,7 +1293,8 @@ types_u8 (void)
 }
 
 static inline long
-convert_double_u16_scaled (double         min_val,
+convert_double_u16_scaled (const Babl    *babl,
+                           double         min_val,
                            double         max_val,
                            unsigned short min,
                            unsigned short max,
@@ -1313,7 +1324,8 @@ convert_double_u16_scaled (double         min_val,
 }
 
 static inline long
-convert_u16_double_scaled (double         min_val,
+convert_u16_double_scaled (const Babl    *babl,
+                           double         min_val,
                            double         max_val,
                            unsigned short min,
                            unsigned short max,
@@ -1344,23 +1356,23 @@ convert_u16_double_scaled (double         min_val,
 
 #define MAKE_CONVERSIONS(name, min_val, max_val, min, max)      \
   static long \
-  convert_ ## name ## _double (char *src, \
+  convert_ ## name ## _double (const Babl *c, char *src, \
                                char *dst, \
                                int src_pitch, \
                                int dst_pitch, \
                                long n)        \
   { \
-    return convert_u16_double_scaled (min_val, max_val, min, max, \
+    return convert_u16_double_scaled (c, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }                                                               \
   static long \
-  convert_double_ ## name (char *src, \
+  convert_double_ ## name (const Babl *c, char *src, \
                            char *dst, \
                            int src_pitch, \
                            int dst_pitch, \
                            long n)        \
   { \
-    return convert_double_u16_scaled (min_val, max_val, min, max, \
+    return convert_double_u16_scaled (c, min_val, max_val, min, max, \
                                       src, dst, src_pitch, dst_pitch, n); \
   }
 
diff --git a/extensions/HCY.c b/extensions/HCY.c
index 0993842..27a221d 100644
--- a/extensions/HCY.c
+++ b/extensions/HCY.c
@@ -35,19 +35,19 @@
 #define RGB_LUMA_BLUE 0.114 //0.0722
 #define EPSILON 1e-10
 
-static long rgba_to_hcya     (char *src,
+static long rgba_to_hcya     (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
-static long hcya_to_rgba     (char *src,
+static long hcya_to_rgba     (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
-static long rgba_to_hcy      (char *src,
+static long rgba_to_hcy      (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
-static long hcy_to_rgba      (char *src,
+static long hcy_to_rgba      (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
@@ -287,7 +287,7 @@ hcy_to_rgba_step (char *src,
 }
 
 static long
-rgba_to_hcya (char *src,
+rgba_to_hcya (const Babl *conversion,char *src,
               char *dst,
               long  samples)
 {
@@ -309,7 +309,7 @@ rgba_to_hcya (char *src,
 }
 
 static long
-hcya_to_rgba (char *src,
+hcya_to_rgba (const Babl *conversion,char *src,
               char *dst,
               long  samples)
 {
@@ -331,7 +331,7 @@ hcya_to_rgba (char *src,
 }
 
 static long
-rgba_to_hcy (char *src,
+rgba_to_hcy (const Babl *conversion,char *src,
              char *dst,
              long  samples)
 {
@@ -349,7 +349,7 @@ rgba_to_hcy (char *src,
 }
 
 static long
-hcy_to_rgba (char *src,
+hcy_to_rgba (const Babl *conversion,char *src,
              char *dst,
              long  samples)
 {
diff --git a/extensions/HSL.c b/extensions/HSL.c
index 827e028..14d9031 100644
--- a/extensions/HSL.c
+++ b/extensions/HSL.c
@@ -27,16 +27,16 @@
 #define MAX(a,b) ((a < b) ? b : a)
 #define EPSILON  1.0e-10
 
-static long  rgba_to_hsla     (char   *src,
+static long  rgba_to_hsla     (const Babl *conversion,char   *src,
                                char   *dst,
                                long    samples);
-static long  hsla_to_rgba     (char   *src,
+static long  hsla_to_rgba     (const Babl *conversion,char   *src,
                                char   *dst,
                                long    samples);
-static long  rgba_to_hsl      (char   *src,
+static long  rgba_to_hsl      (const Babl *conversion,char   *src,
                                char   *dst,
                                long    samples);
-static long  hsl_to_rgba      (char   *src,
+static long  hsl_to_rgba      (const Babl *conversion,char   *src,
                                char   *dst,
                                long    samples);
 static void  rgb_to_hsl_step  (double *src,
@@ -157,7 +157,7 @@ rgb_to_hsl_step (double* src,
 
 
 static long
-rgba_to_hsla (char *src,
+rgba_to_hsla (const Babl *conversion,char *src,
               char *dst,
               long  samples)
 {
@@ -180,7 +180,7 @@ rgba_to_hsla (char *src,
 
 
 static long
-rgba_to_hsl (char *src,
+rgba_to_hsl (const Babl *conversion,char *src,
              char *dst,
              long  samples)
 {
@@ -244,7 +244,7 @@ hsl_to_rgb_step (double *src,
 
 
 static long
-hsla_to_rgba (char *src,
+hsla_to_rgba (const Babl *conversion,char *src,
               char *dst,
               long  samples)
 {
@@ -267,7 +267,7 @@ hsla_to_rgba (char *src,
 
 
 static long
-hsl_to_rgba (char *src,
+hsl_to_rgba (const Babl *conversion,char *src,
              char *dst,
              long  samples)
 {
diff --git a/extensions/HSV.c b/extensions/HSV.c
index c830a0c..bcab206 100644
--- a/extensions/HSV.c
+++ b/extensions/HSV.c
@@ -32,19 +32,19 @@
 #define MAX(a,b) (a < b) ? b : a;
 #define EPSILON  1.0e-10
 
-static long rgba_to_hsva     (char *src,
+static long rgba_to_hsva     (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
-static long hsva_to_rgba     (char *src,
+static long hsva_to_rgba     (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
-static long rgba_to_hsv      (char *src,
+static long rgba_to_hsv      (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
-static long hsv_to_rgba      (char *src,
+static long hsv_to_rgba      (const Babl *conversion,char *src,
                               char *dst,
                               long  samples);
 
@@ -275,7 +275,7 @@ hsv_to_rgba_step (char *src,
 }
 
 static long
-rgba_to_hsva (char *src,
+rgba_to_hsva (const Babl *conversion,char *src,
               char *dst,
               long  samples)
 {
@@ -297,7 +297,7 @@ rgba_to_hsva (char *src,
 }
 
 static long
-hsva_to_rgba (char *src,
+hsva_to_rgba (const Babl *conversion,char *src,
               char *dst,
               long  samples)
 {
@@ -319,7 +319,7 @@ hsva_to_rgba (char *src,
 }
 
 static long
-rgba_to_hsv (char *src,
+rgba_to_hsv (const Babl *conversion,char *src,
              char *dst,
              long  samples)
 {
@@ -337,7 +337,7 @@ rgba_to_hsv (char *src,
 }
 
 static long
-hsv_to_rgba (char *src,
+hsv_to_rgba (const Babl *conversion,char *src,
              char *dst,
              long  samples)
 {
diff --git a/extensions/cairo.c b/extensions/cairo.c
index 4f82e8d..bd640d9 100644
--- a/extensions/cairo.c
+++ b/extensions/cairo.c
@@ -26,7 +26,7 @@
 int init (void);
 
 static inline long
-conv_rgba8_cairo24_le (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_cairo24_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   uint32_t *srci = (void *)src;
@@ -45,7 +45,7 @@ conv_rgba8_cairo24_le (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static inline long
-conv_rgb8_cairo24_le (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_cairo24_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   while (n--)
@@ -65,7 +65,7 @@ conv_rgb8_cairo24_le (unsigned char *src, unsigned char *dst, long samples)
 
 #if 0
 static inline long
-conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbA8_premul_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   while (n--)
@@ -85,7 +85,7 @@ conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long sampl
 #else
 
 static inline long
-conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbA8_premul_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   uint32_t *srci = (void *)src;
@@ -104,7 +104,7 @@ conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long sampl
 }
 #endif
 
-static long conv_cairo32_rgbA8_premul_le (unsigned char *src, unsigned char *dst, long samples)
+static long conv_cairo32_rgbA8_premul_le (const Babl *conversion,unsigned char *src, unsigned char *dst, 
long samples)
 {
   long n = samples;
   while (n--)
@@ -123,7 +123,7 @@ static long conv_cairo32_rgbA8_premul_le (unsigned char *src, unsigned char *dst
 }
 
 
-static long conv_cairo32_rgbAF_premul_le (unsigned char *src, unsigned char *dst_char, long samples)
+static long conv_cairo32_rgbAF_premul_le (const Babl *conversion,unsigned char *src, unsigned char 
*dst_char, long samples)
 {
   long n = samples;
   float *dst = (void*)dst_char;
@@ -143,7 +143,7 @@ static long conv_cairo32_rgbAF_premul_le (unsigned char *src, unsigned char *dst
 }
 
 static inline long
-conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbA8_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   while (n--)
@@ -163,7 +163,7 @@ conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static inline long
-conv_rgb8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   while (n--)
@@ -184,7 +184,7 @@ conv_rgb8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
 
 
 static inline long
-conv_yA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_yA8_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   while (n--)
@@ -204,7 +204,7 @@ conv_yA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static inline long
-conv_yA16_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_yA16_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   uint16_t *ssrc = (void*) src;
@@ -222,7 +222,7 @@ conv_yA16_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static inline long
-conv_y8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_y8_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   while (n--)
@@ -237,7 +237,7 @@ conv_y8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static inline long
-conv_y16_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+conv_y16_cairo32_le (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
   uint16_t *s16 = (void*)src;
@@ -256,7 +256,7 @@ conv_y16_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbA_gamma_float_cairo32_le (unsigned char *src,
+conv_rgbA_gamma_float_cairo32_le (const Babl *conversion,unsigned char *src,
                                   unsigned char *dst,
                                   long           samples)
 {
@@ -280,7 +280,7 @@ conv_rgbA_gamma_float_cairo32_le (unsigned char *src,
 }
 
 static long
-conv_rgbafloat_cairo32_le (unsigned char *src,
+conv_rgbafloat_cairo32_le (const Babl *conversion,unsigned char *src,
                            unsigned char *dst,
                            long           samples)
 {
@@ -326,7 +326,7 @@ conv_rgbafloat_cairo32_le (unsigned char *src,
 
 
 static long
-conv_yafloat_cairo32_le (unsigned char *src,
+conv_yafloat_cairo32_le (const Babl *conversion,unsigned char *src,
                          unsigned char *dst,
                          long           samples)
 {
diff --git a/extensions/fast-float.c b/extensions/fast-float.c
index 163ffe8..8d5f30b 100644
--- a/extensions/fast-float.c
+++ b/extensions/fast-float.c
@@ -288,7 +288,7 @@ babl_lookup_free (BablLookup *lookup)
 #endif
 
 static INLINE long
-conv_rgbaF_linear_rgbAF_gamma (unsigned char *src, 
+conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -330,7 +330,7 @@ conv_rgbaF_linear_rgbAF_gamma (unsigned char *src,
 
 
 static INLINE long
-conv_rgbaF_linear_rgba8_gamma (unsigned char *src, 
+conv_rgbaF_linear_rgba8_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -367,7 +367,7 @@ conv_rgbaF_linear_rgba8_gamma (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbaF_linear_rgbA8_gamma (unsigned char *src, 
+conv_rgbaF_linear_rgbA8_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -412,7 +412,7 @@ conv_rgbaF_linear_rgbA8_gamma (unsigned char *src,
 }
 
 static INLINE long
-conv_yaF_linear_rgbA8_gamma (unsigned char *src, 
+conv_yaF_linear_rgbA8_gamma (const Babl *conversion,unsigned char *src, 
                              unsigned char *dst, 
                              long           samples)
 {
@@ -453,7 +453,7 @@ conv_yaF_linear_rgbA8_gamma (unsigned char *src,
 
 
 static long
-conv_rgbaF_linear_rgbA8_gamma_cairo (unsigned char *src, 
+conv_rgbaF_linear_rgbA8_gamma_cairo (const Babl *conversion,unsigned char *src, 
                                      unsigned char *dst, 
                                      long           samples)
 {
@@ -498,7 +498,7 @@ conv_rgbaF_linear_rgbA8_gamma_cairo (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbAF_linear_rgbAF_gamma (unsigned char *src, 
+conv_rgbAF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -539,7 +539,7 @@ conv_rgbAF_linear_rgbAF_gamma (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbaF_linear_rgbaF_gamma (unsigned char *src, 
+conv_rgbaF_linear_rgbaF_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -558,7 +558,7 @@ conv_rgbaF_linear_rgbaF_gamma (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbF_linear_rgbF_gamma (unsigned char *src, 
+conv_rgbF_linear_rgbF_gamma (const Babl *conversion,unsigned char *src, 
                              unsigned char *dst, 
                              long           samples)
 {
@@ -577,7 +577,7 @@ conv_rgbF_linear_rgbF_gamma (unsigned char *src,
 
 
 static INLINE long
-conv_rgbaF_gamma_rgbaF_linear (unsigned char *src, 
+conv_rgbaF_gamma_rgbaF_linear (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -596,7 +596,7 @@ conv_rgbaF_gamma_rgbaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbF_gamma_rgbF_linear (unsigned char *src, 
+conv_rgbF_gamma_rgbF_linear (const Babl *conversion,unsigned char *src, 
                              unsigned char *dst, 
                              long           samples)
 {
diff --git a/extensions/float-half.c b/extensions/float-half.c
index ff37625..08b7dfb 100644
--- a/extensions/float-half.c
+++ b/extensions/float-half.c
@@ -178,53 +178,53 @@ static void singles2halfp(void *target, const void *source, long numel)
 }
 
 static inline long
-conv_yHalf_yF (const uint16_t *src, float *dst, long samples)
+conv_yHalf_yF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
   halfp2singles(dst, src, samples);
   return samples;
 }
 
 static long
-conv_yaHalf_yaF (const uint16_t *src, float *dst, long samples)
+conv_yaHalf_yaF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
-  return conv_yHalf_yF (src, dst, samples * 2) / 2;
+  return conv_yHalf_yF (conversion, src, dst, samples * 2) / 2;
 }
 
 static long
-conv_rgbHalf_rgbF (const uint16_t *src, float *dst, long samples)
+conv_rgbHalf_rgbF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
-  return conv_yHalf_yF (src, dst, samples * 3) / 3;
+  return conv_yHalf_yF (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_rgbaHalf_rgbaF (const uint16_t *src, float *dst, long samples)
+conv_rgbaHalf_rgbaF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
-  return conv_yHalf_yF (src, dst, samples * 4) / 4;
+  return conv_yHalf_yF (conversion, src, dst, samples * 4) / 4;
 }
 
 static inline long
-conv_yF_yHalf (const float *src, uint16_t *dst, long samples)
+conv_yF_yHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
   singles2halfp (dst, src, samples);
   return samples;
 }
 
 static long
-conv_yaF_yaHalf (const float *src, uint16_t *dst, long samples)
+conv_yaF_yaHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
-  return conv_yF_yHalf (src, dst, samples * 2) / 2;
+  return conv_yF_yHalf (conversion, src, dst, samples * 2) / 2;
 }
 
 static long
-conv_rgbF_rgbHalf (const float *src, uint16_t *dst, long samples)
+conv_rgbF_rgbHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
-  return conv_yF_yHalf (src, dst, samples * 3) / 3;
+  return conv_yF_yHalf (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_rgbaF_rgbaHalf (const float *src, uint16_t *dst, long samples)
+conv_rgbaF_rgbaHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
-  return conv_yF_yHalf (src, dst, samples * 4) / 4;
+  return conv_yF_yHalf (conversion, src, dst, samples * 4) / 4;
 }
 
 int init (void);
diff --git a/extensions/float.c b/extensions/float.c
index 9460804..4cea8b5 100644
--- a/extensions/float.c
+++ b/extensions/float.c
@@ -30,7 +30,7 @@
 
 
 static INLINE long
-conv_rgbaF_linear_rgbAF_gamma (unsigned char *src, 
+conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -50,7 +50,7 @@ conv_rgbaF_linear_rgbAF_gamma (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbAF_linear_rgbAF_gamma (unsigned char *src, 
+conv_rgbAF_linear_rgbAF_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -89,7 +89,7 @@ conv_rgbAF_linear_rgbAF_gamma (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbaF_linear_rgbaF_gamma (unsigned char *src, 
+conv_rgbaF_linear_rgbaF_gamma (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -108,7 +108,7 @@ conv_rgbaF_linear_rgbaF_gamma (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbF_linear_rgbF_gamma (unsigned char *src, 
+conv_rgbF_linear_rgbF_gamma (const Babl *conversion,unsigned char *src, 
                              unsigned char *dst, 
                              long           samples)
 {
@@ -127,7 +127,7 @@ conv_rgbF_linear_rgbF_gamma (unsigned char *src,
 
 
 static INLINE long
-conv_rgbaF_gamma_rgbaF_linear (unsigned char *src, 
+conv_rgbaF_gamma_rgbaF_linear (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -146,7 +146,7 @@ conv_rgbaF_gamma_rgbaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbF_gamma_rgbF_linear (unsigned char *src, 
+conv_rgbF_gamma_rgbF_linear (const Babl *conversion,unsigned char *src, 
                              unsigned char *dst, 
                              long           samples)
 {
diff --git a/extensions/gegl-fixups.c b/extensions/gegl-fixups.c
index c32968c..96cb6e3 100644
--- a/extensions/gegl-fixups.c
+++ b/extensions/gegl-fixups.c
@@ -146,7 +146,7 @@ gggl_float_to_index16 (float f)
 }
 
 static INLINE long
-conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -164,7 +164,7 @@ conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
 
 
 static INLINE long
-conv_F_8g (unsigned char *src, unsigned char *dst, long samples)
+conv_F_8g (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -182,7 +182,7 @@ conv_F_8g (unsigned char *src, unsigned char *dst, long samples)
 
 
 static INLINE long __attribute__((unused))
-conv_8_F (unsigned char *src, unsigned char *dst, long samples)
+conv_8_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -199,7 +199,7 @@ conv_8_F (unsigned char *src, unsigned char *dst, long samples)
 
 
 static INLINE long
-conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -227,7 +227,7 @@ conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
 
 
 static INLINE long __attribute__((unused))
-conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -259,16 +259,16 @@ conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_rgbaF_rgbP8    conv_rgbaF_rgba8
 
 static INLINE long __attribute__((unused))
-conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8g (src, dst, samples * 3);
+  conv_F_8g (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static INLINE long __attribute__((unused))
-conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 2);
+  conv_F_8 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -278,7 +278,7 @@ conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
 
 
 static INLINE long
-conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -304,7 +304,7 @@ conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static INLINE long
-conv_rgb8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -329,7 +329,7 @@ conv_rgb8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbAF_rgb8 (unsigned char *srcc,
+conv_rgbAF_rgb8 (const Babl *conversion,unsigned char *srcc,
                  unsigned char *dstc,
                  long           samples)
 {
@@ -360,7 +360,7 @@ conv_rgbAF_rgb8 (unsigned char *srcc,
 }
 
 static long
-conv_bgrA8_rgba8 (unsigned char *srcc,
+conv_bgrA8_rgba8 (const Babl *conversion,unsigned char *srcc,
                   unsigned char *dstc,
                   long           samples)
 {
@@ -382,7 +382,7 @@ conv_bgrA8_rgba8 (unsigned char *srcc,
 }
 
 static long
-conv_rgbaF_rgbAF (unsigned char *srcc,
+conv_rgbaF_rgbAF (const Babl *conversion,unsigned char *srcc,
                   unsigned char *dstc,
                   long           samples)
 {
@@ -404,7 +404,7 @@ conv_rgbaF_rgbAF (unsigned char *srcc,
 }
 
 static long
-conv_rgbAF_rgbaF (unsigned char *srcc,
+conv_rgbAF_rgbaF (const Babl *conversion,unsigned char *srcc,
                   unsigned char *dstc,
                   long           samples)
 {
@@ -432,7 +432,7 @@ conv_rgbAF_rgbaF (unsigned char *srcc,
 
 
 static long
-conv_rgbAF_lrgba8 (unsigned char *srcc,
+conv_rgbAF_lrgba8 (const Babl *conversion,unsigned char *srcc,
                    unsigned char *dstc,
                    long           samples)
 {
diff --git a/extensions/gggl-lies.c b/extensions/gggl-lies.c
index 3d1627f..76d4d26 100644
--- a/extensions/gggl-lies.c
+++ b/extensions/gggl-lies.c
@@ -49,7 +49,7 @@
  */
 
 static long
-conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -75,7 +75,7 @@ conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -103,7 +103,7 @@ conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
 
 
 static long
-conv_8_F (unsigned char *src, unsigned char *dst, long samples)
+conv_8_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -117,7 +117,7 @@ conv_8_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_16_F (unsigned char *src, unsigned char *dst, long samples)
+conv_16_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -131,7 +131,7 @@ conv_16_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_F_D (unsigned char *src, unsigned char *dst, long samples)
+conv_F_D (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -145,7 +145,7 @@ conv_F_D (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_D_F (unsigned char *src, unsigned char *dst, long samples)
+conv_D_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -158,7 +158,7 @@ conv_D_F (unsigned char *src, unsigned char *dst, long samples)
   return samples;
 }
 static long
-conv_16_8 (unsigned char *src, unsigned char *dst, long samples)
+conv_16_8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -173,7 +173,7 @@ conv_16_8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_8_16 (unsigned char *src, unsigned char *dst, long samples)
+conv_8_16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -188,25 +188,25 @@ conv_8_16 (unsigned char *src, unsigned char *dst, long samples)
 
 /*********/
 static long
-conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 4);
+  conv_F_8 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 #define conv_rgbaF_rgbP8    conv_rgbaF_rgba8
 
 static long
-conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 3);
+  conv_F_8 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 2);
+  conv_F_8 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -215,37 +215,37 @@ conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA8        conv_gaF_ga8
 
 static long
-conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 4);
+  conv_F_16 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbaF_rgbaD (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgbaD (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_D (src, dst, samples * 4);
+  conv_F_D (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbaD_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaD_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_D_F (src, dst, samples * 4);
+  conv_D_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 3);
+  conv_F_16 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 2);
+  conv_F_16 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -256,23 +256,23 @@ conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA16        conv_gaF_ga16
 
 static long
-conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_F (src, dst, samples * 4);
+  conv_8_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_F (src, dst, samples * 3);
+  conv_8_F (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga8_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_F (src, dst, samples * 2);
+  conv_8_F (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -281,23 +281,23 @@ conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g8_gF          conv_8_F
 
 static long
-conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba16_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 4);
+  conv_16_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb16_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 3);
+  conv_16_F (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga16_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 2);
+  conv_16_F (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -306,23 +306,23 @@ conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g16_gF          conv_16_F
 
 static long
-conv_rgba16_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba16_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_8 (src, dst, samples * 4);
+  conv_16_8 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb16_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb16_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_8 (src, dst, samples * 3);
+  conv_16_8 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga16_ga8 (unsigned char *src, unsigned char *dst, long samples)
+conv_ga16_ga8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_8 (src, dst, samples * 2);
+  conv_16_8 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -331,23 +331,23 @@ conv_ga16_ga8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g16_g8          conv_16_8
 
 static long
-conv_rgba8_rgba16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgba16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_16 (src, dst, samples * 4);
+  conv_8_16 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb8_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_16 (src, dst, samples * 3);
+  conv_8_16 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga8_ga16 (unsigned char *src, unsigned char *dst, long samples)
+conv_ga8_ga16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_16 (src, dst, samples * 2);
+  conv_8_16 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -358,7 +358,7 @@ conv_ga8_ga16 (unsigned char *src, unsigned char *dst, long samples)
 /* alpha conversions */
 
 static long
-conv_gaF_gAF (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_gAF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -377,7 +377,7 @@ conv_gaF_gAF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gAF_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gAF_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -398,7 +398,7 @@ conv_gAF_gaF (unsigned char *src, unsigned char *dst, long samples)
 /* alpha stripping and adding */
 
 static long
-conv_rgbaF_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -420,7 +420,7 @@ conv_rgbaF_rgbF (unsigned char *src, unsigned char *dst, long samples)
 
 
 static long
-conv_gF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -442,7 +442,7 @@ conv_gF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gF_rgbAF conv_gF_rgbaF
 
 static long
-conv_rgbF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -464,7 +464,7 @@ conv_rgbF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gaF_gF (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_gF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -479,7 +479,7 @@ conv_gaF_gF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gF_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gF_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -501,7 +501,7 @@ conv_gF_gaF (unsigned char *src, unsigned char *dst, long samples)
 /* colorchannel dropping and adding */
 
 static long
-conv_gF_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_gF_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -520,7 +520,7 @@ conv_gF_rgbF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gaF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -546,7 +546,7 @@ conv_gaF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 /* other conversions coded for some optimisation reason or sumthin */
 
 static long
-conv_rgbaF_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgbA8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -569,7 +569,7 @@ conv_rgbaF_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -589,7 +589,7 @@ conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbaF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -609,7 +609,7 @@ conv_rgbaF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgba8_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgbA8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -638,7 +638,7 @@ conv_rgba8_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbA8_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -668,7 +668,7 @@ conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgb8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -688,7 +688,7 @@ conv_rgb8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_rgb8_rgbA8    conv_rgb8_rgba8
 
 static long
-conv_rgba8_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
diff --git a/extensions/gggl-table-lies.c b/extensions/gggl-table-lies.c
index 3e79a6f..8149002 100644
--- a/extensions/gggl-table-lies.c
+++ b/extensions/gggl-table-lies.c
@@ -150,7 +150,7 @@ gggl_float_to_index16 (float f)
 
 
 static long
-conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -167,7 +167,7 @@ conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -184,7 +184,7 @@ conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_8_F (unsigned char *src, unsigned char *dst, long samples)
+conv_8_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -200,7 +200,7 @@ conv_8_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_16_F (unsigned char *src, unsigned char *dst, long samples)
+conv_16_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -217,25 +217,25 @@ conv_16_F (unsigned char *src, unsigned char *dst, long samples)
 
 /*********/
 static long
-conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 4);
+  conv_F_8 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 #define conv_rgbaF_rgbP8    conv_rgbaF_rgba8
 
 static long
-conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 3);
+  conv_F_8 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 2);
+  conv_F_8 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -244,23 +244,23 @@ conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA8        conv_gaF_ga8
 
 static long
-conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 4);
+  conv_F_16 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 3);
+  conv_F_16 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 2);
+  conv_F_16 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -269,23 +269,23 @@ conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA16        conv_gaF_ga16
 
 static long
-conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_F (src, dst, samples * 4);
+  conv_8_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_F (src, dst, samples * 3);
+  conv_8_F (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga8_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_F (src, dst, samples * 2);
+  conv_8_F (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -294,23 +294,23 @@ conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g8_gF          conv_8_F
 
 static long
-conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba16_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 4);
+  conv_16_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb16_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 3);
+  conv_16_F (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga16_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 2);
+  conv_16_F (conversion, src, dst, samples * 2);
   return samples;
 }
 
diff --git a/extensions/gggl-table.c b/extensions/gggl-table.c
index 071167d..ebb4b85 100644
--- a/extensions/gggl-table.c
+++ b/extensions/gggl-table.c
@@ -149,7 +149,7 @@ gggl_float_to_index16 (float f)
 }
 
 static long
-conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -166,7 +166,7 @@ conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -183,7 +183,7 @@ conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_8_F (unsigned char *src, unsigned char *dst, long samples)
+conv_8_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -199,7 +199,7 @@ conv_8_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgb8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -223,7 +223,7 @@ conv_rgb8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_16_F (unsigned char *src, unsigned char *dst, long samples)
+conv_16_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -239,7 +239,7 @@ conv_16_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -268,23 +268,23 @@ conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
 
 /*********/
 static long
-conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 4);
+  conv_F_8 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 3);
+  conv_F_8 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 2);
+  conv_F_8 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -293,23 +293,23 @@ conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA8        conv_gaF_ga8
 
 static long
-conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 4);
+  conv_F_16 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 3);
+  conv_F_16 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 2);
+  conv_F_16 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -318,22 +318,22 @@ conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA16        conv_gaF_ga16
 
 static long
-conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  return conv_8_F (src, dst, samples * 4) / 4;
+  return conv_8_F (conversion, src, dst, samples * 4) / 4;
 }
 
 
 static long
-conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  return conv_8_F (src, dst, samples * 3) / 3;
+  return conv_8_F (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga8_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  return conv_8_F (src, dst, samples * 2) / 2;
+  return conv_8_F (conversion, src, dst, samples * 2) / 2;
 }
 
 #define conv_rgbA8_rgbAF    conv_rgba8_rgbaF
@@ -341,23 +341,23 @@ conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g8_gF          conv_8_F
 
 static long
-conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba16_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 4);
+  conv_16_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb16_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 3);
+  conv_16_F (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga16_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 2);
+  conv_16_F (conversion, src, dst, samples * 2);
   return samples;
 }
 
diff --git a/extensions/gggl.c b/extensions/gggl.c
index b01659f..cf0f664 100644
--- a/extensions/gggl.c
+++ b/extensions/gggl.c
@@ -50,7 +50,7 @@
  */
 
 static long
-conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -70,7 +70,7 @@ conv_F_8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
+conv_F_16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -96,7 +96,7 @@ conv_F_16 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_8_F (unsigned char *src, unsigned char *dst, long samples)
+conv_8_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -110,7 +110,7 @@ conv_8_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_16_F (unsigned char *src, unsigned char *dst, long samples)
+conv_16_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -124,7 +124,7 @@ conv_16_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -150,7 +150,7 @@ conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_F_D (unsigned char *src, unsigned char *dst, long samples)
+conv_F_D (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -164,7 +164,7 @@ conv_F_D (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_D_F (unsigned char *src, unsigned char *dst, long samples)
+conv_D_F (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -178,7 +178,7 @@ conv_D_F (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_16_8 (unsigned char *src, unsigned char *dst, long samples)
+conv_16_8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -193,7 +193,7 @@ conv_16_8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_8_16 (unsigned char *src, unsigned char *dst, long samples)
+conv_8_16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -209,23 +209,23 @@ conv_8_16 (unsigned char *src, unsigned char *dst, long samples)
 
 /*********/
 static long
-conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 4);
+  conv_F_8 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 3);
+  conv_F_8 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_8 (src, dst, samples * 2);
+  conv_F_8 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -234,23 +234,23 @@ conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA8        conv_gaF_ga8
 
 static long
-conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgba16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 4);
+  conv_F_16 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 3);
+  conv_F_16 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_ga16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_16 (src, dst, samples * 2);
+  conv_F_16 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -259,22 +259,22 @@ conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_gAF_gA16        conv_gaF_ga16
 
 static long
-conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  return conv_8_F (src, dst, samples * 4) / 4;
+  return conv_8_F (conversion, src, dst, samples * 4) / 4;
 }
 
 
 static long
-conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  return conv_8_F (src, dst, samples * 3) / 3;
+  return conv_8_F (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga8_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  return conv_8_F (src, dst, samples * 2) / 2;
+  return conv_8_F (conversion, src, dst, samples * 2) / 2;
 }
 
 #define conv_rgbA8_rgbAF    conv_rgba8_rgbaF
@@ -282,37 +282,37 @@ conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g8_gF          conv_8_F
 
 static long
-conv_rgbaF_rgbaD (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgbaD (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_F_D (src, dst, samples * 4);
+  conv_F_D (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgbaD_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaD_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_D_F (src, dst, samples * 4);
+  conv_D_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba16_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 4);
+  conv_16_F (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb16_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 3);
+  conv_16_F (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_ga16_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_F (src, dst, samples * 2);
+  conv_16_F (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -321,23 +321,23 @@ conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g16_gF          conv_16_F
 
 static long
-conv_rgba16_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba16_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_8 (src, dst, samples * 4);
+  conv_16_8 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb16_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb16_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_8 (src, dst, samples * 3);
+  conv_16_8 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga16_ga8 (unsigned char *src, unsigned char *dst, long samples)
+conv_ga16_ga8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_16_8 (src, dst, samples * 2);
+  conv_16_8 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -346,23 +346,23 @@ conv_ga16_ga8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_g16_g8          conv_16_8
 
 static long
-conv_rgba8_rgba16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgba16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_16 (src, dst, samples * 4);
+  conv_8_16 (conversion, src, dst, samples * 4);
   return samples;
 }
 
 static long
-conv_rgb8_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_16 (src, dst, samples * 3);
+  conv_8_16 (conversion, src, dst, samples * 3);
   return samples;
 }
 
 static long
-conv_ga8_ga16 (unsigned char *src, unsigned char *dst, long samples)
+conv_ga8_ga16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
-  conv_8_16 (src, dst, samples * 2);
+  conv_8_16 (conversion, src, dst, samples * 2);
   return samples;
 }
 
@@ -373,7 +373,7 @@ conv_ga8_ga16 (unsigned char *src, unsigned char *dst, long samples)
 /* alpha conversions */
 
 static long
-conv_gaF_gAF (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_gAF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -392,7 +392,7 @@ conv_gaF_gAF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gAF_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gAF_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -413,7 +413,7 @@ conv_gAF_gaF (unsigned char *src, unsigned char *dst, long samples)
 /* alpha stripping and adding */
 
 static long
-conv_rgbaF_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -434,7 +434,7 @@ conv_rgbaF_rgbF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -459,7 +459,7 @@ conv_rgbF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 
 
 static long
-conv_gaF_gF (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_gF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -474,7 +474,7 @@ conv_gaF_gF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gF_gaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gF_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -496,7 +496,7 @@ conv_gF_gaF (unsigned char *src, unsigned char *dst, long samples)
 /* colorchannel dropping and adding */
 
 static long
-conv_gF_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_gF_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -515,7 +515,7 @@ conv_gF_rgbF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gaF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gaF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -542,7 +542,7 @@ conv_gaF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 
 
 static long
-conv_rgbaF_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgbA8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -565,7 +565,7 @@ conv_rgbaF_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbaF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbaF_rgb16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -585,7 +585,7 @@ conv_rgbaF_rgb16 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbA16_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbA16_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -608,7 +608,7 @@ conv_rgbA16_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_gF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_gF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -713,7 +713,7 @@ conv_gF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
    }
  */
 static long
-conv_rgba8_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgbA8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -742,7 +742,7 @@ conv_rgba8_rgbA8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbA8_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -772,7 +772,7 @@ conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgb8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgb8_rgba8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples-1;
   while (n--)
@@ -791,7 +791,7 @@ conv_rgb8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
 #define conv_rgb8_rgbA8    conv_rgb8_rgba8
 
 static long
-conv_rgba8_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgba8_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -807,7 +807,7 @@ conv_rgba8_rgb8 (unsigned char *src, unsigned char *dst, long samples)
 }
 
 static long
-conv_rgbA8_rgb8 (unsigned char *src, unsigned char *dst, long samples)
+conv_rgbA8_rgb8 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   long n = samples;
 
@@ -863,7 +863,7 @@ conv_rgbA8_rgb8 (unsigned char *src, unsigned char *dst, long samples)
 
 
   static long
-conv_yuvaF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
+conv_yuvaF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   float *src_f = (float *) src;
   float *dst_f = (float *) dst;
@@ -895,7 +895,7 @@ conv_yuvaF_rgbaF (unsigned char *src, unsigned char *dst, long samples)
 
 
 static long
-conv_yuvF_rgbF (unsigned char *src, unsigned char *dst, long samples)
+conv_yuvF_rgbF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
 {
   float *src_f = (float *) src;
   float *dst_f = (float *) dst;
diff --git a/extensions/gimp-8bit.c b/extensions/gimp-8bit.c
index 55bd95c..92e3d6e 100644
--- a/extensions/gimp-8bit.c
+++ b/extensions/gimp-8bit.c
@@ -52,7 +52,7 @@ tables_init (void)
 }
 
 static INLINE long
-u8_linear_to_float_linear (unsigned char *src,
+u8_linear_to_float_linear (const Babl *conversion,unsigned char *src,
                            unsigned char *dst,
                            long           samples)
 {
@@ -67,7 +67,7 @@ u8_linear_to_float_linear (unsigned char *src,
 
 
 static INLINE long
-u8_linear_to_float_linear_premul (unsigned char *src,
+u8_linear_to_float_linear_premul (const Babl *conversion,unsigned char *src,
                                   unsigned char *dst,
                                   long           samples)
 {
@@ -88,7 +88,7 @@ u8_linear_to_float_linear_premul (unsigned char *src,
 }
 
 static INLINE long
-u8_gamma_2_2_to_float_linear (unsigned char *src,
+u8_gamma_2_2_to_float_linear (const Babl *conversion,unsigned char *src,
                               unsigned char *dst,
                               long           samples)
 {
@@ -102,28 +102,28 @@ u8_gamma_2_2_to_float_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_rgba8_linear_rgbaF_linear (unsigned char *src,
+conv_rgba8_linear_rgbaF_linear (const Babl *conversion,unsigned char *src,
                                 unsigned char *dst,
                                 long           samples)
 {
-  u8_linear_to_float_linear (src, dst, samples * 4);
+  u8_linear_to_float_linear (conversion, src, dst, samples * 4);
 
   return samples;
 }
 
 static INLINE long
-conv_rgba8_linear_ragabaaF_linear (unsigned char *src,
+conv_rgba8_linear_ragabaaF_linear (const Babl *conversion,unsigned char *src,
                                 unsigned char *dst,
                                 long           samples)
 {
-  u8_linear_to_float_linear_premul (src, dst, samples);
+  u8_linear_to_float_linear_premul (conversion, src, dst, samples);
 
   return samples;
 }
 
 
 static INLINE long
-conv_rgba8_gamma_2_2_rgbaF_linear (unsigned char *src,
+conv_rgba8_gamma_2_2_rgbaF_linear (const Babl *conversion,unsigned char *src,
                                    unsigned char *dst,
                                    long           samples)
 {
@@ -142,27 +142,27 @@ conv_rgba8_gamma_2_2_rgbaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_rgb8_linear_rgbF_linear (unsigned char *src,
+conv_rgb8_linear_rgbF_linear (const Babl *conversion,unsigned char *src,
                               unsigned char *dst,
                               long           samples)
 {
-  u8_linear_to_float_linear (src, dst, samples * 3);
+  u8_linear_to_float_linear (conversion, src, dst, samples * 3);
 
   return samples;
 }
 
 static INLINE long
-conv_rgb8_gamma_2_2_rgbF_linear (unsigned char *src,
+conv_rgb8_gamma_2_2_rgbF_linear (const Babl *conversion,unsigned char *src,
                                  unsigned char *dst,
                                  long           samples)
 {
-  u8_gamma_2_2_to_float_linear (src, dst, samples * 3);
+  u8_gamma_2_2_to_float_linear (conversion, src, dst, samples * 3);
 
   return samples;
 }
 
 static INLINE long
-conv_rgb8_linear_rgbaF_linear (unsigned char *src,
+conv_rgb8_linear_rgbaF_linear (const Babl *conversion,unsigned char *src,
                                unsigned char *dst,
                                long           samples)
 {
@@ -183,7 +183,7 @@ conv_rgb8_linear_rgbaF_linear (unsigned char *src,
 #define conv_rgb8_linear_ragabaaF_linear conv_rgb8_linear_rgbaF_linear
 
 static INLINE long
-conv_rgb8_gamma_2_2_rgbaF_linear (unsigned char *src,
+conv_rgb8_gamma_2_2_rgbaF_linear (const Babl *conversion,unsigned char *src,
                                   unsigned char *dst,
                                   long           samples)
 {
@@ -202,17 +202,17 @@ conv_rgb8_gamma_2_2_rgbaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_ga8_linear_gaF_linear (unsigned char *src,
+conv_ga8_linear_gaF_linear (const Babl *conversion,unsigned char *src,
                             unsigned char *dst,
                             long           samples)
 {
-  u8_linear_to_float_linear (src, dst, samples * 2);
+  u8_linear_to_float_linear (conversion, src, dst, samples * 2);
 
   return samples;
 }
 
 static INLINE long
-conv_ga8_gamma_2_2_gaF_linear (unsigned char *src,
+conv_ga8_gamma_2_2_gaF_linear (const Babl *conversion,unsigned char *src,
                                unsigned char *dst,
                                long           samples)
 {
@@ -229,7 +229,7 @@ conv_ga8_gamma_2_2_gaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_ga8_gamma_2_2_rgba8_gamma_2_2 (unsigned char *src,
+conv_ga8_gamma_2_2_rgba8_gamma_2_2 (const Babl *conversion,unsigned char *src,
                                     unsigned char *dst,
                                     long           samples)
 {
@@ -247,7 +247,7 @@ conv_ga8_gamma_2_2_rgba8_gamma_2_2 (unsigned char *src,
 }
 
 static INLINE long
-conv_ga8_linear_rgbaF_linear (unsigned char *src,
+conv_ga8_linear_rgbaF_linear (const Babl *conversion,unsigned char *src,
                               unsigned char *dst,
                               long           samples)
 {
@@ -268,7 +268,7 @@ conv_ga8_linear_rgbaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_ga8_gamma_2_2_rgbaF_linear (unsigned char *src,
+conv_ga8_gamma_2_2_rgbaF_linear (const Babl *conversion,unsigned char *src,
                                  unsigned char *dst,
                                  long           samples)
 {
@@ -289,27 +289,27 @@ conv_ga8_gamma_2_2_rgbaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_g8_linear_gF_linear (unsigned char *src,
+conv_g8_linear_gF_linear (const Babl *conversion,unsigned char *src,
                           unsigned char *dst,
                           long           samples)
 {
-  u8_linear_to_float_linear (src, dst, samples);
+  u8_linear_to_float_linear (conversion, src, dst, samples);
 
   return samples;
 }
 
 static INLINE long
-conv_g8_gamma_2_2_gF_linear (unsigned char *src,
+conv_g8_gamma_2_2_gF_linear (const Babl *conversion,unsigned char *src,
                              unsigned char *dst,
                              long           samples)
 {
-  u8_gamma_2_2_to_float_linear (src, dst, samples);
+  u8_gamma_2_2_to_float_linear (conversion, src, dst, samples);
 
   return samples;
 }
 
 static INLINE long
-conv_g8_linear_rgbaF_linear (unsigned char *src,
+conv_g8_linear_rgbaF_linear (const Babl *conversion,unsigned char *src,
                              unsigned char *dst,
                              long           samples)
 {
@@ -329,7 +329,7 @@ conv_g8_linear_rgbaF_linear (unsigned char *src,
   return samples;
 }
 static INLINE long
-conv_g8_gamma_2_2_rgbaF_linear (unsigned char *src,
+conv_g8_gamma_2_2_rgbaF_linear (const Babl *conversion,unsigned char *src,
                                 unsigned char *dst,
                                 long           samples)
 {
@@ -350,7 +350,7 @@ conv_g8_gamma_2_2_rgbaF_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbaF_linear_rgb8_linear (unsigned char *src, 
+conv_rgbaF_linear_rgb8_linear (const Babl *conversion,unsigned char *src, 
                                unsigned char *dst, 
                                long           samples)
 {
@@ -376,7 +376,7 @@ conv_rgbaF_linear_rgb8_linear (unsigned char *src,
 }
 
 static INLINE long
-conv_rgbaF_linear_rgba8_linear (unsigned char *src, 
+conv_rgbaF_linear_rgba8_linear (const Babl *conversion,unsigned char *src, 
                                 unsigned char *dst, 
                                 long           samples)
 {
diff --git a/extensions/grey.c b/extensions/grey.c
index a6fef28..b394064 100644
--- a/extensions/grey.c
+++ b/extensions/grey.c
@@ -37,7 +37,7 @@ static const float RGB_LUMINANCE_GREEN_FLOAT = RGB_LUMINANCE_GREEN;
 static const float RGB_LUMINANCE_BLUE_FLOAT = RGB_LUMINANCE_BLUE;
 
 static long
-conv_rgbaF_linear_y8_linear (unsigned char *src,
+conv_rgbaF_linear_y8_linear (const Babl *conversion,unsigned char *src,
                              unsigned char *dst,
                              long           samples)
 {
@@ -65,7 +65,7 @@ conv_rgbaF_linear_y8_linear (unsigned char *src,
 }
 
 static long
-conv_rgbaF_linear_yF_linear (unsigned char *src,
+conv_rgbaF_linear_yF_linear (const Babl *conversion,unsigned char *src,
                              unsigned char *dst,
                              long           samples)
 {
@@ -88,7 +88,7 @@ conv_rgbaF_linear_yF_linear (unsigned char *src,
 }
 
 static long
-conv_rgbaF_linear_yaF_linear (unsigned char *src,
+conv_rgbaF_linear_yaF_linear (const Babl *conversion,unsigned char *src,
                               unsigned char *dst,
                               long           samples)
 {
diff --git a/extensions/naive-CMYK.c b/extensions/naive-CMYK.c
index f92b0d2..339536b 100644
--- a/extensions/naive-CMYK.c
+++ b/extensions/naive-CMYK.c
@@ -24,19 +24,19 @@
 #include "base/util.h"
 
 
-static long  rgba_to_cmyk (char *src,
+static long  rgba_to_cmyk (const Babl *conversion,char *src,
                            char *dst,
                            long  n);
 
-static long  cmyk_to_rgba (char *src,
+static long  cmyk_to_rgba (const Babl *conversion,char *src,
                            char *dst,
                            long  n);
 
-static long  rgba_to_cmy  (char *src,
+static long  rgba_to_cmy  (const Babl *conversion,char *src,
                            char *dst,
                            long  n);
 
-static long  cmy_to_rgba  (char *src,
+static long  cmy_to_rgba  (const Babl *conversion,char *src,
                            char *dst,
                            long  n);
 
@@ -127,7 +127,7 @@ init (void)
 
 
 static long
-rgba_to_cmyk (char *src,
+rgba_to_cmyk (const Babl *conversion,char *src,
               char *dst,
               long  n)
 {
@@ -177,7 +177,7 @@ rgba_to_cmyk (char *src,
 }
 
 static long
-cmyk_to_rgba (char *src,
+cmyk_to_rgba (const Babl *conversion,char *src,
               char *dst,
               long  n)
 {
@@ -218,7 +218,7 @@ cmyk_to_rgba (char *src,
 }
 
 static long
-rgba_to_cmy (char *src,
+rgba_to_cmy (const Babl *conversion,char *src,
              char *dst,
              long  n)
 {
@@ -245,7 +245,7 @@ rgba_to_cmy (char *src,
 }
 
 static long
-cmy_to_rgba (char *src,
+cmy_to_rgba (const Babl *conversion,char *src,
               char *dst,
               long  n)
 {
diff --git a/extensions/simple.c b/extensions/simple.c
index 1430ab1..cd34f1c 100644
--- a/extensions/simple.c
+++ b/extensions/simple.c
@@ -6,7 +6,7 @@ int init (void);
 
 
 static inline long
-float_to_u8_x1 (unsigned char *src_char, unsigned char *dst, long samples)
+float_to_u8_x1 (const Babl *conversion,unsigned char *src_char, unsigned char *dst, long samples)
 {
   float *src = (float *)src_char;
   long n = samples;
@@ -21,27 +21,27 @@ float_to_u8_x1 (unsigned char *src_char, unsigned char *dst, long samples)
 }
 
 static inline long
-float_to_u8_x4 (unsigned char *src_char, unsigned char *dst, long samples)
+float_to_u8_x4 (const Babl *conversion,unsigned char *src_char, unsigned char *dst, long samples)
 {
-  return float_to_u8_x1 (src_char, dst, samples * 4);
+  return float_to_u8_x1 (conversion, src_char, dst, samples * 4);
 }
 
 static inline long
-float_to_u8_x3 (unsigned char *src_char, unsigned char *dst, long samples)
+float_to_u8_x3 (const Babl *conversion,unsigned char *src_char, unsigned char *dst, long samples)
 {
-  return float_to_u8_x1 (src_char, dst, samples * 3);
+  return float_to_u8_x1 (conversion, src_char, dst, samples * 3);
 }
 
 static inline long
-float_to_u8_x2 (unsigned char *src_char, unsigned char *dst, long samples)
+float_to_u8_x2 (const Babl *conversion,unsigned char *src_char, unsigned char *dst, long samples)
 {
-  return float_to_u8_x1 (src_char, dst, samples * 2);
+  return float_to_u8_x1 (conversion, src_char, dst, samples * 2);
 }
 
 
 
 static inline long
-float_pre_to_u8_pre (unsigned char *src_char, unsigned char *dst, long samples)
+float_pre_to_u8_pre (const Babl *conversion,unsigned char *src_char, unsigned char *dst, long samples)
 {
   float *src = (float *)src_char;
   long n = samples;
@@ -72,7 +72,7 @@ float_pre_to_u8_pre (unsigned char *src_char, unsigned char *dst, long samples)
 }
 
 static inline long
-float_to_u16_x1 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u16_x1 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
   float *src    = (float *)src_char;
   uint16_t *dst = (uint16_t *)dst_char;
@@ -87,23 +87,23 @@ float_to_u16_x1 (unsigned char *src_char, unsigned char *dst_char, long samples)
   return samples;
 }
 static inline long
-float_to_u16_x2 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u16_x2 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  return float_to_u16_x1 (src_char, dst_char, samples * 2);
+  return float_to_u16_x1 (conversion, src_char, dst_char, samples * 2);
 }
 static inline long
-float_to_u16_x3 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u16_x3 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  return float_to_u16_x1 (src_char, dst_char, samples * 3);
+  return float_to_u16_x1 (conversion, src_char, dst_char, samples * 3);
 }
 static inline long
-float_to_u16_x4 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u16_x4 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  return float_to_u16_x1 (src_char, dst_char, samples * 4);
+  return float_to_u16_x1 (conversion, src_char, dst_char, samples * 4);
 }
 
 static inline long
-float_pre_to_u16_pre (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_pre_to_u16_pre (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
   float *src = (float *)src_char;
   uint16_t *dst = (uint16_t *)dst_char;
@@ -134,7 +134,7 @@ float_pre_to_u16_pre (unsigned char *src_char, unsigned char *dst_char, long sam
 }
 
 static inline long
-float_pre_to_u32_pre (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_pre_to_u32_pre (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
   float *src = (float *)src_char;
   uint32_t *dst = (uint32_t *)dst_char;
@@ -166,7 +166,7 @@ float_pre_to_u32_pre (unsigned char *src_char, unsigned char *dst_char, long sam
 
 
 static inline long
-float_to_u32_x1 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u32_x1 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
   float *src    = (float *)src_char;
   uint32_t *dst = (uint32_t *)dst_char;
@@ -183,24 +183,24 @@ float_to_u32_x1 (unsigned char *src_char, unsigned char *dst_char, long samples)
   return samples;
 }
 static inline long
-float_to_u32_x2 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u32_x2 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  return float_to_u32_x1 (src_char, dst_char, samples * 2);
+  return float_to_u32_x1 (conversion, src_char, dst_char, samples * 2);
 }
 static inline long
-float_to_u32_x3 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u32_x3 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  return float_to_u32_x1 (src_char, dst_char, samples * 3);
+  return float_to_u32_x1 (conversion, src_char, dst_char, samples * 3);
 }
 static inline long
-float_to_u32_x4 (unsigned char *src_char, unsigned char *dst_char, long samples)
+float_to_u32_x4 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  return float_to_u32_x1 (src_char, dst_char, samples * 4);
+  return float_to_u32_x1 (conversion, src_char, dst_char, samples * 4);
 }
 
 
 static inline long
-u32_to_float (unsigned char *src_char, unsigned char *dst_char, long samples)
+u32_to_float (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
   uint32_t *src = (uint32_t *)src_char;
   float *dst    = (float *)dst_char;
@@ -215,30 +215,30 @@ u32_to_float (unsigned char *src_char, unsigned char *dst_char, long samples)
 }
 
 static inline long
-u32_to_float_x4 (unsigned char *src_char, unsigned char *dst_char, long samples)
+u32_to_float_x4 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  u32_to_float (src_char, dst_char, samples * 4);
+  u32_to_float (conversion, src_char, dst_char, samples * 4);
   return samples;
 }
 
 static inline long
-u32_to_float_x3 (unsigned char *src_char, unsigned char *dst_char, long samples)
+u32_to_float_x3 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  u32_to_float (src_char, dst_char, samples * 3);
+  u32_to_float (conversion, src_char, dst_char, samples * 3);
   return samples;
 }
 
 
 static inline long
-u32_to_float_x2 (unsigned char *src_char, unsigned char *dst_char, long samples)
+u32_to_float_x2 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  u32_to_float (src_char, dst_char, samples * 2);
+  u32_to_float (conversion, src_char, dst_char, samples * 2);
   return samples;
 }
 
 
 static inline long
-u16_to_float (unsigned char *src_char, unsigned char *dst_char, long samples)
+u16_to_float (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
   uint16_t *src = (uint16_t *)src_char;
   float *dst    = (float *)dst_char;
@@ -253,29 +253,29 @@ u16_to_float (unsigned char *src_char, unsigned char *dst_char, long samples)
 }
 
 static inline long
-u16_to_float_x4 (unsigned char *src_char, unsigned char *dst_char, long samples)
+u16_to_float_x4 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  u16_to_float (src_char, dst_char, samples * 4);
+  u16_to_float (conversion, src_char, dst_char, samples * 4);
   return samples;
 }
 
 static inline long
-u16_to_float_x3 (unsigned char *src_char, unsigned char *dst_char, long samples)
+u16_to_float_x3 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  u16_to_float (src_char, dst_char, samples * 3);
+  u16_to_float (conversion, src_char, dst_char, samples * 3);
   return samples;
 }
 
 
 static inline long
-u16_to_float_x2 (unsigned char *src_char, unsigned char *dst_char, long samples)
+u16_to_float_x2 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
-  u16_to_float (src_char, dst_char, samples * 2);
+  u16_to_float (conversion, src_char, dst_char, samples * 2);
   return samples;
 }
 
 static inline long
-yau16_rgbaf (unsigned char *src_char, unsigned char *dst_char, long samples)
+yau16_rgbaf (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long samples)
 {
   uint16_t *src = (uint16_t *)src_char;
   float *dst    = (float *)dst_char;
diff --git a/extensions/sse-half.c b/extensions/sse-half.c
index e20c214..1a48adb 100644
--- a/extensions/sse-half.c
+++ b/extensions/sse-half.c
@@ -30,7 +30,7 @@
 #include "extensions/util.h"
 
 static inline long
-conv_yHalf_yF (const uint16_t *src, float *dst, long samples)
+conv_yHalf_yF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
   const uint64_t *s_vec;
   __v4sf         *d_vec;
@@ -63,25 +63,25 @@ conv_yHalf_yF (const uint16_t *src, float *dst, long samples)
 }
 
 static long
-conv_yaHalf_yaF (const uint16_t *src, float *dst, long samples)
+conv_yaHalf_yaF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
-  return conv_yHalf_yF (src, dst, samples * 2) / 2;
+  return conv_yHalf_yF (conversion, src, dst, samples * 2) / 2;
 }
 
 static long
-conv_rgbHalf_rgbF (const uint16_t *src, float *dst, long samples)
+conv_rgbHalf_rgbF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
-  return conv_yHalf_yF (src, dst, samples * 3) / 3;
+  return conv_yHalf_yF (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_rgbaHalf_rgbaF (const uint16_t *src, float *dst, long samples)
+conv_rgbaHalf_rgbaF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
-  return conv_yHalf_yF (src, dst, samples * 4) / 4;
+  return conv_yHalf_yF (conversion, src, dst, samples * 4) / 4;
 }
 
 static inline long
-conv_yF_yHalf (const float *src, uint16_t *dst, long samples)
+conv_yF_yHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
   const __v4sf *s_vec;
   uint64_t     *d_vec;
@@ -114,21 +114,21 @@ conv_yF_yHalf (const float *src, uint16_t *dst, long samples)
 }
 
 static long
-conv_yaF_yaHalf (const float *src, uint16_t *dst, long samples)
+conv_yaF_yaHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
-  return conv_yF_yHalf (src, dst, samples * 2) / 2;
+  return conv_yF_yHalf (conversion, src, dst, samples * 2) / 2;
 }
 
 static long
-conv_rgbF_rgbHalf (const float *src, uint16_t *dst, long samples)
+conv_rgbF_rgbHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
-  return conv_yF_yHalf (src, dst, samples * 3) / 3;
+  return conv_yF_yHalf (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_rgbaF_rgbaHalf (const float *src, uint16_t *dst, long samples)
+conv_rgbaF_rgbaHalf (const Babl *conversion,const float *src, uint16_t *dst, long samples)
 {
-  return conv_yF_yHalf (src, dst, samples * 4) / 4;
+  return conv_yF_yHalf (conversion, src, dst, samples * 4) / 4;
 }
 
 #endif /* defined(USE_SSE4_1) && defined(USE_F16C) && defined(ARCH_X86_64) */
diff --git a/extensions/sse2-float.c b/extensions/sse2-float.c
index 71fa008..1f5468f 100644
--- a/extensions/sse2-float.c
+++ b/extensions/sse2-float.c
@@ -38,7 +38,7 @@
 static const float BABL_ALPHA_THRESHOLD_FLOAT = (float)BABL_ALPHA_THRESHOLD;
 
 static long
-conv_rgbaF_linear_rgbAF_linear (const float *src, float *dst, long samples)
+conv_rgbaF_linear_rgbAF_linear (const Babl *conversion,const float *src, float *dst, long samples)
 {
   long i = 0;
   long remainder;
@@ -96,7 +96,7 @@ conv_rgbaF_linear_rgbAF_linear (const float *src, float *dst, long samples)
 }
 
 static long
-conv_rgbAF_linear_rgbaF_linear_shuffle (const float *src, float *dst, long samples)
+conv_rgbAF_linear_rgbaF_linear_shuffle (const Babl *conversion,const float *src, float *dst, long samples)
 {
   long i = 0;
   long remainder;
@@ -164,7 +164,7 @@ conv_rgbAF_linear_rgbaF_linear_shuffle (const float *src, float *dst, long sampl
 }
 
 static long
-conv_rgbAF_linear_rgbaF_linear_spin (const float *src, float *dst, long samples)
+conv_rgbAF_linear_rgbaF_linear_spin (const Babl *conversion,const float *src, float *dst, long samples)
 {
   long i = 0;
   long remainder;
@@ -297,7 +297,7 @@ gamma_2_2_to_linear_sse2 (__v4sf x)
 
 #define GAMMA_RGBA(func, munge) \
 static inline long \
-func (const float *src, float *dst, long samples)\
+func (const Babl *conversion,const float *src, float *dst, long samples)\
 {\
   int i = samples;\
   if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0)\
@@ -353,11 +353,11 @@ func (const float *src, float *dst, long samples)\
 GAMMA_RGBA(conv_rgbaF_linear_rgbaF_gamma, linear_to_gamma_2_2_sse2)
 GAMMA_RGBA(conv_rgbaF_gamma_rgbaF_linear, gamma_2_2_to_linear_sse2)
 
-static long conv_rgbaF_linear_rgbAF_gamma (const float *src, float *dst, long samples)
+static long conv_rgbaF_linear_rgbAF_gamma (const Babl *conversion,const float *src, float *dst, long samples)
 {
   float *tmp = alloca (sizeof(float)*4*samples);
-  conv_rgbaF_linear_rgbaF_gamma (src, tmp, samples);
-  conv_rgbaF_linear_rgbAF_linear (tmp, dst, samples);
+  conv_rgbaF_linear_rgbaF_gamma (conversion, src, tmp, samples);
+  conv_rgbaF_linear_rgbAF_linear (conversion, tmp, dst, samples);
   return samples;
 }
 
@@ -380,7 +380,7 @@ static long conv_rgbaF_linear_rgbAF_gamma (const float *src, float *dst, long sa
 }\
 
 static long
-conv_yaF_linear_yaF_gamma (const float *src, float *dst, long samples)
+conv_yaF_linear_yaF_gamma (const Babl *conversion,const float *src, float *dst, long samples)
 {
   long total = samples;
 
@@ -418,7 +418,7 @@ conv_yaF_linear_yaF_gamma (const float *src, float *dst, long samples)
 
 
 static long
-conv_yaF_gamma_yaF_linear (const float *src, float *dst, long samples)
+conv_yaF_gamma_yaF_linear (const Babl *conversion,const float *src, float *dst, long samples)
 {
   long total = samples;
 
@@ -455,7 +455,7 @@ conv_yaF_gamma_yaF_linear (const float *src, float *dst, long samples)
 }
 
 static inline long
-conv_yF_linear_yF_gamma (const float *src, float *dst, long samples)
+conv_yF_linear_yF_gamma (const Babl *conversion,const float *src, float *dst, long samples)
 {
   long total = samples;
 
@@ -495,7 +495,7 @@ conv_yF_linear_yF_gamma (const float *src, float *dst, long samples)
 }
 
 static inline long
-conv_yF_gamma_yF_linear (const float *src, float *dst, long samples)
+conv_yF_gamma_yF_linear (const Babl *conversion,const float *src, float *dst, long samples)
 {
   long total = samples;
 
@@ -536,16 +536,16 @@ conv_yF_gamma_yF_linear (const float *src, float *dst, long samples)
 
 
 static long
-conv_rgbF_linear_rgbF_gamma (const float *src, float *dst, long samples)
+conv_rgbF_linear_rgbF_gamma (const Babl *conversion,const float *src, float *dst, long samples)
 {
-  return conv_yF_linear_yF_gamma (src, dst, samples * 3) / 3;
+  return conv_yF_linear_yF_gamma (conversion, src, dst, samples * 3) / 3;
 }
 
 
 static long
-conv_rgbF_gamma_rgbF_linear (const float *src, float *dst, long samples)
+conv_rgbF_gamma_rgbF_linear (const Babl *conversion,const float *src, float *dst, long samples)
 {
-  return conv_yF_gamma_yF_linear (src, dst, samples * 3) / 3;
+  return conv_yF_gamma_yF_linear (conversion, src, dst, samples * 3) / 3;
 }
 
 #endif /* defined(USE_SSE2) */
diff --git a/extensions/sse2-int16.c b/extensions/sse2-int16.c
index 843e030..71ae0b2 100644
--- a/extensions/sse2-int16.c
+++ b/extensions/sse2-int16.c
@@ -35,7 +35,7 @@
 static const __v4sf  u16_float = Q (1.f / 65535);
 
 static long
-conv_rgba16_rgbaF (const uint16_t *src, float *dst, long samples)
+conv_rgba16_rgbaF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
   long i = 0;
 
@@ -71,7 +71,7 @@ conv_rgba16_rgbaF (const uint16_t *src, float *dst, long samples)
 }
 
 static long
-conv_rgba16_rgbAF (const uint16_t *src, float *dst, long samples)
+conv_rgba16_rgbAF (const Babl *conversion,const uint16_t *src, float *dst, long samples)
 {
   long i = 0;
   long remainder;
diff --git a/extensions/sse2-int8.c b/extensions/sse2-int8.c
index 5353de6..cfa146e 100644
--- a/extensions/sse2-int8.c
+++ b/extensions/sse2-int8.c
@@ -31,7 +31,7 @@
 #include "extensions/util.h"
 
 static inline long
-conv_yF_y8 (const float *src, uint8_t *dst, long samples)
+conv_yF_y8 (const Babl *conversion,const float *src, uint8_t *dst, long samples)
 {
   const __v4sf *s_vec;
   __m128i      *d_vec;
@@ -128,28 +128,28 @@ conv_yF_y8 (const float *src, uint8_t *dst, long samples)
 }
 
 static long
-conv_yaF_ya8 (const float *src, uint8_t *dst, long samples)
+conv_yaF_ya8 (const Babl *conversion,const float *src, uint8_t *dst, long samples)
 {
-  return conv_yF_y8 (src, dst, samples * 2) / 2;
+  return conv_yF_y8 (conversion, src, dst, samples * 2) / 2;
 }
 
 
 static long
-conv_rgbF_rgb8 (const float *src, uint8_t *dst, long samples)
+conv_rgbF_rgb8 (const Babl *conversion,const float *src, uint8_t *dst, long samples)
 {
-  return conv_yF_y8 (src, dst, samples * 3) / 3;
+  return conv_yF_y8 (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_rgbaF_rgba8 (const float *src, uint8_t *dst, long samples)
+conv_rgbaF_rgba8 (const Babl *conversion,const float *src, uint8_t *dst, long samples)
 {
-  return conv_yF_y8 (src, dst, samples * 4) / 4;
+  return conv_yF_y8 (conversion, src, dst, samples * 4) / 4;
 }
 
 static long
-conv_rgbAF_rgbA8 (const float *src, uint8_t *dst, long samples)
+conv_rgbAF_rgbA8 (const Babl *conversion,const float *src, uint8_t *dst, long samples)
 {
-  return conv_yF_y8 (src, dst, samples * 4) / 4;
+  return conv_yF_y8 (conversion, src, dst, samples * 4) / 4;
 }
 
 #endif
diff --git a/extensions/sse4-int8.c b/extensions/sse4-int8.c
index 73f63e3..b6f7c42 100644
--- a/extensions/sse4-int8.c
+++ b/extensions/sse4-int8.c
@@ -31,7 +31,7 @@
 #include "extensions/util.h"
 
 static inline long
-conv_y8_yF (const uint8_t *src, float *dst, long samples)
+conv_y8_yF (const Babl *conversion,const uint8_t *src, float *dst, long samples)
 {
   const float     factor = 1.0f / 255.0f;
   const __v4sf    factor_vec = {1.0f / 255.0f, 1.0f / 255.0f, 1.0f / 255.0f, 1.0f / 255.0f};
@@ -67,21 +67,21 @@ conv_y8_yF (const uint8_t *src, float *dst, long samples)
 }
 
 static long
-conv_ya8_yaF (const uint8_t *src, float *dst, long samples)
+conv_ya8_yaF (const Babl *conversion,const uint8_t *src, float *dst, long samples)
 {
-  return conv_y8_yF (src, dst, samples * 2) / 2;
+  return conv_y8_yF (conversion, src, dst, samples * 2) / 2;
 }
 
 static long
-conv_rgb8_rgbF (const uint8_t *src, float *dst, long samples)
+conv_rgb8_rgbF (const Babl *conversion,const uint8_t *src, float *dst, long samples)
 {
-  return conv_y8_yF (src, dst, samples * 3) / 3;
+  return conv_y8_yF (conversion, src, dst, samples * 3) / 3;
 }
 
 static long
-conv_rgba8_rgbaF (const uint8_t *src, float *dst, long samples)
+conv_rgba8_rgbaF (const Babl *conversion,const uint8_t *src, float *dst, long samples)
 {
-  return conv_y8_yF (src, dst, samples * 4) / 4;
+  return conv_y8_yF (conversion, src, dst, samples * 4) / 4;
 }
 
 #endif
diff --git a/extensions/two-table.c b/extensions/two-table.c
index 6be18ca..c7344a1 100644
--- a/extensions/two-table.c
+++ b/extensions/two-table.c
@@ -43,7 +43,7 @@ conv_float_u8_two_table_map (float value)
 }
 
 static long
-conv_rgbafloat_linear_cairo24_le (unsigned char *src_char,
+conv_rgbafloat_linear_cairo24_le (const Babl *conversion,unsigned char *src_char,
                                   unsigned char *dst,
                                   long           samples)
 {
@@ -69,7 +69,7 @@ conv_rgbafloat_linear_cairo24_le (unsigned char *src_char,
 }
 
 static long
-conv_rgbfloat_linear_cairo24_le (unsigned char *src_char,
+conv_rgbfloat_linear_cairo24_le (const Babl *conversion,unsigned char *src_char,
                                  unsigned char *dst,
                                  long           samples)
 {
@@ -89,7 +89,7 @@ conv_rgbfloat_linear_cairo24_le (unsigned char *src_char,
 }
 
 static long
-conv_rgbafloat_linear_rgbu8_gamma (unsigned char *src_char,
+conv_rgbafloat_linear_rgbu8_gamma (const Babl *conversion,unsigned char *src_char,
                                    unsigned char *dst,
                                    long           samples)
 {
@@ -118,7 +118,7 @@ conv_rgbafloat_linear_rgbu8_gamma (unsigned char *src_char,
 
 
 static long
-conv_rgbafloat_linear_rgbau8_gamma (unsigned char *src_char,
+conv_rgbafloat_linear_rgbau8_gamma (const Babl *conversion,unsigned char *src_char,
                                     unsigned char *dst,
                                     long           samples)
 {
@@ -148,7 +148,7 @@ conv_rgbafloat_linear_rgbau8_gamma (unsigned char *src_char,
 }
 
 static long
-conv_rgbfloat_linear_rgbu8_gamma (unsigned char *src_char,
+conv_rgbfloat_linear_rgbu8_gamma (const Babl *conversion,unsigned char *src_char,
                                   unsigned char *dst,
                                   long           samples)
 {
@@ -168,7 +168,7 @@ conv_rgbfloat_linear_rgbu8_gamma (unsigned char *src_char,
 }
 
 static long
-conv_yfloat_linear_yu8_gamma (unsigned char *src_char,
+conv_yfloat_linear_yu8_gamma (const Babl *conversion,unsigned char *src_char,
                               unsigned char *dst,
                               long           samples)
 {
@@ -183,7 +183,7 @@ conv_yfloat_linear_yu8_gamma (unsigned char *src_char,
 }
 
 static long
-conv_yafloat_linear_yau8_gamma (unsigned char *src_char,
+conv_yafloat_linear_yau8_gamma (const Babl *conversion,unsigned char *src_char,
                                 unsigned char *dst,
                                 long           samples)
 {
diff --git a/extensions/ycbcr.c b/extensions/ycbcr.c
index 11db563..a7b1e28 100644
--- a/extensions/ycbcr.c
+++ b/extensions/ycbcr.c
@@ -72,7 +72,7 @@ models (void)
 
 
 static long
-rgba_to_ycbcra709 (char *src,
+rgba_to_ycbcra709 (const Babl *conversion,char *src,
                    char *dst,
                    long  n)
 {
@@ -106,7 +106,7 @@ rgba_to_ycbcra709 (char *src,
 
 
 static long
-rgba_to_ycbcr709 (char *src,
+rgba_to_ycbcr709 (const Babl *conversion,char *src,
                   char *dst,
                   long  n)
 {
@@ -138,7 +138,7 @@ rgba_to_ycbcr709 (char *src,
 
 
 static long
-ycbcra709_to_rgba (char *src,
+ycbcra709_to_rgba (const Babl *conversion,char *src,
                 char *dst,
                 long  n)
 {
@@ -172,7 +172,7 @@ ycbcra709_to_rgba (char *src,
 
 
 static long
-ycbcr709_to_rgba (char *src,
+ycbcr709_to_rgba (const Babl *conversion,char *src,
                char *dst,
                long  n)
 {


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