diff --git a/src/omv/img/integral.c b/src/omv/img/integral.c index 391dca380..cfc20baa4 100644 --- a/src/omv/img/integral.c +++ b/src/omv/img/integral.c @@ -5,21 +5,22 @@ void imlib_integral_image(struct image *src, struct integral_image *sum) { - int x, y, s,t; - unsigned char *data = src->pixels; + typeof(*src->data) *data = src->data; typeof(*sum->data) *sumData = sum->data; - for (y=0; yh; y++) { - s = 0; + // Compute first column to avoid branching + for (int s=0, x=0; xw; x++) { + /* sum of the current row (integer) */ + s += data[src->w+x]; + sumData[src->w+x] = s; + } + + for (int y=1; yh; y++) { /* loop over the number of columns */ - for (x=0; xw; x++) { - /* sum of the current row (integer)*/ + for (int s=0, x=0; xw; x++) { + /* sum of the current row (integer) */ s += data[y*src->w+x]; - t = s; - if (y != 0) { - t += sumData[(y-1)*src->w+x]; - } - sumData[y*src->w+x]=t; + sumData[y*src->w+x] = s+sumData[(y-1)*src->w+x]; } } }