Performance: improve XYZ to LAB conversion by ~15%

- VIPS_CLIP is faster than fmin/fmax based library calls
- Cast to int to ensure the cubed root LUT is not referenced by NaN
This commit is contained in:
Lovell Fuller 2020-07-21 11:39:06 +01:00
parent b845d4a20d
commit 3659655750

View File

@ -133,15 +133,15 @@ vips_XYZ2Lab_line( VipsColour *colour, VipsPel *out, VipsPel **in, int width )
nZ = QUANT_ELEMENTS * p[2] / XYZ2Lab->Z0;
p += 3;
i = VIPS_FCLIP( 0, nX, QUANT_ELEMENTS - 2 );
i = VIPS_CLIP( 0, (int) nX, QUANT_ELEMENTS - 2 );
f = nX - i;
cbx = cbrt_table[i] + f * (cbrt_table[i + 1] - cbrt_table[i]);
i = VIPS_FCLIP( 0, nY, QUANT_ELEMENTS - 2 );
i = VIPS_CLIP( 0, (int) nY, QUANT_ELEMENTS - 2 );
f = nY - i;
cby = cbrt_table[i] + f * (cbrt_table[i + 1] - cbrt_table[i]);
i = VIPS_FCLIP( 0, nZ, QUANT_ELEMENTS - 2 );
i = VIPS_CLIP( 0, (int) nZ, QUANT_ELEMENTS - 2 );
f = nZ - i;
cbz = cbrt_table[i] + f * (cbrt_table[i + 1] - cbrt_table[i]);