Skip to content

Commit 6e0dcdd

Browse files
committed
Use vectorisable operations in single-band getextrema
1 parent 28cb4a5 commit 6e0dcdd

1 file changed

Lines changed: 6 additions & 10 deletions

File tree

src/libImaging/GetBBox.c

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,8 @@ ImagingGetExtrema(Imaging im, void *extrema) {
166166
for (y = 0; y < im->ysize; y++) {
167167
UINT8 *in = im->image8[y];
168168
for (x = 0; x < im->xsize; x++) {
169-
if (imin > in[x]) {
170-
imin = in[x];
171-
} else if (imax < in[x]) {
172-
imax = in[x];
173-
}
169+
imin = imin < in[x] ? imin : in[x];
170+
imax = imax > in[x] ? imax : in[x];
174171
}
175172
if (imin == 0 && imax == 255) {
176173
break;
@@ -184,11 +181,8 @@ ImagingGetExtrema(Imaging im, void *extrema) {
184181
for (y = 0; y < im->ysize; y++) {
185182
INT32 *in = im->image32[y];
186183
for (x = 0; x < im->xsize; x++) {
187-
if (imin > in[x]) {
188-
imin = in[x];
189-
} else if (imax < in[x]) {
190-
imax = in[x];
191-
}
184+
imin = imin < in[x] ? imin : in[x];
185+
imax = imax > in[x] ? imax : in[x];
192186
}
193187
}
194188
memcpy(extrema, &imin, sizeof(imin));
@@ -199,6 +193,8 @@ ImagingGetExtrema(Imaging im, void *extrema) {
199193
for (y = 0; y < im->ysize; y++) {
200194
FLOAT32 *in = (FLOAT32 *)im->image32[y];
201195
for (x = 0; x < im->xsize; x++) {
196+
// Kept as if/else (unlike the integer branches above),
197+
// since float min/max isn't vectorisable due to NaN semantics.
202198
if (fmin > in[x]) {
203199
fmin = in[x];
204200
} else if (fmax < in[x]) {

0 commit comments

Comments
 (0)