# HG changeset patch # User arpi # Date 1029531770 0 # Node ID 273e374311c6d2e730d06b9cc339fd7f745c3dfa # Parent ef9f4c1a3345d7038de8e29990469c93f4c32189 speedup of gauss diff -r ef9f4c1a3345 -r 273e374311c6 TOOLS/subfont-c/subfont.c --- a/TOOLS/subfont-c/subfont.c Fri Aug 16 16:35:43 2002 +0000 +++ b/TOOLS/subfont-c/subfont.c Fri Aug 16 21:02:50 2002 +0000 @@ -626,32 +626,73 @@ unsigned char *s = buffer - r; unsigned char *t = tmp; + + int *m_end=m+256*mwidth; + for (y = 0; y=width) ? (r+width-x):mwidth; + unsigned* mp = m + 256*x1; int mx; - for (mx = x1; mx>16; } } tmp -= r*width; + for (x = 0; x=height) ? (r+height-y):mwidth; - unsigned char *smy = s + y1*width; + register unsigned *mp = m + 256*y1; + register unsigned char *smy = s + y1*width; int my; - for (my = y1; my>16; + } +#else + // pass 1: 0..r + for (y = 0; y=height) ? (r+height-y):mwidth; + unsigned char *smy = s + y1*width; + unsigned* mp = m + 256*y1; + for (; my>16; } + // pass 2: r..(height-r) + for (; y>16; + } + // pass 3: (height-r)..height + for (; y>16; + } +#endif } } @@ -691,11 +732,12 @@ unsigned volume = 0; // volume under Gaussian area is exactly -pi*base/A unsigned *g = (unsigned*)malloc(g_w * sizeof(unsigned)); + unsigned *gt = (unsigned*)malloc(256 * g_w * sizeof(unsigned)); unsigned *om = (unsigned*)malloc(o_w*o_w * sizeof(unsigned)); unsigned char *omt = malloc(o_size*256); unsigned char *omtp = omt; - if (g==NULL || om==NULL || omt==NULL) ERROR("malloc failed."); + if (g==NULL || gt==NULL || om==NULL || omt==NULL) ERROR("malloc failed."); // gaussian curve for (i = 0; i