use more mode enums in decode.c

This commit is contained in:
Yay295 2024-04-23 13:19:49 -05:00
parent cb682445cf
commit 4f9b68c192

View File

@ -318,17 +318,18 @@ PyObject *
PyImaging_BitDecoderNew(PyObject *self, PyObject *args) { PyImaging_BitDecoderNew(PyObject *self, PyObject *args) {
ImagingDecoderObject *decoder; ImagingDecoderObject *decoder;
char *mode; const char *mode_name;
int bits = 8; int bits = 8;
int pad = 8; int pad = 8;
int fill = 0; int fill = 0;
int sign = 0; int sign = 0;
int ystep = 1; int ystep = 1;
if (!PyArg_ParseTuple(args, "s|iiiii", &mode, &bits, &pad, &fill, &sign, &ystep)) { if (!PyArg_ParseTuple(args, "s|iiiii", &mode_name, &bits, &pad, &fill, &sign, &ystep)) {
return NULL; return NULL;
} }
if (strcmp(mode, "F") != 0) { const ModeID mode = findModeID(mode_name);
if (mode != IMAGING_MODE_F) {
PyErr_SetString(PyExc_ValueError, "bad image mode"); PyErr_SetString(PyExc_ValueError, "bad image mode");
return NULL; return NULL;
} }
@ -358,34 +359,36 @@ PyObject *
PyImaging_BcnDecoderNew(PyObject *self, PyObject *args) { PyImaging_BcnDecoderNew(PyObject *self, PyObject *args) {
ImagingDecoderObject *decoder; ImagingDecoderObject *decoder;
char *mode; char *mode_name;
char *actual;
int n = 0; int n = 0;
char *pixel_format = ""; char *pixel_format = "";
if (!PyArg_ParseTuple(args, "si|s", &mode, &n, &pixel_format)) { if (!PyArg_ParseTuple(args, "si|s", &mode_name, &n, &pixel_format)) {
return NULL; return NULL;
} }
const ModeID mode = findModeID(mode_name);
ModeID actual;
switch (n) { switch (n) {
case 1: /* BC1: 565 color, 1-bit alpha */ case 1: /* BC1: 565 color, 1-bit alpha */
case 2: /* BC2: 565 color, 4-bit alpha */ case 2: /* BC2: 565 color, 4-bit alpha */
case 3: /* BC3: 565 color, 2-endpoint 8-bit interpolated alpha */ case 3: /* BC3: 565 color, 2-endpoint 8-bit interpolated alpha */
case 7: /* BC7: 4-channel 8-bit via everything */ case 7: /* BC7: 4-channel 8-bit via everything */
actual = "RGBA"; actual = IMAGING_MODE_RGBA;
break; break;
case 4: /* BC4: 1-channel 8-bit via 1 BC3 alpha block */ case 4: /* BC4: 1-channel 8-bit via 1 BC3 alpha block */
actual = "L"; actual = IMAGING_MODE_L;
break; break;
case 5: /* BC5: 2-channel 8-bit via 2 BC3 alpha blocks */ case 5: /* BC5: 2-channel 8-bit via 2 BC3 alpha blocks */
case 6: /* BC6: 3-channel 16-bit float */ case 6: /* BC6: 3-channel 16-bit float */
actual = "RGB"; actual = IMAGING_MODE_RGB;
break; break;
default: default:
PyErr_SetString(PyExc_ValueError, "block compression type unknown"); PyErr_SetString(PyExc_ValueError, "block compression type unknown");
return NULL; return NULL;
} }
if (strcmp(mode, actual) != 0) { if (mode != actual) {
PyErr_SetString(PyExc_ValueError, "bad image mode"); PyErr_SetString(PyExc_ValueError, "bad image mode");
return NULL; return NULL;
} }
@ -428,15 +431,16 @@ PyObject *
PyImaging_GifDecoderNew(PyObject *self, PyObject *args) { PyImaging_GifDecoderNew(PyObject *self, PyObject *args) {
ImagingDecoderObject *decoder; ImagingDecoderObject *decoder;
char *mode; const char *mode_name;
int bits = 8; int bits = 8;
int interlace = 0; int interlace = 0;
int transparency = -1; int transparency = -1;
if (!PyArg_ParseTuple(args, "s|iii", &mode, &bits, &interlace, &transparency)) { if (!PyArg_ParseTuple(args, "s|iii", &mode_name, &bits, &interlace, &transparency)) {
return NULL; return NULL;
} }
if (strcmp(mode, "L") != 0 && strcmp(mode, "P") != 0) { const ModeID mode = findModeID(mode_name);
if (mode != IMAGING_MODE_L && mode != IMAGING_MODE_P) {
PyErr_SetString(PyExc_ValueError, "bad image mode"); PyErr_SetString(PyExc_ValueError, "bad image mode");
return NULL; return NULL;
} }