Mercurial > pygame
diff src/pixelarray.c @ 1001:7355da1a6df6
Release GIL where possible in PixelArray.
| author | marcus |
|---|---|
| date | Wed, 09 Apr 2008 08:15:21 +0000 |
| parents | 509ba60a0f2b |
| children | 9e42170b0f2e |
line wrap: on
line diff
--- a/src/pixelarray.c Wed Apr 09 08:11:40 2008 +0000 +++ b/src/pixelarray.c Wed Apr 09 08:15:21 2008 +0000 @@ -696,6 +696,7 @@ y = ystart; vy = val->ystart; + Py_BEGIN_ALLOW_THREADS; /* Single value assignment. */ switch (bpp) { @@ -800,6 +801,7 @@ } break; } + Py_END_ALLOW_THREADS; if (copied) { @@ -903,6 +905,7 @@ absystep = ABS (ystep); y = ystart; + Py_BEGIN_ALLOW_THREADS; switch (bpp) { case 1: @@ -984,6 +987,7 @@ } break; } + Py_END_ALLOW_THREADS; return 0; } @@ -1039,6 +1043,7 @@ absystep = ABS (ystep); y = ystart; + Py_BEGIN_ALLOW_THREADS; /* Single value assignment. */ switch (bpp) { @@ -1117,6 +1122,7 @@ } break; } + Py_END_ALLOW_THREADS; return 0; } @@ -1196,6 +1202,7 @@ absystep = ABS (ystep); y = ystart; + Py_BEGIN_ALLOW_THREADS; /* Single value assignment. */ switch (bpp) { @@ -1274,6 +1281,7 @@ } break; } + Py_END_ALLOW_THREADS; return 0; } @@ -1349,6 +1357,7 @@ Uint32 posy = 0; Sint32 absxstep; Sint32 absystep; + int found = 0; surface = PySurface_AsSurface (array->surface); bpp = surface->format->BytesPerPixel; @@ -1361,10 +1370,11 @@ absystep = ABS (array->ystep); y = array->ystart; + Py_BEGIN_ALLOW_THREADS; switch (bpp) { case 1: - while (posy < array->ylen) + while (posy < array->ylen && !found) { posx = 0; x = array->xstart; @@ -1372,7 +1382,10 @@ { if (*((Uint8 *) pixels + y * array->padding + x) == (Uint8) color) - return 1; + { + found = 1; + break; + } x += array->xstep; posx += absxstep; } @@ -1381,7 +1394,7 @@ } break; case 2: - while (posy < array->ylen) + while (posy < array->ylen && !found) { posx = 0; x = array->xstart; @@ -1389,7 +1402,10 @@ { if (*((Uint16 *) (pixels + y * array->padding) + x) == (Uint16) color) - return 1; + { + found = 1; + break; + } x += array->xstep; posx += absxstep; } @@ -1402,7 +1418,7 @@ Uint32 pxcolor; Uint8 *pix; - while (posy < array->ylen) + while (posy < array->ylen && !found) { posx = 0; x = array->xstart; @@ -1415,7 +1431,10 @@ pxcolor = (pix[2]) + (pix[1] << 8) + (pix[0] << 16); #endif if (pxcolor == color) - return 1; + { + found = 1; + break; + } x += array->xstep; posx += absxstep; } @@ -1425,7 +1444,7 @@ break; } default: /* 4 bpp */ - while (posy < array->ylen) + while (posy < array->ylen && !found) { posx = 0; x = array->xstart; @@ -1433,7 +1452,10 @@ { if (*((Uint32 *) (pixels + y * array->padding) + x) == color) - return 1; + { + found = 1; + break; + } x += array->xstep; posx += absxstep; } @@ -1442,7 +1464,9 @@ } break; } - return 0; + + Py_END_ALLOW_THREADS; + return found; } /**
