Added ability to pass memoryview object to ImageDecoder

This commit is contained in:
Alexander Piskun 2023-02-10 16:04:32 +03:00
parent 4ab4bfe89b
commit c7aceff185
No known key found for this signature in database
GPG Key ID: 1F0BF0EC3CF22721

View File

@ -116,12 +116,24 @@ _dealloc(ImagingDecoderObject *decoder) {
static PyObject *
_decode(ImagingDecoderObject *decoder, PyObject *args) {
PyObject *input_object, *memview = NULL;
Py_buffer *memview_buf;
UINT8 *buffer;
Py_ssize_t bufsize;
int status;
ImagingSectionCookie cookie;
if (!PyArg_ParseTuple(args, "y#", &buffer, &bufsize)) {
if (!PyArg_ParseTuple(args, "O", &input_object)) {
return NULL;
}
if (PyMemoryView_Check(input_object)) {
memview = PyMemoryView_FromObject(input_object);
memview_buf = PyMemoryView_GET_BUFFER(memview);
buffer = memview_buf->buf;
bufsize = memview_buf->len;
}
else if (!PyArg_ParseTuple(args, "y#", &buffer, &bufsize)) {
return NULL;
}
@ -135,6 +147,7 @@ _decode(ImagingDecoderObject *decoder, PyObject *args) {
ImagingSectionLeave(&cookie);
}
Py_XDECREF(memview);
return Py_BuildValue("ii", status, decoder->state.errcode);
}