summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatvey Konovalov <m.konovalov@samsung.com>2014-04-15 19:22:33 +0900
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2014-04-15 19:22:58 +0900
commit9fb3aa6549a715b47d4fb64b599ad08b372e97c7 (patch)
tree739aa8fb59e6872fccc77ccc979dc5f07e001931
parent70cdfc44aa09d66315ad4fb83523235644b77cdc (diff)
downloadefl-9fb3aa6549a715b47d4fb64b599ad08b372e97c7.tar.gz
evas - improve speed of unpremul with redundant pixel data
-rw-r--r--src/lib/evas/common/evas_convert_color.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/lib/evas/common/evas_convert_color.c b/src/lib/evas/common/evas_convert_color.c
index 3399443e44..e8a6b7254a 100644
--- a/src/lib/evas/common/evas_convert_color.c
+++ b/src/lib/evas/common/evas_convert_color.c
@@ -47,17 +47,26 @@ evas_common_convert_argb_premul(DATA32 *data, unsigned int len)
EAPI void
evas_common_convert_argb_unpremul(DATA32 *data, unsigned int len)
{
- DATA32 *de = data + len;
+ DATA32 *de = data + len;
+ DATA32 p_val = 0x00000000, p_res = 0x00000000;
while (data < de)
{
- DATA32 a = (*data >> 24);
-
- if ((a > 0) && (a < 255))
- *data = ARGB_JOIN(a,
- (R_VAL(data) * 255) / a,
- (G_VAL(data) * 255) / a,
- (B_VAL(data) * 255) / a);
+ DATA32 a = (*data >> 24) + 1;
+
+ if (p_val == *data) *data = p_res;
+ else
+ {
+ p_val = *data;
+ if ((a > 1) && (a < 256))
+ *data = ARGB_JOIN(a,
+ (R_VAL(data) * 255) / a,
+ (G_VAL(data) * 255) / a,
+ (B_VAL(data) * 255) / a);
+ else if (a == 1)
+ *data = 0x00000000;
+ p_res = *data;
+ }
data++;
}