raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9fb3aa6549a715b47d4fb64b599ad08b372e97c7

commit 9fb3aa6549a715b47d4fb64b599ad08b372e97c7
Author: Matvey Konovalov <m.konova...@samsung.com>
Date:   Tue Apr 15 19:22:33 2014 +0900

    evas - improve speed of unpremul with redundant pixel data
---
 src/lib/evas/common/evas_convert_color.c | 25 +++++++++++++++++--------
 1 file 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 3399443..e8a6b72 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++;
      }
 

-- 


Reply via email to