oilify() takes 10.5 seconds instead of 14.5 now (gprof CPU time, not elapsed time)

This commit is contained in:
Elliot Lee 1998-01-29 05:13:32 +00:00
parent 19ee6bd5f7
commit 9af736f243
2 changed files with 36 additions and 28 deletions

View File

@ -215,6 +215,8 @@ oilify (GDrawable *drawable)
gint Hist[4][HISTSIZE]; gint Hist[4][HISTSIZE];
gpointer pr1, pr2; gpointer pr1, pr2;
gint progress, max_progress; gint progress, max_progress;
gint *tmp1, *tmp2;
guchar *guc_tmp1;
/* get the selection bounds */ /* get the selection bounds */
gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2); gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2);
@ -239,13 +241,9 @@ oilify (GDrawable *drawable)
for (x = dest_rgn.x; x < (dest_rgn.x + dest_rgn.w); x++) for (x = dest_rgn.x; x < (dest_rgn.x + dest_rgn.w); x++)
{ {
for (b = 0; b < bytes; b++) memset(Cnt, 0, sizeof(Cnt));
{ memset(Val, 0, sizeof(Val));
Cnt[b] = 0; memset(Hist, 0, sizeof(Hist));
Val[b] = 0;
for (i = 0; i < HISTSIZE; i++)
Hist[b][i] = 0;
}
x3 = CLAMP ((x - n), x1, x2); x3 = CLAMP ((x - n), x1, x2);
y3 = CLAMP ((y - n), y1, y2); y3 = CLAMP ((y - n), y1, y2);
@ -264,12 +262,17 @@ oilify (GDrawable *drawable)
for (xx = 0; xx < src_rgn.w; xx++) for (xx = 0; xx < src_rgn.w; xx++)
{ {
for (b = 0; b < bytes; b++) for (b = 0,
tmp1 = Val,
tmp2 = Cnt,
guc_tmp1 = src;
b < bytes;
b++, tmp1++, tmp2++, guc_tmp1++)
{ {
if ((c = ++Hist[b][px = src[b]]) > Cnt[b]) if ((c = ++Hist[b][*guc_tmp1]) > *tmp2)
{ {
Val[b] = px; *tmp1 = *guc_tmp1;
Cnt[b] = c; *tmp2 = c;
} }
} }
@ -280,14 +283,15 @@ oilify (GDrawable *drawable)
} }
} }
for (b = 0; b < bytes; b++) for (b = 0, tmp1 = Val; b < bytes; b++)
*dest++ = Val[b]; *dest++ = *tmp1++;
} }
dest_row += dest_rgn.rowstride; dest_row += dest_rgn.rowstride;
} }
progress += dest_rgn.w * dest_rgn.h; progress += dest_rgn.w * dest_rgn.h;
if((progress % 5) == 0)
gimp_progress_update ((double) progress / (double) max_progress); gimp_progress_update ((double) progress / (double) max_progress);
} }

View File

@ -215,6 +215,8 @@ oilify (GDrawable *drawable)
gint Hist[4][HISTSIZE]; gint Hist[4][HISTSIZE];
gpointer pr1, pr2; gpointer pr1, pr2;
gint progress, max_progress; gint progress, max_progress;
gint *tmp1, *tmp2;
guchar *guc_tmp1;
/* get the selection bounds */ /* get the selection bounds */
gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2); gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2);
@ -239,13 +241,9 @@ oilify (GDrawable *drawable)
for (x = dest_rgn.x; x < (dest_rgn.x + dest_rgn.w); x++) for (x = dest_rgn.x; x < (dest_rgn.x + dest_rgn.w); x++)
{ {
for (b = 0; b < bytes; b++) memset(Cnt, 0, sizeof(Cnt));
{ memset(Val, 0, sizeof(Val));
Cnt[b] = 0; memset(Hist, 0, sizeof(Hist));
Val[b] = 0;
for (i = 0; i < HISTSIZE; i++)
Hist[b][i] = 0;
}
x3 = CLAMP ((x - n), x1, x2); x3 = CLAMP ((x - n), x1, x2);
y3 = CLAMP ((y - n), y1, y2); y3 = CLAMP ((y - n), y1, y2);
@ -264,12 +262,17 @@ oilify (GDrawable *drawable)
for (xx = 0; xx < src_rgn.w; xx++) for (xx = 0; xx < src_rgn.w; xx++)
{ {
for (b = 0; b < bytes; b++) for (b = 0,
tmp1 = Val,
tmp2 = Cnt,
guc_tmp1 = src;
b < bytes;
b++, tmp1++, tmp2++, guc_tmp1++)
{ {
if ((c = ++Hist[b][px = src[b]]) > Cnt[b]) if ((c = ++Hist[b][*guc_tmp1]) > *tmp2)
{ {
Val[b] = px; *tmp1 = *guc_tmp1;
Cnt[b] = c; *tmp2 = c;
} }
} }
@ -280,14 +283,15 @@ oilify (GDrawable *drawable)
} }
} }
for (b = 0; b < bytes; b++) for (b = 0, tmp1 = Val; b < bytes; b++)
*dest++ = Val[b]; *dest++ = *tmp1++;
} }
dest_row += dest_rgn.rowstride; dest_row += dest_rgn.rowstride;
} }
progress += dest_rgn.w * dest_rgn.h; progress += dest_rgn.w * dest_rgn.h;
if((progress % 5) == 0)
gimp_progress_update ((double) progress / (double) max_progress); gimp_progress_update ((double) progress / (double) max_progress);
} }