From 3ba8ebb057b6d205a0c3b512452cefa8e484b679 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=98yvind=20Kol=C3=A5s?= Date: Tue, 20 Aug 2019 01:46:08 +0200 Subject: [PATCH] float: add conversions to/from associated alpha for grayscale Further speeds up rotations/scales etc in all grayscale precisions. --- extensions/float.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/extensions/float.c b/extensions/float.c index 4d28409..cd34421 100644 --- a/extensions/float.c +++ b/extensions/float.c @@ -50,6 +50,27 @@ conv_yaF_linear_yAF_linear (const Babl *conversion, } +static void +conv_yAF_linear_yaF_linear (const Babl *conversion, + unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + float alpha = fsrc[1]; + float alpha_reciprocal = 1.0f/babl_epsilon_for_zero_float (alpha); + *fdst++ = (*fsrc++) * alpha_reciprocal; + *fdst++ = alpha; + fsrc++; + } +} + + static void conv_yaF_linear_yAF_nonlinear (const Babl *conversion, unsigned char *src, @@ -585,10 +606,11 @@ init (void) o (rgbF_nonlinear, rgbF_linear); + o (yaF_linear, yAF_linear); + o (yAF_linear, yaF_linear); o (yAF_linear, yAF_nonlinear); o (yaF_linear, yAF_nonlinear); o (yaF_linear, yaF_nonlinear); - o (yaF_linear, yAF_linear); o (yaF_nonlinear, yaF_linear); o (yF_linear, yF_nonlinear); o (yF_nonlinear, yF_linear); -- 2.30.2