[babl] extensions: cairo remove a broken conversion, fix RGBA u8 to cairo reference
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] extensions: cairo remove a broken conversion, fix RGBA u8 to cairo reference
- Date: Sun, 23 Jan 2022 00:12:41 +0000 (UTC)
commit 3871e1819fe07ae64ddc3c19fc9f2bd478b02b9b
Author: Øyvind Kolås <pippin gimp org>
Date: Sun Jan 23 00:54:20 2022 +0100
extensions: cairo remove a broken conversion, fix RGBA u8 to cairo reference
extensions/cairo.c | 90 ++++++++++++++++--------------------------------------
1 file changed, 26 insertions(+), 64 deletions(-)
---
diff --git a/extensions/cairo.c b/extensions/cairo.c
index 3af4a9bd3..1330fe458 100644
--- a/extensions/cairo.c
+++ b/extensions/cairo.c
@@ -113,27 +113,6 @@ conv_rgbA8_cairo32_le (const Babl *conversion,
}
#endif
-static void
-conv_cairo32_rgbA8_le (const Babl *conversion,
- unsigned char *__restrict__ src,
- unsigned char *__restrict__ 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;
- }
-}
-
static void
conv_cairo32_rgba8_le (const Babl *conversion,
unsigned char *__restrict__ src,
@@ -165,17 +144,9 @@ conv_cairo32_rgba8_le (const Babl *conversion,
else
{
float falpha = alpha / 255.0;
- float recip_alpha = 1.0 / falpha;
- // unsigned int aa = ((255 << 16) + alpha) / falpha + 0.5;
-
-
- *dst++ = ((red/255.0) * recip_alpha) * 255 + 0.5f;
- *dst++ = ((green/255.0) * recip_alpha) * 255 + 0.5f;
- *dst++ = ((blue/255.0) * recip_alpha) * 255 + 0.5f;
-
-// *dst++ = (red * aa + 0x8000) >> 16;
-// *dst++ = (green * aa + 0x8000) >> 16;
-// *dst++ = (blue * aa + 0x8000) >> 16;
+ *dst++ = red / falpha + 0.5;
+ *dst++ = green / falpha + 0.5;
+ *dst++ = blue / falpha + 0.5;
*dst++ = alpha;
}
}
@@ -183,13 +154,12 @@ conv_cairo32_rgba8_le (const Babl *conversion,
static void
-conv_cairo32_rgbAF_le (const Babl *conversion,
+conv_cairo32_rgbA8_le (const Babl *conversion,
unsigned char *__restrict__ src,
- unsigned char *__restrict__ dst_char,
+ unsigned char *__restrict__ dst,
long samples)
{
long n = samples;
- float *dst = (void*)dst_char;
while (n--)
{
unsigned char blue = *src++;
@@ -197,16 +167,16 @@ conv_cairo32_rgbAF_le (const Babl *conversion,
unsigned char red = *src++;
unsigned char alpha = *src++;
- *dst++ = red / 255.0;
- *dst++ = green / 255.0;
- *dst++ = blue / 255.0;
- *dst++ = alpha / 255.0;
+ *dst++ = red;
+ *dst++ = green;
+ *dst++ = blue;
+ *dst++ = alpha;
}
}
static void
-conv_cairo32_rgbaF_le (const Babl *conversion,
+conv_cairo32_rgbAF_le (const Babl *conversion,
unsigned char *__restrict__ src,
unsigned char *__restrict__ dst_char,
long samples)
@@ -220,20 +190,13 @@ conv_cairo32_rgbaF_le (const Babl *conversion,
unsigned char red = *src++;
unsigned char alpha = *src++;
- float reciprocal_alpha = 0.0f;
-
- if (alpha)
- reciprocal_alpha = 1.0f/(alpha/255.0f) / 255.0f;
-
-
- *dst++ = red * reciprocal_alpha;
- *dst++ = green * reciprocal_alpha;
- *dst++ = blue * reciprocal_alpha;
- *dst++ = alpha / 255.0;
+ *dst++ = red / 255.0f;
+ *dst++ = green / 255.0f;
+ *dst++ = blue / 255.0f;
+ *dst++ = alpha / 255.0f;
}
}
-
static void
conv_cairo24_cairo32_le (const Babl *conversion,
unsigned char *__restrict__ src,
@@ -410,7 +373,7 @@ conv_rgbA_gamma_float_cairo32_le (const Babl *conversion,
while (n--)
{
- int val = fsrc[2] * 255.0f + 0.5f;
+ int val = fsrc[2] * 255.0f + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
val = fsrc[1] * 255.0f + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
@@ -443,11 +406,11 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,
float alpha = *fsrc++;
if (alpha >= 1.0)
{
- int val = babl_trc_from_linear (trc[2], blue) * 0xff + 0.5f;
+ int val = babl_trc_from_linear (trc[2], blue) * 0xff + .0;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_trc_from_linear (trc[1], green) * 0xff + 0.5f;
+ val = babl_trc_from_linear (trc[1], green) * 0xff + .0;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_trc_from_linear (trc[0], red) * 0xff + 0.5f;
+ val = babl_trc_from_linear (trc[0], red) * 0xff + .0;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = 0xff;
}
@@ -459,13 +422,15 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,
else
{
float balpha = alpha * 0xff;
- int val = babl_trc_from_linear (trc[2], blue) * balpha + 0.5f;
+ int val = babl_trc_from_linear (trc[2], blue) * balpha + 0.0;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_trc_from_linear (trc[1], green) * balpha + 0.5f;
+ val = babl_trc_from_linear (trc[1], green) * balpha + 0.0;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_trc_from_linear (trc[0], red) * balpha + 0.5f;
+ val = babl_trc_from_linear (trc[0], red) * balpha + 0.0;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- *cdst++ = balpha + 0.5f;
+ balpha+=0.0;
+ if (balpha > 255)balpha=255;
+ *cdst++ = balpha;
}
}
}
@@ -489,7 +454,7 @@ conv_yafloat_cairo32_le (const Babl *conversion,
float alpha = *fsrc++;
if (alpha >= 1.0)
{
- int val = babl_trc_from_linear (trc[0], gray) * 0xff + 0.5f;
+ int val = babl_trc_from_linear (trc[0], gray) * 0xff;
val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = val;
*cdst++ = val;
@@ -531,7 +496,7 @@ conv_yafloat_nl_cairo32_le (const Babl *conversion,
float alpha = *fsrc++;
if (alpha >= 1.0)
{
- int val = gray * 0xff + 0.5f;
+ int val = gray * 0xff;
val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = val;
*cdst++ = val;
@@ -603,9 +568,6 @@ init (void)
conv_cairo32_rgba8_le, NULL);
- babl_conversion_new (f32, babl_format ("R'G'B'A float"), "linear",
- conv_cairo32_rgbaF_le, NULL);
-
babl_conversion_new (f24, f32, "linear",
conv_cairo24_cairo32_le, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]