[babl] babl: fix icc matrix profile fast paths



commit 7c83ee123456db10a3da1516b8987ac6bf15d129
Author: Øyvind Kolås <pippin gimp org>
Date:   Tue Jan 30 16:35:28 2018 +0100

    babl: fix icc matrix profile fast paths
    
    For core members, babl relies on shared data layout between fish and
    conversion to be able to do dispatch, and have source/target match -
    though only for simple fishes.
    
    The ICC fast path conversions also used the user data - but directly
    instead of throug the argument, changing this makes the matrix and
    luts work again - and let the conversions be used.

 babl/babl-fish-path.c |    2 +-
 babl/babl-fish.h      |    4 ++++
 babl/babl-space.c     |   44 ++++++++++++++++++++++----------------------
 3 files changed, 27 insertions(+), 23 deletions(-)
---
diff --git a/babl/babl-fish-path.c b/babl/babl-fish-path.c
index 54e9ee4..c5aca9b 100644
--- a/babl/babl-fish-path.c
+++ b/babl/babl-fish-path.c
@@ -697,7 +697,7 @@ _babl_fish_rig_dispatch (Babl *babl)
             /* lift out conversion from single step conversion and make it be the dispatch function
              * itself
              */
-            babl->fish.data = &babl->fish_simple.conversion->data;
+            babl->fish.data     = &(babl->fish_simple.conversion->data);
             babl->fish.dispatch = babl->fish_simple.conversion->dispatch;
           }
         else
diff --git a/babl/babl-fish.h b/babl/babl-fish.h
index a26a032..db4e06f 100644
--- a/babl/babl-fish.h
+++ b/babl/babl-fish.h
@@ -47,6 +47,10 @@ typedef struct
 {
   BablFish         fish;
   BablConversion  *conversion;
+  double     cost;   /* number of  ticks *10 + chain_length */
+  int        source_bpp;
+  int        dest_bpp;
+  void      *foo;
 } BablFishSimple;
 
 
diff --git a/babl/babl-space.c b/babl/babl-space.c
index 6794c2c..b5557fb 100644
--- a/babl/babl-space.c
+++ b/babl/babl-space.c
@@ -575,12 +575,12 @@ static void prep_conversion (const Babl *babl)
 
 
 static inline void
-universal_nonlinear_rgba_converter (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, 
long samples)
+universal_nonlinear_rgba_converter (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, 
long samples, void *data)
 {
   const Babl *source_space = babl_conversion_get_source_space (conversion);
   const Babl *destination_space = babl_conversion_get_destination_space (conversion);
 
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float *rgba_in = (void*)src_char;
   float *rgba_out = (void*)dst_char;
 
@@ -592,10 +592,10 @@ universal_nonlinear_rgba_converter (const Babl *conversion,unsigned char *src_ch
 }
 
 static inline void
-universal_nonlinear_rgb_linear_converter (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples)
+universal_nonlinear_rgb_linear_converter (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples, void *data)
 {
   const Babl *source_space = babl_conversion_get_source_space (conversion);
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float *rgba_in = (void*)src_char;
   float *rgba_out = (void*)dst_char;
 
@@ -605,11 +605,11 @@ universal_nonlinear_rgb_linear_converter (const Babl *conversion,unsigned char *
 }
 
 static inline void
-universal_nonlinear_rgba_u8_converter (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples)
+universal_nonlinear_rgba_u8_converter (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples, void *data)
 {
   const Babl *destination_space = conversion->conversion.destination->format.space;
 
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float * in_trc_lut = matrixf + 9;
   int i;
   uint8_t *rgba_in_u8 = (void*)src_char;
@@ -643,9 +643,9 @@ universal_nonlinear_rgba_u8_converter (const Babl *conversion,unsigned char *src
 
 
 static inline void
-universal_rgba_converter (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long 
samples)
+universal_rgba_converter (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long 
samples, void *data)
 {
-  float *matrixf = conversion->conversion.data;
+  float *matrixf = data;
   float *rgba_in = (void*)src_char;
   float *rgba_out = (void*)dst_char;
 
@@ -653,9 +653,9 @@ universal_rgba_converter (const Babl *conversion,unsigned char *src_char, unsign
 }
 
 static inline void
-universal_rgb_converter (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long 
samples)
+universal_rgb_converter (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long 
samples, void *data)
 {
-  float *matrixf = conversion->conversion.data;
+  float *matrixf = data;
   float *rgb_in = (void*)src_char;
   float *rgb_out = (void*)dst_char;
 
@@ -664,11 +664,11 @@ universal_rgb_converter (const Babl *conversion,unsigned char *src_char, unsigne
 
 
 static inline void
-universal_nonlinear_rgb_u8_converter (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples)
+universal_nonlinear_rgb_u8_converter (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples, void *data)
 {
   const Babl *destination_space = conversion->conversion.destination->format.space;
 
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float * in_trc_lut = matrixf + 9;
   int i;
   uint8_t *rgb_in_u8 = (void*)src_char;
@@ -731,11 +731,11 @@ static inline void babl_matrix_mul_vectorff_buf4_sse2 (const float *mat,
 
 
 static inline void
-universal_nonlinear_rgba_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples)
+universal_nonlinear_rgba_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples, void *data)
 {
   const Babl *source_space = babl_conversion_get_source_space (conversion);
   const Babl *destination_space = babl_conversion_get_destination_space (conversion);
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float *rgba_in = (void*)src_char;
   float *rgba_out = (void*)dst_char;
 
@@ -748,9 +748,9 @@ universal_nonlinear_rgba_converter_sse2 (const Babl *conversion,unsigned char *s
 
 
 static inline void
-universal_rgba_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long 
samples)
+universal_rgba_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char *dst_char, long 
samples, void *data)
 {
-  float *matrixf = conversion->conversion.data;
+  float *matrixf = data;
   float *rgba_in = (void*)src_char;
   float *rgba_out = (void*)dst_char;
 
@@ -758,11 +758,11 @@ universal_rgba_converter_sse2 (const Babl *conversion,unsigned char *src_char, u
 }
 
 static inline void
-universal_nonlinear_rgba_u8_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples)
+universal_nonlinear_rgba_u8_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples, void *data)
 {
   const Babl *destination_space = conversion->conversion.destination->format.space;
 
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float * in_trc_lut = matrixf + 9;
   int i;
   uint8_t *rgba_in_u8 = (void*)src_char;
@@ -793,11 +793,11 @@ universal_nonlinear_rgba_u8_converter_sse2 (const Babl *conversion,unsigned char
 }
 
 static inline void
-universal_nonlinear_rgb_u8_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples)
+universal_nonlinear_rgb_u8_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples, void *data)
 {
   const Babl *destination_space = conversion->conversion.destination->format.space;
 
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float * in_trc_lut = matrixf + 9;
   int i;
   uint8_t *rgb_in_u8 = (void*)src_char;
@@ -828,10 +828,10 @@ universal_nonlinear_rgb_u8_converter_sse2 (const Babl *conversion,unsigned char
 
 
 static inline void
-universal_nonlinear_rgb_linear_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples)
+universal_nonlinear_rgb_linear_converter_sse2 (const Babl *conversion,unsigned char *src_char, unsigned char 
*dst_char, long samples, void *data)
 {
   const Babl *source_space = babl_conversion_get_source_space (conversion);
-  float * matrixf = conversion->conversion.data;
+  float * matrixf = data;
   float *rgba_in = (void*)src_char;
   float *rgba_out = (void*)dst_char;
 


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