Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/engines/common


Modified Files:
        evas_blend_pixel_pixel.c evas_scale_sample.c 
        evas_scale_smooth_scaler_downx.c 
        evas_scale_smooth_scaler_downx_downy.c 
        evas_scale_smooth_scaler_downy.c evas_scale_smooth_scaler_up.c 


Log Message:


1. buffer test really wqasnt being very fair - time to be fair.
2. be able to skip a copy in certain cases when scaling - should improve
speed in several situations - evas is defintiely not optimal :)

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_pixel_pixel.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- evas_blend_pixel_pixel.c    22 Jan 2006 10:48:51 -0000      1.24
+++ evas_blend_pixel_pixel.c    23 Jan 2006 07:57:30 -0000      1.25
@@ -277,7 +277,7 @@
 evas_common_copy_pixels_rgba_to_rgba_sse(DATA32 *src, DATA32 *dst, int len)
 {
    DATA32 *src_ptr, *dst_ptr, *dst_end_ptr;
-   
+
    dst_end_ptr = dst + len;
    dst_end_ptr -= 15;
    src_ptr = src;
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_scale_sample.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evas_scale_sample.c 22 May 2005 02:49:49 -0000      1.3
+++ evas_scale_sample.c 23 Jan 2006 07:57:30 -0000      1.4
@@ -351,10 +351,6 @@
          }
        else
          {
-            /* a scanline buffer */
-            buf = malloc(dst_clip_w * sizeof(DATA32));
-            if (!buf) goto no_buf;
-
             /* fill scale tables */
             for (x = 0; x < dst_clip_w; x++)
               lin_ptr[x] = (((x + dst_clip_x - dst_region_x) * src_region_w) / 
dst_region_w) + src_region_x;
@@ -363,20 +359,46 @@
                                        + src_region_y) * src_w);
             /* scale to dst */
             dptr = dst_ptr;
-            for (y = 0; y < dst_clip_h; y++)
+#ifdef DIRECT_SCALE         
+            if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+                (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)))
               {
-                 dst_ptr = buf;
-                 for (x = 0; x < dst_clip_w; x++)
+                 for (y = 0; y < dst_clip_h; y++)
+                   {
+                      dst_ptr = dptr;
+                      for (x = 0; x < dst_clip_w; x++)
+                        {
+                           ptr = row_ptr[y] + lin_ptr[x];
+                           *dst_ptr = *ptr;
+                           dst_ptr++;
+                        }
+                      /* * blend here [clip_w *] buf -> dptr * */
+//                    func(buf, dptr, dst_clip_w);
+                      dptr += dst_w;
+                   }
+              }
+            else
+#endif        
+              {
+                 /* a scanline buffer */
+                 buf = malloc(dst_clip_w * sizeof(DATA32));
+                 if (!buf) goto no_buf;
+
+                 for (y = 0; y < dst_clip_h; y++)
                    {
-                      ptr = row_ptr[y] + lin_ptr[x];
-                      *dst_ptr = *ptr;
-                      dst_ptr++;
+                      dst_ptr = buf;
+                      for (x = 0; x < dst_clip_w; x++)
+                        {
+                           ptr = row_ptr[y] + lin_ptr[x];
+                           *dst_ptr = *ptr;
+                           dst_ptr++;
+                        }
+                      /* * blend here [clip_w *] buf -> dptr * */
+                      func(buf, dptr, dst_clip_w);
+                      dptr += dst_w;
                    }
-                 /* * blend here [clip_w *] buf -> dptr * */
-                 func(buf, dptr, dst_clip_w);
-                 dptr += dst_w;
+                 free(buf);
               }
-            free(buf);
          }
      }
 
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evas_scale_smooth_scaler_downx.c    3 Dec 2005 09:27:52 -0000       1.3
+++ evas_scale_smooth_scaler_downx.c    23 Jan 2006 07:57:30 -0000      1.4
@@ -95,71 +95,149 @@
      }
    else
      {
-       while (dst_clip_h--)
+#ifdef DIRECT_SCALE
+        if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!dc->mod.use) && (!dc->mul.use))
          {
-            while (dst_clip_w--)
+            while (dst_clip_h--)
               {
-                 Cx = *xapp >> 16;
-                 xap = *xapp & 0xffff;
-                 pix = *yp + *xp + pos;
-
-                 r = (R_VAL(pix) * xap) >> 10;
-                 g = (G_VAL(pix) * xap) >> 10;
-                 b = (B_VAL(pix) * xap) >> 10;
-                 for (j = (1 << 14) - xap; j > Cx; j -= Cx)
+                  pbuf = dptr;
+                 while (dst_clip_w--)
                    {
-                      pix++;
-                      r += (R_VAL(pix) * Cx) >> 10;
-                      g += (G_VAL(pix) * Cx) >> 10;
-                      b += (B_VAL(pix) * Cx) >> 10;
+                      Cx = *xapp >> 16;
+                      xap = *xapp & 0xffff;
+                      pix = *yp + *xp + pos;
+                      
+                      r = (R_VAL(pix) * xap) >> 10;
+                      g = (G_VAL(pix) * xap) >> 10;
+                      b = (B_VAL(pix) * xap) >> 10;
+                      for (j = (1 << 14) - xap; j > Cx; j -= Cx)
+                        {
+                           pix++;
+                           r += (R_VAL(pix) * Cx) >> 10;
+                           g += (G_VAL(pix) * Cx) >> 10;
+                           b += (B_VAL(pix) * Cx) >> 10;
                         }
-                 if (j > 0)
-                   {
-                      pix++;
-                      r += (R_VAL(pix) * j) >> 10;
-                      g += (G_VAL(pix) * j) >> 10;
-                      b += (B_VAL(pix) * j) >> 10;
+                      if (j > 0)
+                        {
+                           pix++;
+                           r += (R_VAL(pix) * j) >> 10;
+                           g += (G_VAL(pix) * j) >> 10;
+                           b += (B_VAL(pix) * j) >> 10;
+                        }
+                      if ((yap = *yapp) > 0)
+                        {
+                           pix = *yp + *xp + src_w + pos;
+                           rr = (R_VAL(pix) * xap) >> 10;
+                           gg = (G_VAL(pix) * xap) >> 10;
+                           bb = (B_VAL(pix) * xap) >> 10;
+                           for (j = (1 << 14) - xap; j > Cx; j -= Cx)
+                             {
+                                pix++;
+                                rr += (R_VAL(pix) * Cx) >> 10;
+                                gg += (G_VAL(pix) * Cx) >> 10;
+                                bb += (B_VAL(pix) * Cx) >> 10;
+                             }
+                           if (j > 0)
+                             {
+                                pix++;
+                                rr += (R_VAL(pix) * j) >> 10;
+                                gg += (G_VAL(pix) * j) >> 10;
+                                bb += (B_VAL(pix) * j) >> 10;
+                             }
+                           r += ((rr - r) * yap) >> 8;
+                           g += ((gg - g) * yap) >> 8;
+                           b += ((bb - b) * yap) >> 8;
+                        }
+                      *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4);
+                      xp++;  xapp++;
                    }
-                 if ((yap = *yapp) > 0)
+/*               
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, w, dc->mul.col);
+                 else
+                   func(buf, dptr, w);
+                 pbuf = buf;
+ */
+                 
+                 dptr += dst_w;  dst_clip_w = w;
+                 yp++;  yapp++;
+                 xp = xpoints + dxx;
+                 xapp = xapoints + dxx;
+              }
+         }
+       else
+#endif   
+         {
+            while (dst_clip_h--)
+              {
+                 while (dst_clip_w--)
                    {
-                      pix = *yp + *xp + src_w + pos;
-                      rr = (R_VAL(pix) * xap) >> 10;
-                      gg = (G_VAL(pix) * xap) >> 10;
-                      bb = (B_VAL(pix) * xap) >> 10;
+                      Cx = *xapp >> 16;
+                      xap = *xapp & 0xffff;
+                      pix = *yp + *xp + pos;
+                      
+                      r = (R_VAL(pix) * xap) >> 10;
+                      g = (G_VAL(pix) * xap) >> 10;
+                      b = (B_VAL(pix) * xap) >> 10;
                       for (j = (1 << 14) - xap; j > Cx; j -= Cx)
                         {
                            pix++;
-                           rr += (R_VAL(pix) * Cx) >> 10;
-                           gg += (G_VAL(pix) * Cx) >> 10;
-                           bb += (B_VAL(pix) * Cx) >> 10;
+                           r += (R_VAL(pix) * Cx) >> 10;
+                           g += (G_VAL(pix) * Cx) >> 10;
+                           b += (B_VAL(pix) * Cx) >> 10;
                         }
                       if (j > 0)
                         {
                            pix++;
-                           rr += (R_VAL(pix) * j) >> 10;
-                           gg += (G_VAL(pix) * j) >> 10;
-                           bb += (B_VAL(pix) * j) >> 10;
-                        }
-                      r += ((rr - r) * yap) >> 8;
-                      g += ((gg - g) * yap) >> 8;
-                      b += ((bb - b) * yap) >> 8;
+                           r += (R_VAL(pix) * j) >> 10;
+                           g += (G_VAL(pix) * j) >> 10;
+                           b += (B_VAL(pix) * j) >> 10;
+                        }
+                      if ((yap = *yapp) > 0)
+                        {
+                           pix = *yp + *xp + src_w + pos;
+                           rr = (R_VAL(pix) * xap) >> 10;
+                           gg = (G_VAL(pix) * xap) >> 10;
+                           bb = (B_VAL(pix) * xap) >> 10;
+                           for (j = (1 << 14) - xap; j > Cx; j -= Cx)
+                             {
+                                pix++;
+                                rr += (R_VAL(pix) * Cx) >> 10;
+                                gg += (G_VAL(pix) * Cx) >> 10;
+                                bb += (B_VAL(pix) * Cx) >> 10;
+                             }
+                           if (j > 0)
+                             {
+                                pix++;
+                                rr += (R_VAL(pix) * j) >> 10;
+                                gg += (G_VAL(pix) * j) >> 10;
+                                bb += (B_VAL(pix) * j) >> 10;
+                             }
+                           r += ((rr - r) * yap) >> 8;
+                           g += ((gg - g) * yap) >> 8;
+                           b += ((bb - b) * yap) >> 8;
+                        }
+                      *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4);
+                      xp++;  xapp++;
                    }
-                 *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4);
-                 xp++;  xapp++;
-              }
-              
-            if (dc->mod.use)
-              func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
-            else if (dc->mul.use)
-              func_mul(buf, dptr, w, dc->mul.col);
-            else
-              func(buf, dptr, w);
+                 
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, w, dc->mul.col);
+                 else
+                   func(buf, dptr, w);
             
-            pbuf = buf;
-            dptr += dst_w;  dst_clip_w = w;
-            yp++;  yapp++;
-            xp = xpoints + dxx;
-            xapp = xapoints + dxx;
+                 pbuf = buf;
+                 dptr += dst_w;  dst_clip_w = w;
+                 yp++;  yapp++;
+                 xp = xpoints + dxx;
+                 xapp = xapoints + dxx;
+              }
          }
      }
 }
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evas_scale_smooth_scaler_downx_downy.c      3 Dec 2005 09:27:52 -0000       
1.3
+++ evas_scale_smooth_scaler_downx_downy.c      23 Jan 2006 07:57:30 -0000      
1.4
@@ -144,46 +144,26 @@
      }
    else
      {
-       while (dst_clip_h--)
+#ifdef DIRECT_SCALE
+        if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!dc->mod.use) && (!dc->mul.use))
          {
-            Cy = *yapp >> 16;
-            yap = *yapp & 0xffff;
-
-            while (dst_clip_w--)
+            while (dst_clip_h--)
               {
-                 Cx = *xapp >> 16;
-                 xap = *xapp & 0xffff;
-
-                 sptr = *yp + *xp + pos;
-                 pix = sptr;
-                 sptr += src_w;
-
-                 rx = (R_VAL(pix) * xap) >> 9;
-                 gx = (G_VAL(pix) * xap) >> 9;
-                 bx = (B_VAL(pix) * xap) >> 9;
-                 pix++;
-                 for (i = (1 << 14) - xap; i > Cx; i -= Cx)
-                   {
-                      rx += (R_VAL(pix) * Cx) >> 9;
-                      gx += (G_VAL(pix) * Cx) >> 9;
-                      bx += (B_VAL(pix) * Cx) >> 9;
-                      pix++;
-                   }
-                 if (i > 0)
-                   {
-                      rx += (R_VAL(pix) * i) >> 9;
-                      gx += (G_VAL(pix) * i) >> 9;
-                      bx += (B_VAL(pix) * i) >> 9;
-                   }
-
-                 r = (rx * yap) >> 14;
-                 g = (gx * yap) >> 14;
-                 b = (bx * yap) >> 14;
-
-                 for (j = (1 << 14) - yap; j > Cy; j -= Cy)
+                 Cy = *yapp >> 16;
+                 yap = *yapp & 0xffff;
+                 
+                 pbuf = dptr;
+                 while (dst_clip_w--)
                    {
+                      Cx = *xapp >> 16;
+                      xap = *xapp & 0xffff;
+                      
+                      sptr = *yp + *xp + pos;
                       pix = sptr;
                       sptr += src_w;
+                      
                       rx = (R_VAL(pix) * xap) >> 9;
                       gx = (G_VAL(pix) * xap) >> 9;
                       bx = (B_VAL(pix) * xap) >> 9;
@@ -201,15 +181,98 @@
                            gx += (G_VAL(pix) * i) >> 9;
                            bx += (B_VAL(pix) * i) >> 9;
                         }
-
-                      r += (rx * Cy) >> 14;
-                      g += (gx * Cy) >> 14;
-                      b += (bx * Cy) >> 14;
+                      
+                      r = (rx * yap) >> 14;
+                      g = (gx * yap) >> 14;
+                      b = (bx * yap) >> 14;
+                      
+                      for (j = (1 << 14) - yap; j > Cy; j -= Cy)
+                        {
+                           pix = sptr;
+                           sptr += src_w;
+                           rx = (R_VAL(pix) * xap) >> 9;
+                           gx = (G_VAL(pix) * xap) >> 9;
+                           bx = (B_VAL(pix) * xap) >> 9;
+                           pix++;
+                           for (i = (1 << 14) - xap; i > Cx; i -= Cx)
+                             {
+                                rx += (R_VAL(pix) * Cx) >> 9;
+                                gx += (G_VAL(pix) * Cx) >> 9;
+                                bx += (B_VAL(pix) * Cx) >> 9;
+                                pix++;
+                             }
+                           if (i > 0)
+                             {
+                                rx += (R_VAL(pix) * i) >> 9;
+                                gx += (G_VAL(pix) * i) >> 9;
+                                bx += (B_VAL(pix) * i) >> 9;
+                             }
+                           
+                           r += (rx * Cy) >> 14;
+                           g += (gx * Cy) >> 14;
+                           b += (bx * Cy) >> 14;
+                        }
+                      if (j > 0)
+                        {
+                           pix = sptr;
+                           sptr += src_w;
+                           rx = (R_VAL(pix) * xap) >> 9;
+                           gx = (G_VAL(pix) * xap) >> 9;
+                           bx = (B_VAL(pix) * xap) >> 9;
+                           pix++;
+                           for (i = (1 << 14) - xap; i > Cx; i -= Cx)
+                             {
+                                rx += (R_VAL(pix) * Cx) >> 9;
+                                gx += (G_VAL(pix) * Cx) >> 9;
+                                bx += (B_VAL(pix) * Cx) >> 9;
+                                pix++;
+                             }
+                           if (i > 0)
+                             {
+                                rx += (R_VAL(pix) * i) >> 9;
+                                gx += (G_VAL(pix) * i) >> 9;
+                                bx += (B_VAL(pix) * i) >> 9;
+                             }
+                           
+                           r += (rx * j) >> 14;
+                           g += (gx * j) >> 14;
+                           b += (bx * j) >> 14;
+                        }
+                      *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5);
+                      xp++;  xapp++;
                    }
-                 if (j > 0)
+/*
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, w, dc->mul.col);
+                 else
+                   func(buf, dptr, w);
+                 pbuf = dptr;
+ */              
+                 dptr += dst_w;   dst_clip_w = w;
+                 xp = xpoints + dxx;
+                 xapp = xapoints + dxx;
+                 yp++;  yapp++;
+              }
+         }
+       else
+#endif   
+         {
+            while (dst_clip_h--)
+              {
+                 Cy = *yapp >> 16;
+                 yap = *yapp & 0xffff;
+                 
+                 while (dst_clip_w--)
                    {
+                      Cx = *xapp >> 16;
+                      xap = *xapp & 0xffff;
+                      
+                      sptr = *yp + *xp + pos;
                       pix = sptr;
                       sptr += src_w;
+                      
                       rx = (R_VAL(pix) * xap) >> 9;
                       gx = (G_VAL(pix) * xap) >> 9;
                       bx = (B_VAL(pix) * xap) >> 9;
@@ -227,27 +290,80 @@
                            gx += (G_VAL(pix) * i) >> 9;
                            bx += (B_VAL(pix) * i) >> 9;
                         }
-
-                      r += (rx * j) >> 14;
-                      g += (gx * j) >> 14;
-                      b += (bx * j) >> 14;
+                      
+                      r = (rx * yap) >> 14;
+                      g = (gx * yap) >> 14;
+                      b = (bx * yap) >> 14;
+                      
+                      for (j = (1 << 14) - yap; j > Cy; j -= Cy)
+                        {
+                           pix = sptr;
+                           sptr += src_w;
+                           rx = (R_VAL(pix) * xap) >> 9;
+                           gx = (G_VAL(pix) * xap) >> 9;
+                           bx = (B_VAL(pix) * xap) >> 9;
+                           pix++;
+                           for (i = (1 << 14) - xap; i > Cx; i -= Cx)
+                             {
+                                rx += (R_VAL(pix) * Cx) >> 9;
+                                gx += (G_VAL(pix) * Cx) >> 9;
+                                bx += (B_VAL(pix) * Cx) >> 9;
+                                pix++;
+                             }
+                           if (i > 0)
+                             {
+                                rx += (R_VAL(pix) * i) >> 9;
+                                gx += (G_VAL(pix) * i) >> 9;
+                                bx += (B_VAL(pix) * i) >> 9;
+                             }
+                           
+                           r += (rx * Cy) >> 14;
+                           g += (gx * Cy) >> 14;
+                           b += (bx * Cy) >> 14;
+                        }
+                      if (j > 0)
+                        {
+                           pix = sptr;
+                           sptr += src_w;
+                           rx = (R_VAL(pix) * xap) >> 9;
+                           gx = (G_VAL(pix) * xap) >> 9;
+                           bx = (B_VAL(pix) * xap) >> 9;
+                           pix++;
+                           for (i = (1 << 14) - xap; i > Cx; i -= Cx)
+                             {
+                                rx += (R_VAL(pix) * Cx) >> 9;
+                                gx += (G_VAL(pix) * Cx) >> 9;
+                                bx += (B_VAL(pix) * Cx) >> 9;
+                                pix++;
+                             }
+                           if (i > 0)
+                             {
+                                rx += (R_VAL(pix) * i) >> 9;
+                                gx += (G_VAL(pix) * i) >> 9;
+                                bx += (B_VAL(pix) * i) >> 9;
+                             }
+                           
+                           r += (rx * j) >> 14;
+                           g += (gx * j) >> 14;
+                           b += (bx * j) >> 14;
+                        }
+                      *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5);
+                      xp++;  xapp++;
                    }
-                 *pbuf++ = ARGB_JOIN(0xff, r >> 5, g >> 5, b >> 5);
-                 xp++;  xapp++;
-              }
-
-            if (dc->mod.use)
-              func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
-            else if (dc->mul.use)
-              func_mul(buf, dptr, w, dc->mul.col);
-            else
-              func(buf, dptr, w);
 
-            pbuf = buf;
-            dptr += dst_w;   dst_clip_w = w;
-            xp = xpoints + dxx;
-            xapp = xapoints + dxx;
-            yp++;  yapp++;
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, w, dc->mul.col);
+                 else
+                   func(buf, dptr, w);
+                 
+                 pbuf = buf;
+                 dptr += dst_w;   dst_clip_w = w;
+                 xp = xpoints + dxx;
+                 xapp = xapoints + dxx;
+                 yp++;  yapp++;
+              }
          }
      }
 #else
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evas_scale_smooth_scaler_downy.c    3 Dec 2005 09:27:52 -0000       1.3
+++ evas_scale_smooth_scaler_downy.c    23 Jan 2006 07:57:30 -0000      1.4
@@ -96,72 +96,150 @@
      }
    else
      {
-       while (dst_clip_h--)
+#ifdef DIRECT_SCALE
+        if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!dc->mod.use) && (!dc->mul.use))
          {
-            Cy = *yapp >> 16;
-            yap = *yapp & 0xffff;
-
-            while (dst_clip_w--)
+            while (dst_clip_h--)
               {
-                 pix = *yp + *xp + pos;
-
-                 r = (R_VAL(pix) * yap) >> 10;
-                 g = (G_VAL(pix) * yap) >> 10;
-                 b = (B_VAL(pix) * yap) >> 10;
-                 for (j = (1 << 14) - yap; j > Cy; j -= Cy)
+                 Cy = *yapp >> 16;
+                 yap = *yapp & 0xffff;
+                 
+                  pbuf = dptr;
+                 while (dst_clip_w--)
                    {
-                      pix += src_w;
-                      r += (R_VAL(pix) * Cy) >> 10;
-                      g += (G_VAL(pix) * Cy) >> 10;
-                      b += (B_VAL(pix) * Cy) >> 10;
-                   }
-                 if (j > 0)
-                   {
-                      pix += src_w;
-                      r += (R_VAL(pix) * j) >> 10;
-                      g += (G_VAL(pix) * j) >> 10;
-                      b += (B_VAL(pix) * j) >> 10;
+                      pix = *yp + *xp + pos;
+                      
+                      r = (R_VAL(pix) * yap) >> 10;
+                      g = (G_VAL(pix) * yap) >> 10;
+                      b = (B_VAL(pix) * yap) >> 10;
+                      for (j = (1 << 14) - yap; j > Cy; j -= Cy)
+                        {
+                           pix += src_w;
+                           r += (R_VAL(pix) * Cy) >> 10;
+                           g += (G_VAL(pix) * Cy) >> 10;
+                           b += (B_VAL(pix) * Cy) >> 10;
+                        }
+                      if (j > 0)
+                        {
+                           pix += src_w;
+                           r += (R_VAL(pix) * j) >> 10;
+                           g += (G_VAL(pix) * j) >> 10;
+                           b += (B_VAL(pix) * j) >> 10;
+                        }
+                      if ((xap = *xapp) > 0)
+                        {
+                           pix = *yp + *xp + 1 + pos;
+                           rr = (R_VAL(pix) * yap) >> 10;
+                           gg = (G_VAL(pix) * yap) >> 10;
+                           bb = (B_VAL(pix) * yap) >> 10;
+                           for (j = (1 << 14) - yap; j > Cy; j -= Cy)
+                             {
+                                pix += src_w;
+                                rr += (R_VAL(pix) * Cy) >> 10;
+                                gg += (G_VAL(pix) * Cy) >> 10;
+                                bb += (B_VAL(pix) * Cy) >> 10;
+                             }
+                           if (j > 0)
+                             {
+                                pix += src_w;
+                                rr += (R_VAL(pix) * j) >> 10;
+                                gg += (G_VAL(pix) * j) >> 10;
+                                bb += (B_VAL(pix) * j) >> 10;
+                             }
+                           r += ((rr - r) * xap) >> 8;
+                           g += ((gg - g) * xap) >> 8;
+                           b += ((bb - b) * xap) >> 8;
+                        }
+                      *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4);
+                      xp++;  xapp++;
                    }
-                 if ((xap = *xapp) > 0)
+/*               
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, w, dc->mul.col);
+                 else
+                   func(buf, dptr, w);
+                 pbuf = buf;
+ */
+                 dptr += dst_w;  dst_clip_w = w;
+                 yp++;  yapp++;
+                 xp = xpoints + dxx;
+                 xapp = xapoints + dxx;
+              }
+         }
+       else
+#endif   
+         {
+            while (dst_clip_h--)
+              {
+                 Cy = *yapp >> 16;
+                 yap = *yapp & 0xffff;
+                 
+                 while (dst_clip_w--)
                    {
-                      pix = *yp + *xp + 1 + pos;
-                      rr = (R_VAL(pix) * yap) >> 10;
-                      gg = (G_VAL(pix) * yap) >> 10;
-                      bb = (B_VAL(pix) * yap) >> 10;
+                      pix = *yp + *xp + pos;
+                      
+                      r = (R_VAL(pix) * yap) >> 10;
+                      g = (G_VAL(pix) * yap) >> 10;
+                      b = (B_VAL(pix) * yap) >> 10;
                       for (j = (1 << 14) - yap; j > Cy; j -= Cy)
                         {
                            pix += src_w;
-                           rr += (R_VAL(pix) * Cy) >> 10;
-                           gg += (G_VAL(pix) * Cy) >> 10;
-                           bb += (B_VAL(pix) * Cy) >> 10;
+                           r += (R_VAL(pix) * Cy) >> 10;
+                           g += (G_VAL(pix) * Cy) >> 10;
+                           b += (B_VAL(pix) * Cy) >> 10;
                         }
                       if (j > 0)
                         {
                            pix += src_w;
-                           rr += (R_VAL(pix) * j) >> 10;
-                           gg += (G_VAL(pix) * j) >> 10;
-                           bb += (B_VAL(pix) * j) >> 10;
-                        }
-                      r += ((rr - r) * xap) >> 8;
-                      g += ((gg - g) * xap) >> 8;
-                      b += ((bb - b) * xap) >> 8;
+                           r += (R_VAL(pix) * j) >> 10;
+                           g += (G_VAL(pix) * j) >> 10;
+                           b += (B_VAL(pix) * j) >> 10;
+                        }
+                      if ((xap = *xapp) > 0)
+                        {
+                           pix = *yp + *xp + 1 + pos;
+                           rr = (R_VAL(pix) * yap) >> 10;
+                           gg = (G_VAL(pix) * yap) >> 10;
+                           bb = (B_VAL(pix) * yap) >> 10;
+                           for (j = (1 << 14) - yap; j > Cy; j -= Cy)
+                             {
+                                pix += src_w;
+                                rr += (R_VAL(pix) * Cy) >> 10;
+                                gg += (G_VAL(pix) * Cy) >> 10;
+                                bb += (B_VAL(pix) * Cy) >> 10;
+                             }
+                           if (j > 0)
+                             {
+                                pix += src_w;
+                                rr += (R_VAL(pix) * j) >> 10;
+                                gg += (G_VAL(pix) * j) >> 10;
+                                bb += (B_VAL(pix) * j) >> 10;
+                             }
+                           r += ((rr - r) * xap) >> 8;
+                           g += ((gg - g) * xap) >> 8;
+                           b += ((bb - b) * xap) >> 8;
+                        }
+                      *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4);
+                      xp++;  xapp++;
                    }
-                 *pbuf++ = ARGB_JOIN(0xff, r >> 4, g >> 4, b >> 4);
-                 xp++;  xapp++;
+                 
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, w, dc->mul.col);
+                 else
+                   func(buf, dptr, w);
+                 
+                 pbuf = buf;
+                 dptr += dst_w;  dst_clip_w = w;
+                 yp++;  yapp++;
+                 xp = xpoints + dxx;
+                 xapp = xapoints + dxx;
               }
-
-            if (dc->mod.use)
-              func_cmod(buf, dptr, w, dc->mod.r, dc->mod.g, dc->mod.b, 
dc->mod.a);
-            else if (dc->mul.use)
-              func_mul(buf, dptr, w, dc->mul.col);
-            else
-              func(buf, dptr, w);
-
-            pbuf = buf;
-            dptr += dst_w;  dst_clip_w = w;
-            yp++;  yapp++;
-            xp = xpoints + dxx;
-            xapp = xapoints + dxx;
          }
      }
 }
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_scale_smooth_scaler_up.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- evas_scale_smooth_scaler_up.c       3 Dec 2005 09:27:52 -0000       1.3
+++ evas_scale_smooth_scaler_up.c       23 Jan 2006 07:57:30 -0000      1.4
@@ -22,7 +22,7 @@
    /* a scanline buffer */
    line_buf = evas_common_image_line_buffer_obtain(dst_clip_w);
    if (!line_buf)
-      goto done_scale_up;
+     goto done_scale_up;
    buf = line_buf->image->data;
        
    src_data = src->image->data;
@@ -245,58 +245,114 @@
        DATA8   p2r = 0, p2g = 0, p2b = 0;
        DATA32 *lptr1, *lptr2;
 
-       while (dst_clip_h--)
+#ifdef DIRECT_SCALE
+       if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!dc->mod.use) && (!dc->mul.use))
          {
-            lptr1 = *rp;
-            lptr2 = lptr1 + src_w;
-            if (lptr2 > src_end) lptr2 = lptr1;
-            k = *iy;
-            dst_ptr = buf;
-            
-            lp = lin_ptr;  ix = interp_x;
-            ptr = lptr1 + *lp;
-            ptr2 = lptr2 + *lp;
-            p2r = R_VAL(ptr) + ((k * (R_VAL(ptr2) - R_VAL(ptr))) >> 8);
-            p2g = G_VAL(ptr) + ((k * (G_VAL(ptr2) - G_VAL(ptr))) >> 8);
-            p2b = B_VAL(ptr) + ((k * (B_VAL(ptr2) - B_VAL(ptr))) >> 8);
-            px = -1;
-            while (dst_clip_w--)
+            while (dst_clip_h--)
               {
-                 if (px != *lp)
+                 lptr1 = *rp;
+                 lptr2 = lptr1 + src_w;
+                 if (lptr2 > src_end) lptr2 = lptr1;
+                 k = *iy;
+                 dst_ptr = dptr;
+                 
+                 lp = lin_ptr;  ix = interp_x;
+                 ptr = lptr1 + *lp;
+                 ptr2 = lptr2 + *lp;
+                 p2r = R_VAL(ptr) + ((k * (R_VAL(ptr2) - R_VAL(ptr))) >> 8);
+                 p2g = G_VAL(ptr) + ((k * (G_VAL(ptr2) - G_VAL(ptr))) >> 8);
+                 p2b = B_VAL(ptr) + ((k * (B_VAL(ptr2) - B_VAL(ptr))) >> 8);
+                 px = -1;
+                 while (dst_clip_w--)
                    {
-                      px = *lp;
-
-                      ptr2 = lptr1 + px + 1;
-                      ptr4 = lptr2 + px + 1;
-                      if (px >= (src_w - 1))
+                      if (px != *lp)
                         {
-                           ptr2--;
-                           ptr4--;
+                           px = *lp;
+                           
+                           ptr2 = lptr1 + px + 1;
+                           ptr4 = lptr2 + px + 1;
+                           if (px >= (src_w - 1))
+                             {
+                                ptr2--;
+                                ptr4--;
+                             }
+                           p1r = p2r;
+                           p1g = p2g;
+                           p1b = p2b;
+                           p2r = R_VAL(ptr2) + ((k * (R_VAL(ptr4) - 
R_VAL(ptr2))) >> 8);
+                           p2g = G_VAL(ptr2) + ((k * (G_VAL(ptr4) - 
G_VAL(ptr2))) >> 8);
+                           p2b = B_VAL(ptr2) + ((k * (B_VAL(ptr4) - 
B_VAL(ptr2))) >> 8);
                         }
-                      p1r = p2r;
-                      p1g = p2g;
-                      p1b = p2b;
-                      p2r = R_VAL(ptr2) + ((k * (R_VAL(ptr4) - R_VAL(ptr2))) 
>> 8);
-                      p2g = G_VAL(ptr2) + ((k * (G_VAL(ptr4) - G_VAL(ptr2))) 
>> 8);
-                      p2b = B_VAL(ptr2) + ((k * (B_VAL(ptr4) - B_VAL(ptr2))) 
>> 8);
+                      i = *ix;
+                      R_VAL(dst_ptr) = p1r + ((i * (p2r - p1r)) >> 8);
+                      G_VAL(dst_ptr) = p1g + ((i * (p2g - p1g)) >> 8);
+                      B_VAL(dst_ptr) = p1b + ((i * (p2b - p1b)) >> 8);
+                      A_VAL(dst_ptr) = 0xff;
+                      
+                      dst_ptr++;  ix++;  lp++;
                    }
-                 i = *ix;
-                 R_VAL(dst_ptr) = p1r + ((i * (p2r - p1r)) >> 8);
-                 G_VAL(dst_ptr) = p1g + ((i * (p2g - p1g)) >> 8);
-                 B_VAL(dst_ptr) = p1b + ((i * (p2b - p1b)) >> 8);
-                 A_VAL(dst_ptr) = 0xff;
-
-                 dst_ptr++;  ix++;  lp++;
+                 dst_clip_w = w;  ix = interp_x;  lp = lin_ptr;
+                 dptr += dst_w;  iy++;  rp++;
+              }
+         }
+       else
+#endif   
+         {
+            while (dst_clip_h--)
+              {
+                 lptr1 = *rp;
+                 lptr2 = lptr1 + src_w;
+                 if (lptr2 > src_end) lptr2 = lptr1;
+                 k = *iy;
+                 dst_ptr = buf;
+                 
+                 lp = lin_ptr;  ix = interp_x;
+                 ptr = lptr1 + *lp;
+                 ptr2 = lptr2 + *lp;
+                 p2r = R_VAL(ptr) + ((k * (R_VAL(ptr2) - R_VAL(ptr))) >> 8);
+                 p2g = G_VAL(ptr) + ((k * (G_VAL(ptr2) - G_VAL(ptr))) >> 8);
+                 p2b = B_VAL(ptr) + ((k * (B_VAL(ptr2) - B_VAL(ptr))) >> 8);
+                 px = -1;
+                 while (dst_clip_w--)
+                   {
+                      if (px != *lp)
+                        {
+                           px = *lp;
+                           
+                           ptr2 = lptr1 + px + 1;
+                           ptr4 = lptr2 + px + 1;
+                           if (px >= (src_w - 1))
+                             {
+                                ptr2--;
+                                ptr4--;
+                             }
+                           p1r = p2r;
+                           p1g = p2g;
+                           p1b = p2b;
+                           p2r = R_VAL(ptr2) + ((k * (R_VAL(ptr4) - 
R_VAL(ptr2))) >> 8);
+                           p2g = G_VAL(ptr2) + ((k * (G_VAL(ptr4) - 
G_VAL(ptr2))) >> 8);
+                           p2b = B_VAL(ptr2) + ((k * (B_VAL(ptr4) - 
B_VAL(ptr2))) >> 8);
+                        }
+                      i = *ix;
+                      R_VAL(dst_ptr) = p1r + ((i * (p2r - p1r)) >> 8);
+                      G_VAL(dst_ptr) = p1g + ((i * (p2g - p1g)) >> 8);
+                      B_VAL(dst_ptr) = p1b + ((i * (p2b - p1b)) >> 8);
+                      A_VAL(dst_ptr) = 0xff;
+                      
+                      dst_ptr++;  ix++;  lp++;
+                   }
+                 dst_clip_w = w;  ix = interp_x;  lp = lin_ptr;
+                 /* * blend here [clip_w *] buf -> dptr * */
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, dst_clip_w, dc->mod.r, dc->mod.g, 
dc->mod.b, dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, dst_clip_w, dc->mul.col);
+                 else
+                   func(buf, dptr, dst_clip_w);
+                 dptr += dst_w;  iy++;  rp++;
               }
-            dst_clip_w = w;  ix = interp_x;  lp = lin_ptr;
-            /* * blend here [clip_w *] buf -> dptr * */
-            if (dc->mod.use)
-              func_cmod(buf, dptr, dst_clip_w, dc->mod.r, dc->mod.g, 
dc->mod.b, dc->mod.a);
-            else if (dc->mul.use)
-              func_mul(buf, dptr, dst_clip_w, dc->mul.col);
-            else
-              func(buf, dptr, dst_clip_w);
-            dptr += dst_w;  iy++;  rp++;
          }
      }
 #else
@@ -304,7 +360,7 @@
      {
        int     k, px, a, i;
        DATA32 *lptr1, *lptr2;
-       
+
        while (dst_clip_h--)
          {
             
@@ -416,104 +472,206 @@
      {
        int     k, px, i;
        DATA32 *lptr1, *lptr2;
-            
-       while (dst_clip_h--)
+
+#ifdef DIRECT_SCALE
+       if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+           (!dc->mod.use) && (!dc->mul.use))
          {
-            lptr1 = *rp;
-            lptr2 = lptr1 + src_w;
-            if (lptr2 > src_end) lptr2 = lptr1;
-            k = *iy / 2;
-            dst_ptr = buf;
-            
-            /* mm5 = k */
-            movd_m2r(k, mm5);
-            punpcklwd_r2r(mm5, mm5);
-            punpckldq_r2r(mm5, mm5);
-            
-            lp = lin_ptr;  ix = interp_x;
-            ptr = lptr1 + *lp;
-            ptr2 = lptr2 + *lp;
-            /* right edge */
-            movd_m2r(*ptr, mm1);
-            pxor_r2r(mm7, mm7);
-            punpcklbw_r2r(mm7, mm1);
-            
-            movd_m2r(*ptr2, mm2);
-            pxor_r2r(mm7, mm7);
-            punpcklbw_r2r(mm7, mm2);
-            
-            psubsw_r2r(mm1, mm2);
-            pmullw_r2r(mm5, mm2);
-            psraw_i2r(7, mm2);
-            
-            paddsw_r2r(mm2, mm1);
-            /* mm1 = right edge */
-            
-            px = -1;
-            while (dst_clip_w--)
+            while (dst_clip_h--)
               {
-                 /* if we have a new pair of horizontal pixels to */
-                 /* interpolate between them vertically */
-                 if (px != *lp)
+                 lptr1 = *rp;
+                 lptr2 = lptr1 + src_w;
+                 if (lptr2 > src_end) lptr2 = lptr1;
+                 k = *iy / 2;
+                 dst_ptr = dptr;
+                 
+                 /* mm5 = k */
+                 movd_m2r(k, mm5);
+                 punpcklwd_r2r(mm5, mm5);
+                 punpckldq_r2r(mm5, mm5);
+                 
+                 lp = lin_ptr;  ix = interp_x;
+                 ptr = lptr1 + *lp;
+                 ptr2 = lptr2 + *lp;
+                 /* right edge */
+                 movd_m2r(*ptr, mm1);
+                 pxor_r2r(mm7, mm7);
+                 punpcklbw_r2r(mm7, mm1);
+                 
+                 movd_m2r(*ptr2, mm2);
+                 pxor_r2r(mm7, mm7);
+                 punpcklbw_r2r(mm7, mm2);
+                 
+                 psubsw_r2r(mm1, mm2);
+                 pmullw_r2r(mm5, mm2);
+                 psraw_i2r(7, mm2);
+                 
+                 paddsw_r2r(mm2, mm1);
+                 /* mm1 = right edge */
+                 
+                 px = -1;
+                 while (dst_clip_w--)
                    {
-                      px = *lp;
-                      
-                      ptr2 = lptr1 + px + 1;
-                      ptr4 = lptr2 + px + 1;
-                      if (px >= (src_w - 1))
+                      /* if we have a new pair of horizontal pixels to */
+                      /* interpolate between them vertically */
+                      if (px != *lp)
                         {
-                           ptr2--;
-                           ptr4--;
+                           px = *lp;
+                           
+                           ptr2 = lptr1 + px + 1;
+                           ptr4 = lptr2 + px + 1;
+                           if (px >= (src_w - 1))
+                             {
+                                ptr2--;
+                                ptr4--;
+                             }
+                           movq_r2r(mm1, mm0);
+                           
+                           /* right edge */
+                           movd_m2r(*ptr2, mm1);
+                           pxor_r2r(mm7, mm7);
+                           punpcklbw_r2r(mm7, mm1);
+                           
+                           movd_m2r(*ptr4, mm2);
+                           pxor_r2r(mm7, mm7);
+                           punpcklbw_r2r(mm7, mm2);
+                           
+                           psubsw_r2r(mm1, mm2);
+                           pmullw_r2r(mm5, mm2);
+                           psraw_i2r(7, mm2);
+                           
+                           paddsw_r2r(mm2, mm1);
+                           /* mm1 = right edge */
                         }
-                      movq_r2r(mm1, mm0);
                       
-                      /* right edge */
-                      movd_m2r(*ptr2, mm1);
-                      pxor_r2r(mm7, mm7);
-                      punpcklbw_r2r(mm7, mm1);
-                      
-                      movd_m2r(*ptr4, mm2);
-                      pxor_r2r(mm7, mm7);
-                      punpcklbw_r2r(mm7, mm2);
-                      
-                      psubsw_r2r(mm1, mm2);
-                      pmullw_r2r(mm5, mm2);
-                      psraw_i2r(7, mm2);
+                      i = *ix / 2;
+                      
+                      movq_r2r(mm1, mm4);
+                      
+                      movd_m2r(i, mm2);
+                      punpcklwd_r2r(mm2, mm2);
+                      punpckldq_r2r(mm2, mm2);
                       
-                      paddsw_r2r(mm2, mm1);
-                      /* mm1 = right edge */
+                      movq_r2r(mm0, mm3);
+                      
+                      psubsw_r2r(mm3, mm4);
+                      pmullw_r2r(mm2, mm4);
+                      psraw_i2r(7, mm4);
+                      paddsw_r2r(mm4, mm3);
+                      
+                      packuswb_r2r(mm3, mm3);
+                      /* blend mm3... */
+                      movd_r2m(mm3, *dst_ptr);
+                      
+                      dst_ptr++;  ix++;  lp++;
                    }
+                 /* * blend here [clip_w *] buf -> dptr * */
+                 dst_clip_w = w;  ix = interp_x;  lp = lin_ptr;
+                 dptr += dst_w;  iy++;  rp++;
+              }
+         }
+       else
+#endif   
+         {
+            while (dst_clip_h--)
+              {
+                 lptr1 = *rp;
+                 lptr2 = lptr1 + src_w;
+                 if (lptr2 > src_end) lptr2 = lptr1;
+                 k = *iy / 2;
+                 dst_ptr = buf;
+                 
+                 /* mm5 = k */
+                 movd_m2r(k, mm5);
+                 punpcklwd_r2r(mm5, mm5);
+                 punpckldq_r2r(mm5, mm5);
+                 
+                 lp = lin_ptr;  ix = interp_x;
+                 ptr = lptr1 + *lp;
+                 ptr2 = lptr2 + *lp;
+                 /* right edge */
+                 movd_m2r(*ptr, mm1);
+                 pxor_r2r(mm7, mm7);
+                 punpcklbw_r2r(mm7, mm1);
+                 
+                 movd_m2r(*ptr2, mm2);
+                 pxor_r2r(mm7, mm7);
+                 punpcklbw_r2r(mm7, mm2);
+                 
+                 psubsw_r2r(mm1, mm2);
+                 pmullw_r2r(mm5, mm2);
+                 psraw_i2r(7, mm2);
                  
-                 i = *ix / 2;
-                 
-                 movq_r2r(mm1, mm4);
-                 
-                 movd_m2r(i, mm2);
-                 punpcklwd_r2r(mm2, mm2);
-                 punpckldq_r2r(mm2, mm2);
-                 
-                 movq_r2r(mm0, mm3);
-                 
-                 psubsw_r2r(mm3, mm4);
-                 pmullw_r2r(mm2, mm4);
-                 psraw_i2r(7, mm4);
-                 paddsw_r2r(mm4, mm3);
-                 
-                 packuswb_r2r(mm3, mm3);
-                 /* blend mm3... */
-                 movd_r2m(mm3, *dst_ptr);
+                 paddsw_r2r(mm2, mm1);
+                 /* mm1 = right edge */
                  
-                 dst_ptr++;  ix++;  lp++;
+                 px = -1;
+                 while (dst_clip_w--)
+                   {
+                      /* if we have a new pair of horizontal pixels to */
+                      /* interpolate between them vertically */
+                      if (px != *lp)
+                        {
+                           px = *lp;
+                           
+                           ptr2 = lptr1 + px + 1;
+                           ptr4 = lptr2 + px + 1;
+                           if (px >= (src_w - 1))
+                             {
+                                ptr2--;
+                                ptr4--;
+                             }
+                           movq_r2r(mm1, mm0);
+                           
+                           /* right edge */
+                           movd_m2r(*ptr2, mm1);
+                           pxor_r2r(mm7, mm7);
+                           punpcklbw_r2r(mm7, mm1);
+                           
+                           movd_m2r(*ptr4, mm2);
+                           pxor_r2r(mm7, mm7);
+                           punpcklbw_r2r(mm7, mm2);
+                           
+                           psubsw_r2r(mm1, mm2);
+                           pmullw_r2r(mm5, mm2);
+                           psraw_i2r(7, mm2);
+                           
+                           paddsw_r2r(mm2, mm1);
+                           /* mm1 = right edge */
+                        }
+                      
+                      i = *ix / 2;
+                      
+                      movq_r2r(mm1, mm4);
+                      
+                      movd_m2r(i, mm2);
+                      punpcklwd_r2r(mm2, mm2);
+                      punpckldq_r2r(mm2, mm2);
+                      
+                      movq_r2r(mm0, mm3);
+                      
+                      psubsw_r2r(mm3, mm4);
+                      pmullw_r2r(mm2, mm4);
+                      psraw_i2r(7, mm4);
+                      paddsw_r2r(mm4, mm3);
+                      
+                      packuswb_r2r(mm3, mm3);
+                      /* blend mm3... */
+                      movd_r2m(mm3, *dst_ptr);
+                      
+                      dst_ptr++;  ix++;  lp++;
+                   }
+                 /* * blend here [clip_w *] buf -> dptr * */
+                 dst_clip_w = w;  ix = interp_x;  lp = lin_ptr;
+                 if (dc->mod.use)
+                   func_cmod(buf, dptr, dst_clip_w, dc->mod.r, dc->mod.g, 
dc->mod.b, dc->mod.a);
+                 else if (dc->mul.use)
+                   func_mul(buf, dptr, dst_clip_w, dc->mul.col);
+                 else
+                   func(buf, dptr, dst_clip_w);
+                 dptr += dst_w;  iy++;  rp++;
               }
-            /* * blend here [clip_w *] buf -> dptr * */
-            dst_clip_w = w;  ix = interp_x;  lp = lin_ptr;
-            if (dc->mod.use)
-              func_cmod(buf, dptr, dst_clip_w, dc->mod.r, dc->mod.g, 
dc->mod.b, dc->mod.a);
-            else if (dc->mul.use)
-              func_mul(buf, dptr, dst_clip_w, dc->mul.col);
-            else
-              func(buf, dptr, dst_clip_w);
-            dptr += dst_w;  iy++;  rp++;
          }
      }
 #endif




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to