[babl] fast-float: add RGBA float to R'G'B'A u8
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] fast-float: add RGBA float to R'G'B'A u8
- Date: Sun, 20 Nov 2016 09:36:41 +0000 (UTC)
commit d1908f938bc5463ae7ce26eb2057f84558070147
Author: Øyvind Kolås <pippin gimp org>
Date: Sat Nov 19 20:08:16 2016 +0100
fast-float: add RGBA float to R'G'B'A u8
extensions/fast-float.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
---
diff --git a/extensions/fast-float.c b/extensions/fast-float.c
index 7ee725a..3dc713b 100644
--- a/extensions/fast-float.c
+++ b/extensions/fast-float.c
@@ -328,6 +328,44 @@ conv_rgbaF_linear_rgbAF_gamma (unsigned char *src,
}
+
+static INLINE long
+conv_rgbaF_linear_rgba8_gamma (unsigned char *src,
+ unsigned char *dst,
+ long samples)
+{
+ float *fsrc = (float *) src;
+ uint8_t *cdst = (uint8_t *) dst;
+ int n = samples;
+
+ while (n--)
+ {
+ float red = *fsrc++;
+ float green = *fsrc++;
+ float blue = *fsrc++;
+ float alpha = *fsrc++;
+ if (alpha <= 0) /* XXX: we need to drop alpha!! ? */
+ {
+ *cdst++ = 0;
+ *cdst++ = 0;
+ *cdst++ = 0;
+ *cdst++ = 0;
+ }
+ else
+ {
+ int val = linear_to_gamma_2_2_lut (red) * 0xff + 0.5f;
+ *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
+ val = linear_to_gamma_2_2_lut (green) * 0xff + 0.5f;
+ *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
+ val = linear_to_gamma_2_2_lut (blue) * 0xff + 0.5f;
+ *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
+ val = alpha * 0xff + 0.5;
+ *cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
+ }
+ }
+ return samples;
+}
+
static INLINE long
conv_rgbaF_linear_rgbA8_gamma (unsigned char *src,
unsigned char *dst,
@@ -584,6 +622,15 @@ init (void)
babl_component ("A"),
NULL);
+ const Babl *rgba8_gamma = babl_format_new (
+ babl_model ("R'G'B'A"),
+ babl_type ("u8"),
+ babl_component ("R'"),
+ babl_component ("G'"),
+ babl_component ("B'"),
+ babl_component ("A"),
+ NULL);
+
const Babl *rgbF_linear = babl_format_new (
babl_model ("RGB"),
babl_type ("float"),
@@ -638,6 +685,7 @@ init (void)
o (rgbAF_linear, rgbAF_gamma);
o (rgbaF_linear, rgbAF_gamma);
o (rgbaF_linear, rgbaF_gamma);
+ o (rgbaF_linear, rgba8_gamma);
o (rgbaF_gamma, rgbaF_linear);
o (rgbF_linear, rgbF_gamma);
o (rgbF_gamma, rgbF_linear);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]