[babl] extensions: add two fast paths from cairo formats
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] extensions: add two fast paths from cairo formats
- Date: Mon, 15 May 2017 20:08:44 +0000 (UTC)
commit 6c4592c40cb3652af3a2eeb0c06f3fd9f974f918
Author: Øyvind Kolås <pippin gimp org>
Date: Mon May 15 22:05:21 2017 +0200
extensions: add two fast paths from cairo formats
This is to babls corresponding premultiplied but in different swizzling order
8bit and float data.
extensions/cairo.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 44 insertions(+), 0 deletions(-)
---
diff --git a/extensions/cairo.c b/extensions/cairo.c
index 5569ab6..6066258 100644
--- a/extensions/cairo.c
+++ b/extensions/cairo.c
@@ -104,6 +104,43 @@ conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long sampl
}
#endif
+static long conv_cairo32_rgbA8_premul_le (unsigned char *src, unsigned char *dst, long samples)
+{
+ long n = samples;
+ while (n--)
+ {
+ unsigned char blue = *src++;
+ unsigned char green = *src++;
+ unsigned char red = *src++;
+ unsigned char alpha = *src++;
+
+ *dst++ = red;
+ *dst++ = green;
+ *dst++ = blue;
+ *dst++ = alpha;
+ }
+ return samples;
+}
+
+
+static long conv_cairo32_rgbAF_premul_le (unsigned char *src, unsigned char *dst_char, long samples)
+{
+ long n = samples;
+ float *dst = (void*)dst_char;
+ while (n--)
+ {
+ unsigned char blue = *src++;
+ unsigned char green = *src++;
+ unsigned char red = *src++;
+ unsigned char alpha = *src++;
+
+ *dst++ = red / 255.0;
+ *dst++ = green / 255.0;
+ *dst++ = blue / 255.0;
+ *dst++ = alpha / 255.0;
+ }
+ return samples;
+}
static inline long
conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
@@ -359,6 +396,13 @@ init (void)
babl_component ("PAD"),
NULL
);
+
+ babl_conversion_new (f32, babl_format ("R'aG'aB'aA float"), "linear",
+ conv_cairo32_rgbAF_premul_le, NULL);
+
+ babl_conversion_new (f32, babl_format ("R'aG'aB'aA u8"), "linear",
+ conv_cairo32_rgbA8_premul_le, NULL);
+
babl_conversion_new (babl_format ("R'aG'aB'aA u8"), f32, "linear",
conv_rgbA8_premul_cairo32_le, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]