@@ -105,6 +105,19 @@ _get_transform_mesh(PyObject *py_affine, npy_intp *dims)
105105}
106106
107107
108+ template <class T >
109+ static void
110+ resample (PyArrayObject* input, PyArrayObject* output, resample_params_t params)
111+ {
112+ Py_BEGIN_ALLOW_THREADS
113+ resample (
114+ (T*)PyArray_DATA (input), PyArray_DIM (input, 1 ), PyArray_DIM (input, 0 ),
115+ (T*)PyArray_DATA (output), PyArray_DIM (output, 1 ), PyArray_DIM (output, 0 ),
116+ params);
117+ Py_END_ALLOW_THREADS
118+ }
119+
120+
108121static PyObject *
109122image_resample (PyObject *self, PyObject* args, PyObject *kwargs)
110123{
@@ -216,56 +229,20 @@ image_resample(PyObject *self, PyObject* args, PyObject *kwargs)
216229 }
217230
218231 if (PyArray_DIM (input_array, 2 ) == 4 ) {
219- switch (PyArray_TYPE (input_array)) {
220- case NPY_BYTE:
232+ switch (PyArray_TYPE (input_array)) {
221233 case NPY_UINT8:
222- Py_BEGIN_ALLOW_THREADS
223- resample (
224- (agg::rgba8 *)PyArray_DATA (input_array),
225- PyArray_DIM (input_array, 1 ),
226- PyArray_DIM (input_array, 0 ),
227- (agg::rgba8 *)PyArray_DATA (output_array),
228- PyArray_DIM (output_array, 1 ),
229- PyArray_DIM (output_array, 0 ),
230- params);
231- Py_END_ALLOW_THREADS
234+ case NPY_INT8:
235+ resample<agg::rgba8>(input_array, output_array, params);
232236 break ;
233237 case NPY_UINT16:
234238 case NPY_INT16:
235- Py_BEGIN_ALLOW_THREADS
236- resample (
237- (agg::rgba16 *)PyArray_DATA (input_array),
238- PyArray_DIM (input_array, 1 ),
239- PyArray_DIM (input_array, 0 ),
240- (agg::rgba16 *)PyArray_DATA (output_array),
241- PyArray_DIM (output_array, 1 ),
242- PyArray_DIM (output_array, 0 ),
243- params);
244- Py_END_ALLOW_THREADS
239+ resample<agg::rgba16>(input_array, output_array, params);
245240 break ;
246241 case NPY_FLOAT32:
247- Py_BEGIN_ALLOW_THREADS
248- resample (
249- (agg::rgba32 *)PyArray_DATA (input_array),
250- PyArray_DIM (input_array, 1 ),
251- PyArray_DIM (input_array, 0 ),
252- (agg::rgba32 *)PyArray_DATA (output_array),
253- PyArray_DIM (output_array, 1 ),
254- PyArray_DIM (output_array, 0 ),
255- params);
256- Py_END_ALLOW_THREADS
242+ resample<agg::rgba32>(input_array, output_array, params);
257243 break ;
258244 case NPY_FLOAT64:
259- Py_BEGIN_ALLOW_THREADS
260- resample (
261- (agg::rgba64 *)PyArray_DATA (input_array),
262- PyArray_DIM (input_array, 1 ),
263- PyArray_DIM (input_array, 0 ),
264- (agg::rgba64 *)PyArray_DATA (output_array),
265- PyArray_DIM (output_array, 1 ),
266- PyArray_DIM (output_array, 0 ),
267- params);
268- Py_END_ALLOW_THREADS
245+ resample<agg::rgba64>(input_array, output_array, params);
269246 break ;
270247 default :
271248 PyErr_SetString (
@@ -284,54 +261,18 @@ image_resample(PyObject *self, PyObject* args, PyObject *kwargs)
284261 } else { // NDIM == 2
285262 switch (PyArray_TYPE (input_array)) {
286263 case NPY_DOUBLE:
287- Py_BEGIN_ALLOW_THREADS
288- resample (
289- (double *)PyArray_DATA (input_array),
290- PyArray_DIM (input_array, 1 ),
291- PyArray_DIM (input_array, 0 ),
292- (double *)PyArray_DATA (output_array),
293- PyArray_DIM (output_array, 1 ),
294- PyArray_DIM (output_array, 0 ),
295- params);
296- Py_END_ALLOW_THREADS
264+ resample<double >(input_array, output_array, params);
297265 break ;
298266 case NPY_FLOAT:
299- Py_BEGIN_ALLOW_THREADS
300- resample (
301- (float *)PyArray_DATA (input_array),
302- PyArray_DIM (input_array, 1 ),
303- PyArray_DIM (input_array, 0 ),
304- (float *)PyArray_DATA (output_array),
305- PyArray_DIM (output_array, 1 ),
306- PyArray_DIM (output_array, 0 ),
307- params);
308- Py_END_ALLOW_THREADS
267+ resample<float >(input_array, output_array, params);
309268 break ;
310269 case NPY_UINT8:
311- case NPY_BYTE:
312- Py_BEGIN_ALLOW_THREADS
313- resample (
314- (unsigned char *)PyArray_DATA (input_array),
315- PyArray_DIM (input_array, 1 ),
316- PyArray_DIM (input_array, 0 ),
317- (unsigned char *)PyArray_DATA (output_array),
318- PyArray_DIM (output_array, 1 ),
319- PyArray_DIM (output_array, 0 ),
320- params);
321- Py_END_ALLOW_THREADS
270+ case NPY_INT8:
271+ resample<unsigned char >(input_array, output_array, params);
322272 break ;
323273 case NPY_UINT16:
324274 case NPY_INT16:
325- Py_BEGIN_ALLOW_THREADS
326- resample (
327- (unsigned short *)PyArray_DATA (input_array),
328- PyArray_DIM (input_array, 1 ),
329- PyArray_DIM (input_array, 0 ),
330- (unsigned short *)PyArray_DATA (output_array),
331- PyArray_DIM (output_array, 1 ),
332- PyArray_DIM (output_array, 0 ),
333- params);
334- Py_END_ALLOW_THREADS
275+ resample<unsigned short >(input_array, output_array, params);
335276 break ;
336277 default :
337278 PyErr_SetString (PyExc_ValueError, " Unsupported dtype" );
0 commit comments