[babl] babl: fix icc matrix profile fast paths
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] babl: fix icc matrix profile fast paths
- Date: Tue, 30 Jan 2018 15:39:00 +0000 (UTC)
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]