[babl] float: add conversions to/from associated alpha for grayscale



commit 3ba8ebb057b6d205a0c3b512452cefa8e484b679
Author: Øyvind Kolås <pippin gimp org>
Date:   Tue Aug 20 01:46:08 2019 +0200

    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 4d2840937..cd3442156 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);


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