aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeoff Levand <geoff@infradead.org>2011-11-25 17:35:28 -0800
committerGeoff Levand <geoff@infradead.org>2011-12-11 15:06:22 -0800
commitca81e39bce028e74c27caeb006a5c47dd9337b4f (patch)
tree970fab280adffcbc08ef956435eb74809c98ae0d
parentea951fb17d38c06d5db4920ef5f2d6e014667c2c (diff)
downloadlibtwin-ca81e39bce028e74c27caeb006a5c47dd9337b4f.tar.gz
Remove unneeded call to png_set_swap_alpha
Alpha byte swapping is done in twin_premultiply_alpha(), so the PNG processing overhead can be reduced by removing the png_set_swap_alpha() call in twin_png_to_pixmap() and adjusting twin_premultiply_alpha(). Signed-off-by: Geoff Levand <geoff@infradead.org>
-rw-r--r--libtwin/twin_draw.c16
-rw-r--r--libtwin/twin_png.c2
2 files changed, 8 insertions, 10 deletions
diff --git a/libtwin/twin_draw.c b/libtwin/twin_draw.c
index 39af904..3460d28 100644
--- a/libtwin/twin_draw.c
+++ b/libtwin/twin_draw.c
@@ -644,7 +644,7 @@ void twin_composite (twin_pixmap_t *dst,
static twin_argb32_t _twin_apply_alpha(twin_argb32_t v)
{
uint16_t t1, t2, t3;
- twin_a8_t alpha = twin_get_8(v, (__BYTE_ORDER == __BIG_ENDIAN) ? 24 : 0);
+ twin_a8_t alpha = twin_get_8(v, (__BYTE_ORDER == __BIG_ENDIAN) ? 0 : 24);
/* clear RGB data if alpha is zero */
@@ -655,14 +655,14 @@ static twin_argb32_t _twin_apply_alpha(twin_argb32_t v)
if (__BYTE_ORDER == __BIG_ENDIAN)
return alpha << 24 |
- twin_int_mult(twin_get_8(v, 16), alpha, t1) << 16 |
- twin_int_mult(twin_get_8(v, 8), alpha, t2) << 8 |
- twin_int_mult(twin_get_8(v, 0), alpha, t3) << 0;
+ twin_int_mult(twin_get_8(v, 24), alpha, t1) << 16 |
+ twin_int_mult(twin_get_8(v, 16), alpha, t2) << 8 |
+ twin_int_mult(twin_get_8(v, 8), alpha, t3) << 0;
- return alpha << 24 |
- twin_int_mult(twin_get_8(v, 8), alpha, t1) << 16 |
- twin_int_mult(twin_get_8(v, 16), alpha, t2) << 8 |
- twin_int_mult(twin_get_8(v, 24), alpha, t3) << 0;
+ return alpha << 24 |
+ twin_int_mult(twin_get_8(v, 0), alpha, t1) << 16 |
+ twin_int_mult(twin_get_8(v, 8), alpha, t2) << 8 |
+ twin_int_mult(twin_get_8(v, 16), alpha, t3) << 0;
}
void twin_premultiply_alpha(twin_pixmap_t *px)
diff --git a/libtwin/twin_png.c b/libtwin/twin_png.c
index c3b09a6..f0bd6ee 100644
--- a/libtwin/twin_png.c
+++ b/libtwin/twin_png.c
@@ -137,8 +137,6 @@ twin_pixmap_t *twin_png_to_pixmap(const char *filepath, twin_format_t fmt)
case TWIN_ARGB32:
if (ctype == PNG_COLOR_TYPE_RGB)
png_set_filler(png, 0xff, PNG_FILLER_BEFORE);
- if (ctype == PNG_COLOR_TYPE_RGB_ALPHA)
- png_set_swap_alpha(png);
if (ctype == PNG_COLOR_TYPE_GRAY ||
ctype == PNG_COLOR_TYPE_GRAY_ALPHA)
png_set_gray_to_rgb(png);