diff --git a/lib/operators.c b/lib/operators.c index 8961c2ed..00bc49fa 100644 --- a/lib/operators.c +++ b/lib/operators.c @@ -63,12 +63,13 @@ if (FIMG_TYPE_RGB != a->type || FIMG_TYPE_RGB != b->type) { nbpixels = a->width * a->height; + /* are we cache-friendly here ? + * we need an accurate benchmarking... */ + for (idx=0; idxR[idx] += a->R[idx]; b->G[idx] += a->G[idx]; b->B[idx] += a->B[idx]; - /* are we cache-friendly here ? - * we need an accurate benchmarking... */ } return 0; @@ -85,8 +86,8 @@ int idx, nbpixels; fprintf(stderr, ">>> %s ( %p %p %p )\n", __func__, a, b, d); #endif -if (FIMG_TYPE_RGB != a->type || - FIMG_TYPE_RGB != b->type || +if ( FIMG_TYPE_RGB != a->type || + FIMG_TYPE_RGB != b->type || FIMG_TYPE_RGB != d->type) { fprintf(stderr, "%s : got a bad type fimg\n", __func__); return -8; @@ -175,13 +176,15 @@ if (FIMG_TYPE_RGB != a->type || FIMG_TYPE_RGB != b->type || return -8; } -nbiter = a->width * a->height * 3; +nbiter = a->width * a->height; for (idx=0; idxR[idx] > b->R[idx]) - d->R[idx] = a->R[idx]; - else - d->R[idx] = b->R[idx]; + if (a->R[idx] > b->R[idx]) d->R[idx] = a->R[idx]; + else d->R[idx] = b->R[idx]; + if (a->G[idx] > b->G[idx]) d->G[idx] = a->G[idx]; + else d->G[idx] = b->G[idx]; + if (a->B[idx] > b->B[idx]) d->B[idx] = a->B[idx]; + else d->B[idx] = b->B[idx]; } return 0; @@ -201,13 +204,15 @@ if (FIMG_TYPE_RGB != a->type || FIMG_TYPE_RGB != b->type || return -8; } -nbiter = a->width * a->height * 3; +nbiter = a->width * a->height ; for (idx=0; idxR[idx] < b->R[idx]) - d->R[idx] = a->R[idx]; - else - d->R[idx] = b->R[idx]; + if (a->R[idx] < b->R[idx]) d->R[idx] = a->R[idx]; + else d->R[idx] = b->R[idx]; + if (a->G[idx] < b->G[idx]) d->G[idx] = a->G[idx]; + else d->G[idx] = b->G[idx]; + if (a->B[idx] < b->B[idx]) d->B[idx] = a->B[idx]; + else d->B[idx] = b->B[idx]; } return 0;