[babl] extensions/gggl{, -lies}.c: round toward nearest in integer unpremultiplication
- From: Massimo Valentini <mvalentini src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] extensions/gggl{, -lies}.c: round toward nearest in integer unpremultiplication
- Date: Sat, 14 Jul 2012 15:21:41 +0000 (UTC)
commit e78677f1a8676f5ce6cef9ccab9a0f2ebe3c54bd
Author: Massimo Valentini <mvalentini src gnome org>
Date: Sat Jul 14 17:07:38 2012 +0200
extensions/gggl{,-lies}.c: round toward nearest in integer unpremultiplication
from (docs/BablFishPath.html):
../extensions/.libs/gggl-lies.so 0: RaGaBaA u8 to RGBA u8
error: 0.001425 cost: 81 processings: 1 pixels: 128
../extensions/.libs/gggl.so 0: R'aG'aB'aA u8 to R'G'B'A u8
error: 0.001971 cost: 71 processings: 1 pixels: 128
../extensions/.libs/gggl.so 0: R'aG'aB'aA u8 to R'G'B' u8
error: 0.001971 cost: 71 processings: 1 pixels: 128
to:
../extensions/.libs/gggl-lies.so 0: RaGaBaA u8 to RGBA u8
error: 0.000031 cost: 81 processings: 1 pixels: 128
../extensions/.libs/gggl.so 0: R'aG'aB'aA u8 to R'G'B'A u8
error: 0.000042 cost: 61 processings: 1 pixels: 128
../extensions/.libs/gggl.so 0: R'aG'aB'aA u8 to R'G'B' u8
error: 0.000042 cost: 61 processings: 1 pixels: 128
extensions/gggl-lies.c | 8 ++++----
extensions/gggl.c | 16 ++++++++--------
2 files changed, 12 insertions(+), 12 deletions(-)
---
diff --git a/extensions/gggl-lies.c b/extensions/gggl-lies.c
index d56a50e..40e3fe0 100644
--- a/extensions/gggl-lies.c
+++ b/extensions/gggl-lies.c
@@ -1095,10 +1095,10 @@ conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
}
else
{
- unsigned int aa = (255 << 16) / src[3];
- *dst++ = (src[0] * aa) >> 16;
- *dst++ = (src[1] * aa) >> 16;
- *dst++ = (src[2] * aa) >> 16;
+ unsigned int aa = ((255 << 16) + (src[3] >> 1)) / src[3];
+ *dst++ = (src[0] * aa + 0x8000) >> 16;
+ *dst++ = (src[1] * aa + 0x8000) >> 16;
+ *dst++ = (src[2] * aa + 0x8000) >> 16;
*dst++ = src[3];
}
src += 4;
diff --git a/extensions/gggl.c b/extensions/gggl.c
index f1fb8c0..458de8d 100644
--- a/extensions/gggl.c
+++ b/extensions/gggl.c
@@ -1066,10 +1066,10 @@ conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples)
}
else
{
- unsigned int aa = (255 << 16) / src[3];
- *dst++ = (src[0] * aa) >> 16;
- *dst++ = (src[1] * aa) >> 16;
- *dst++ = (src[2] * aa) >> 16;
+ unsigned int aa = ((255 << 16) + (src[3] >> 1)) / src[3];
+ *dst++ = (src[0] * aa + 0x8000) >> 16;
+ *dst++ = (src[1] * aa + 0x8000) >> 16;
+ *dst++ = (src[2] * aa + 0x8000) >> 16;
*dst++ = src[3];
}
src += 4;
@@ -1333,10 +1333,10 @@ conv_rgbA8_rgb8 (unsigned char *src, unsigned char *dst, long samples)
}
else
{
- unsigned int aa = (255 << 16) / alpha;
- *dst++ = (src[0] * aa) >> 16;
- *dst++ = (src[1] * aa) >> 16;
- *dst++ = (src[2] * aa) >> 16;
+ unsigned int aa = ((255 << 16) + (alpha >> 1)) / alpha;
+ *dst++ = (src[0] * aa + 0x8000) >> 16;
+ *dst++ = (src[1] * aa + 0x8000) >> 16;
+ *dst++ = (src[2] * aa + 0x8000) >> 16;
}
src += 4;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]