diff --git a/src/_imaging.c b/src/_imaging.c index f2d396140..a940bb974 100644 --- a/src/_imaging.c +++ b/src/_imaging.c @@ -368,7 +368,7 @@ ImagingError_ValueError(const char *message) { /* -------------------------------------------------------------------- */ static int -getbands(const Mode *mode) { +getbands(const ModeID mode) { Imaging im; int bands; @@ -731,7 +731,7 @@ _fill(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); im = ImagingNewDirty(mode, xsize, ysize); if (!im) { @@ -760,7 +760,7 @@ _new(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingNew(mode, xsize, ysize)); } @@ -774,7 +774,7 @@ _new_block(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingNewBlock(mode, xsize, ysize)); } @@ -787,7 +787,7 @@ _linear_gradient(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingFillLinearGradient(mode)); } @@ -800,7 +800,7 @@ _radial_gradient(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingFillRadialGradient(mode)); } @@ -964,7 +964,7 @@ _color_lut_3d(ImagingObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); /* actually, it is trilinear */ if (filter != IMAGING_TRANSFORM_BILINEAR) { @@ -1033,7 +1033,7 @@ _convert(ImagingObject *self, PyObject *args) { } } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingConvert( self->image, mode, paletteimage ? paletteimage->image->palette : NULL, dither @@ -1084,7 +1084,7 @@ _convert_matrix(ImagingObject *self, PyObject *args) { } } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingConvertMatrix(self->image, mode, m)); } @@ -1094,12 +1094,12 @@ _convert_transparent(ImagingObject *self, PyObject *args) { char *mode_name; int r, g, b; if (PyArg_ParseTuple(args, "s(iii)", &mode_name, &r, &g, &b)) { - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingConvertTransparent(self->image, mode, r, g, b)); } PyErr_Clear(); if (PyArg_ParseTuple(args, "si", &mode_name, &r)) { - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); return PyImagingNew(ImagingConvertTransparent(self->image, mode, r, 0, 0)); } return NULL; @@ -1209,8 +1209,8 @@ _getpalette(ImagingObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); pack = ImagingFindPacker(mode, rawmode, &bits); if (!pack) { @@ -1238,7 +1238,7 @@ _getpalettemode(ImagingObject *self) { return NULL; } - return PyUnicode_FromString(self->image->palette->mode->name); + return PyUnicode_FromString(getModeData(self->image->palette->mode)->name); } static inline int @@ -1524,7 +1524,7 @@ _point(ImagingObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); if (mode == IMAGING_MODE_F) { FLOAT32 *data; @@ -1799,14 +1799,14 @@ _putpalette(ImagingObject *self, PyObject *args) { return NULL; } - const Mode * const palette_mode = findMode(palette_mode_name); - if (palette_mode == NULL) { + const ModeID palette_mode = findModeID(palette_mode_name); + if (palette_mode == IMAGING_MODE_UNKNOWN) { PyErr_SetString(PyExc_ValueError, wrong_mode); return NULL; } - const RawMode * const rawmode = findRawMode(rawmode_name); - if (rawmode == NULL) { + const RawModeID rawmode = findRawModeID(rawmode_name); + if (rawmode == IMAGING_RAWMODE_UNKNOWN) { PyErr_SetString(PyExc_ValueError, wrong_raw_mode); return NULL; } @@ -2052,7 +2052,7 @@ _reduce(ImagingObject *self, PyObject *args) { } static int -isRGB(const Mode * const mode) { +isRGB(const ModeID mode) { return mode == IMAGING_MODE_RGB || mode == IMAGING_MODE_RGBA || mode == IMAGING_MODE_RGBX; } @@ -2068,7 +2068,7 @@ im_setmode(ImagingObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); im = self->image; @@ -2472,7 +2472,7 @@ _merge(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); if (band0) { bands[0] = band0->image; @@ -3779,7 +3779,7 @@ static struct PyMethodDef methods[] = { static PyObject * _getattr_mode(ImagingObject *self, void *closure) { - return PyUnicode_FromString(self->image->mode->name); + return PyUnicode_FromString(getModeData(self->image->mode)->name); } static PyObject * @@ -4323,11 +4323,6 @@ setup_module(PyObject *m) { return -1; } - ImagingAccessInit(); - ImagingConvertInit(); - ImagingPackInit(); - ImagingUnpackInit(); - #ifdef HAVE_LIBJPEG { extern const char *ImagingJpegVersion(void); diff --git a/src/decode.c b/src/decode.c index e48dbbc3d..41b2f6f31 100644 --- a/src/decode.c +++ b/src/decode.c @@ -266,7 +266,7 @@ static PyTypeObject ImagingDecoderType = { /* -------------------------------------------------------------------- */ int -get_unpacker(ImagingDecoderObject *decoder, const Mode *mode, const RawMode *rawmode) { +get_unpacker(ImagingDecoderObject *decoder, const ModeID mode, const RawModeID rawmode) { int bits; ImagingShuffler unpack; @@ -441,8 +441,8 @@ PyImaging_HexDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(0); if (decoder == NULL) { @@ -481,8 +481,8 @@ PyImaging_LibTiffDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); TRACE(("new tiff decoder %s\n", compname)); @@ -522,8 +522,8 @@ PyImaging_PackbitsDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(0); if (decoder == NULL) { @@ -576,8 +576,8 @@ PyImaging_PcxDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(0); if (decoder == NULL) { @@ -610,8 +610,8 @@ PyImaging_RawDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(sizeof(RAWSTATE)); if (decoder == NULL) { @@ -646,8 +646,8 @@ PyImaging_SgiRleDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(sizeof(SGISTATE)); if (decoder == NULL) { @@ -680,8 +680,8 @@ PyImaging_SunRleDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(0); if (decoder == NULL) { @@ -712,8 +712,8 @@ PyImaging_TgaRleDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(0); if (decoder == NULL) { @@ -772,8 +772,8 @@ PyImaging_ZipDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); decoder = PyImaging_DecoderNew(sizeof(ZIPSTATE)); if (decoder == NULL) { @@ -828,9 +828,9 @@ PyImaging_JpegDecoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * rawmode = findRawMode(rawmode_name); - const RawMode * const jpegmode = findRawMode(jpegmode_name); + const ModeID mode = findModeID(mode_name); + RawModeID rawmode = findRawModeID(rawmode_name); + const RawModeID jpegmode = findRawModeID(jpegmode_name); decoder = PyImaging_DecoderNew(sizeof(JPEGSTATE)); if (decoder == NULL) { diff --git a/src/display.c b/src/display.c index 0650b8866..5b5853a3c 100644 --- a/src/display.c +++ b/src/display.c @@ -47,7 +47,7 @@ typedef struct { static PyTypeObject ImagingDisplayType; static ImagingDisplayObject * -_new(const Mode * const mode, int xsize, int ysize) { +_new(const ModeID mode, int xsize, int ysize) { ImagingDisplayObject *display; if (PyType_Ready(&ImagingDisplayType) < 0) { @@ -235,7 +235,7 @@ static struct PyMethodDef methods[] = { static PyObject * _getattr_mode(ImagingDisplayObject *self, void *closure) { - return Py_BuildValue("s", self->dib->mode->name); + return Py_BuildValue("s", getModeData(self->dib->mode)->name); } static PyObject * @@ -265,7 +265,7 @@ PyImaging_DisplayWin32(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); display = _new(mode, xsize, ysize); if (display == NULL) { return NULL; @@ -277,8 +277,8 @@ PyImaging_DisplayWin32(PyObject *self, PyObject *args) { PyObject * PyImaging_DisplayModeWin32(PyObject *self, PyObject *args) { int size[2]; - const Mode * const mode = ImagingGetModeDIB(size); - return Py_BuildValue("s(ii)", mode->name, size[0], size[1]); + const ModeID mode = ImagingGetModeDIB(size); + return Py_BuildValue("s(ii)", getModeData(mode)->name, size[0], size[1]); } /* -------------------------------------------------------------------- */ diff --git a/src/encode.c b/src/encode.c index 311ffa4ee..3a6b6d6d0 100644 --- a/src/encode.c +++ b/src/encode.c @@ -334,7 +334,7 @@ static PyTypeObject ImagingEncoderType = { /* -------------------------------------------------------------------- */ int -get_packer(ImagingEncoderObject *encoder, const Mode *mode, const RawMode *rawmode) { +get_packer(ImagingEncoderObject *encoder, const ModeID mode, const RawModeID rawmode) { int bits; ImagingShuffler pack; @@ -344,8 +344,8 @@ get_packer(ImagingEncoderObject *encoder, const Mode *mode, const RawMode *rawmo PyErr_Format( PyExc_ValueError, "No packer found from %s to %s", - mode->name, - rawmode->name + getModeData(mode)->name, + getRawModeData(rawmode)->name ); return -1; } @@ -420,8 +420,8 @@ PyImaging_GifEncoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); if (get_packer(encoder, mode, rawmode) < 0) { return NULL; @@ -456,8 +456,8 @@ PyImaging_PcxEncoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); if (get_packer(encoder, mode, rawmode) < 0) { return NULL; @@ -490,8 +490,8 @@ PyImaging_RawEncoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); if (get_packer(encoder, mode, rawmode) < 0) { return NULL; @@ -526,8 +526,8 @@ PyImaging_TgaRleEncoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); if (get_packer(encoder, mode, rawmode) < 0) { return NULL; @@ -614,8 +614,8 @@ PyImaging_ZipEncoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); if (get_packer(encoder, mode, rawmode) < 0) { free(dictionary); @@ -721,8 +721,8 @@ PyImaging_LibTiffEncoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * const rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + const RawModeID rawmode = findRawModeID(rawmode_name); if (get_packer(encoder, mode, rawmode) < 0) { return NULL; @@ -1161,8 +1161,8 @@ PyImaging_JpegEncoderNew(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); - const RawMode * rawmode = findRawMode(rawmode_name); + const ModeID mode = findModeID(mode_name); + RawModeID rawmode = findRawModeID(rawmode_name); // libjpeg-turbo supports different output formats. // We are choosing Pillow's native format (3 color bytes + 1 padding) diff --git a/src/libImaging/Access.c b/src/libImaging/Access.c index 59a776fe0..6360e9147 100644 --- a/src/libImaging/Access.c +++ b/src/libImaging/Access.c @@ -116,51 +116,38 @@ put_pixel_32(Imaging im, int x, int y, const void *color) { memcpy(&im->image32[y][x], color, sizeof(INT32)); } -static struct ImagingAccessInstance *accessors = NULL; - -void -ImagingAccessInit(void) { - const struct ImagingAccessInstance temp[] = { - {IMAGING_MODE_1, get_pixel_8, put_pixel_8}, - {IMAGING_MODE_L, get_pixel_8, put_pixel_8}, - {IMAGING_MODE_LA, get_pixel_32_2bands, put_pixel_32}, - {IMAGING_MODE_La, get_pixel_32_2bands, put_pixel_32}, - {IMAGING_MODE_I, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_I_16, get_pixel_16L, put_pixel_16L}, - {IMAGING_MODE_I_16L, get_pixel_16L, put_pixel_16L}, - {IMAGING_MODE_I_16B, get_pixel_16B, put_pixel_16B}, +static struct ImagingAccessInstance accessors[] = { + {IMAGING_MODE_1, get_pixel_8, put_pixel_8}, + {IMAGING_MODE_L, get_pixel_8, put_pixel_8}, + {IMAGING_MODE_LA, get_pixel_32_2bands, put_pixel_32}, + {IMAGING_MODE_La, get_pixel_32_2bands, put_pixel_32}, + {IMAGING_MODE_I, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_I_16, get_pixel_16L, put_pixel_16L}, + {IMAGING_MODE_I_16L, get_pixel_16L, put_pixel_16L}, + {IMAGING_MODE_I_16B, get_pixel_16B, put_pixel_16B}, #ifdef WORDS_BIGENDIAN - {IMAGING_MODE_I_16N, get_pixel_16B, put_pixel_16B}, + {IMAGING_MODE_I_16N, get_pixel_16B, put_pixel_16B}, #else - {IMAGING_MODE_I_16N, get_pixel_16L, put_pixel_16L}, + {IMAGING_MODE_I_16N, get_pixel_16L, put_pixel_16L}, #endif - {IMAGING_MODE_I_32L, get_pixel_32L, put_pixel_32L}, - {IMAGING_MODE_I_32B, get_pixel_32B, put_pixel_32B}, - {IMAGING_MODE_F, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_P, get_pixel_8, put_pixel_8}, - {IMAGING_MODE_PA, get_pixel_32_2bands, put_pixel_32}, - {IMAGING_MODE_RGB, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_RGBA, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_RGBa, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_RGBX, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_CMYK, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_YCbCr, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_LAB, get_pixel_32, put_pixel_32}, - {IMAGING_MODE_HSV, get_pixel_32, put_pixel_32}, - {NULL} - }; - accessors = malloc(sizeof(temp)); - if (accessors == NULL) { - fprintf(stderr, "AccessInit: failed to allocate memory for accessors table\n"); - exit(1); - } - memcpy(accessors, temp, sizeof(temp)); -} + {IMAGING_MODE_I_32L, get_pixel_32L, put_pixel_32L}, + {IMAGING_MODE_I_32B, get_pixel_32B, put_pixel_32B}, + {IMAGING_MODE_F, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_P, get_pixel_8, put_pixel_8}, + {IMAGING_MODE_PA, get_pixel_32_2bands, put_pixel_32}, + {IMAGING_MODE_RGB, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_RGBA, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_RGBa, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_RGBX, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_CMYK, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_YCbCr, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_LAB, get_pixel_32, put_pixel_32}, + {IMAGING_MODE_HSV, get_pixel_32, put_pixel_32}, +}; ImagingAccess ImagingAccessNew(const Imaging im) { - int i; - for (i = 0; accessors[i].mode; i++) { + for (size_t i = 0; i < sizeof(accessors) / sizeof(*accessors); i++) { if (im->mode == accessors[i].mode) { return &accessors[i]; } @@ -170,9 +157,3 @@ ImagingAccessNew(const Imaging im) { void _ImagingAccessDelete(Imaging im, ImagingAccess access) {} - -void -ImagingAccessFree(void) { - free(accessors); - accessors = NULL; -} diff --git a/src/libImaging/Bands.c b/src/libImaging/Bands.c index 501b4625f..d1b0ebc4e 100644 --- a/src/libImaging/Bands.c +++ b/src/libImaging/Bands.c @@ -240,7 +240,7 @@ ImagingFillBand(Imaging imOut, int band, int color) { } Imaging -ImagingMerge(const Mode *mode, Imaging bands[4]) { +ImagingMerge(const ModeID mode, Imaging bands[4]) { int i, x, y; int bandsCount = 0; Imaging imOut; diff --git a/src/libImaging/Chops.c b/src/libImaging/Chops.c index 66d0b4f97..331f2dfe6 100644 --- a/src/libImaging/Chops.c +++ b/src/libImaging/Chops.c @@ -18,28 +18,28 @@ #include "Imaging.h" -#define CHOP(operation) \ - int x, y; \ - Imaging imOut; \ - imOut = create(imIn1, imIn2, NULL); \ - if (!imOut) { \ - return NULL; \ - } \ - for (y = 0; y < imOut->ysize; y++) { \ - UINT8 *out = (UINT8 *)imOut->image[y]; \ - UINT8 *in1 = (UINT8 *)imIn1->image[y]; \ - UINT8 *in2 = (UINT8 *)imIn2->image[y]; \ - for (x = 0; x < imOut->linesize; x++) { \ - int temp = operation; \ - if (temp <= 0) { \ - out[x] = 0; \ - } else if (temp >= 255) { \ - out[x] = 255; \ - } else { \ - out[x] = temp; \ - } \ - } \ - } \ +#define CHOP(operation) \ + int x, y; \ + Imaging imOut; \ + imOut = create(imIn1, imIn2, IMAGING_MODE_UNKNOWN); \ + if (!imOut) { \ + return NULL; \ + } \ + for (y = 0; y < imOut->ysize; y++) { \ + UINT8 *out = (UINT8 *)imOut->image[y]; \ + UINT8 *in1 = (UINT8 *)imIn1->image[y]; \ + UINT8 *in2 = (UINT8 *)imIn2->image[y]; \ + for (x = 0; x < imOut->linesize; x++) { \ + int temp = operation; \ + if (temp <= 0) { \ + out[x] = 0; \ + } else if (temp >= 255) { \ + out[x] = 255; \ + } else { \ + out[x] = temp; \ + } \ + } \ + } \ return imOut; #define CHOP2(operation, mode) \ @@ -60,11 +60,11 @@ return imOut; static Imaging -create(Imaging im1, Imaging im2, const Mode *mode) { +create(Imaging im1, Imaging im2, const ModeID mode) { int xsize, ysize; if (!im1 || !im2 || im1->type != IMAGING_TYPE_UINT8 || - (mode != NULL && (im1->mode != mode || im2->mode != mode))) { + (mode != IMAGING_MODE_UNKNOWN && (im1->mode != mode || im2->mode != mode))) { return (Imaging)ImagingError_ModeError(); } if (im1->type != im2->type || im1->bands != im2->bands) { @@ -129,12 +129,12 @@ ImagingChopXor(Imaging imIn1, Imaging imIn2) { Imaging ImagingChopAddModulo(Imaging imIn1, Imaging imIn2) { - CHOP2(in1[x] + in2[x], NULL); + CHOP2(in1[x] + in2[x], IMAGING_MODE_UNKNOWN); } Imaging ImagingChopSubtractModulo(Imaging imIn1, Imaging imIn2) { - CHOP2(in1[x] - in2[x], NULL); + CHOP2(in1[x] - in2[x], IMAGING_MODE_UNKNOWN); } Imaging @@ -142,7 +142,7 @@ ImagingChopSoftLight(Imaging imIn1, Imaging imIn2) { CHOP2( (((255 - in1[x]) * (in1[x] * in2[x])) / 65536) + (in1[x] * (255 - ((255 - in1[x]) * (255 - in2[x]) / 255))) / 255, - NULL + IMAGING_MODE_UNKNOWN ); } @@ -151,7 +151,7 @@ ImagingChopHardLight(Imaging imIn1, Imaging imIn2) { CHOP2( (in2[x] < 128) ? ((in1[x] * in2[x]) / 127) : 255 - (((255 - in2[x]) * (255 - in1[x])) / 127), - NULL + IMAGING_MODE_UNKNOWN ); } @@ -160,6 +160,6 @@ ImagingOverlay(Imaging imIn1, Imaging imIn2) { CHOP2( (in1[x] < 128) ? ((in1[x] * in2[x]) / 127) : 255 - (((255 - in1[x]) * (255 - in2[x])) / 127), - NULL + IMAGING_MODE_UNKNOWN ); } diff --git a/src/libImaging/Convert.c b/src/libImaging/Convert.c index 8f580c294..862f228e5 100644 --- a/src/libImaging/Convert.c +++ b/src/libImaging/Convert.c @@ -1090,7 +1090,7 @@ pa2ycbcr(UINT8 *out, const UINT8 *in, int xsize, ImagingPalette palette) { } static Imaging -frompalette(Imaging imOut, Imaging imIn, const Mode *mode) { +frompalette(Imaging imOut, Imaging imIn, const ModeID mode) { ImagingSectionCookie cookie; int alpha; int y; @@ -1160,7 +1160,7 @@ frompalette(Imaging imOut, Imaging imIn, const Mode *mode) { #endif static Imaging topalette( - Imaging imOut, Imaging imIn, const Mode *mode, ImagingPalette inpalette, int dither + Imaging imOut, Imaging imIn, const ModeID mode, ImagingPalette inpalette, int dither ) { ImagingSectionCookie cookie; int alpha; @@ -1456,25 +1456,151 @@ tobilevel(Imaging imOut, Imaging imIn) { /* Conversion handlers */ /* ------------------- */ -static struct Converter { - const Mode *from; - const Mode *to; +static struct { + const ModeID from; + const ModeID to; ImagingShuffler convert; -} *converters = NULL; +} converters[] = { + {IMAGING_MODE_1, IMAGING_MODE_L, bit2l}, + {IMAGING_MODE_1, IMAGING_MODE_I, bit2i}, + {IMAGING_MODE_1, IMAGING_MODE_F, bit2f}, + {IMAGING_MODE_1, IMAGING_MODE_RGB, bit2rgb}, + {IMAGING_MODE_1, IMAGING_MODE_RGBA, bit2rgb}, + {IMAGING_MODE_1, IMAGING_MODE_RGBX, bit2rgb}, + {IMAGING_MODE_1, IMAGING_MODE_CMYK, bit2cmyk}, + {IMAGING_MODE_1, IMAGING_MODE_YCbCr, bit2ycbcr}, + {IMAGING_MODE_1, IMAGING_MODE_HSV, bit2hsv}, + + {IMAGING_MODE_L, IMAGING_MODE_1, l2bit}, + {IMAGING_MODE_L, IMAGING_MODE_LA, l2la}, + {IMAGING_MODE_L, IMAGING_MODE_I, l2i}, + {IMAGING_MODE_L, IMAGING_MODE_F, l2f}, + {IMAGING_MODE_L, IMAGING_MODE_RGB, l2rgb}, + {IMAGING_MODE_L, IMAGING_MODE_RGBA, l2rgb}, + {IMAGING_MODE_L, IMAGING_MODE_RGBX, l2rgb}, + {IMAGING_MODE_L, IMAGING_MODE_CMYK, l2cmyk}, + {IMAGING_MODE_L, IMAGING_MODE_YCbCr, l2ycbcr}, + {IMAGING_MODE_L, IMAGING_MODE_HSV, l2hsv}, + + {IMAGING_MODE_LA, IMAGING_MODE_L, la2l}, + {IMAGING_MODE_LA, IMAGING_MODE_La, lA2la}, + {IMAGING_MODE_LA, IMAGING_MODE_RGB, la2rgb}, + {IMAGING_MODE_LA, IMAGING_MODE_RGBA, la2rgb}, + {IMAGING_MODE_LA, IMAGING_MODE_RGBX, la2rgb}, + {IMAGING_MODE_LA, IMAGING_MODE_CMYK, la2cmyk}, + {IMAGING_MODE_LA, IMAGING_MODE_YCbCr, la2ycbcr}, + {IMAGING_MODE_LA, IMAGING_MODE_HSV, la2hsv}, + + {IMAGING_MODE_La, IMAGING_MODE_LA, la2lA}, + + {IMAGING_MODE_I, IMAGING_MODE_L, i2l}, + {IMAGING_MODE_I, IMAGING_MODE_F, i2f}, + {IMAGING_MODE_I, IMAGING_MODE_RGB, i2rgb}, + {IMAGING_MODE_I, IMAGING_MODE_RGBA, i2rgb}, + {IMAGING_MODE_I, IMAGING_MODE_RGBX, i2rgb}, + {IMAGING_MODE_I, IMAGING_MODE_HSV, i2hsv}, + + {IMAGING_MODE_F, IMAGING_MODE_L, f2l}, + {IMAGING_MODE_F, IMAGING_MODE_I, f2i}, + + {IMAGING_MODE_RGB, IMAGING_MODE_1, rgb2bit}, + {IMAGING_MODE_RGB, IMAGING_MODE_L, rgb2l}, + {IMAGING_MODE_RGB, IMAGING_MODE_LA, rgb2la}, + {IMAGING_MODE_RGB, IMAGING_MODE_La, rgb2la}, + {IMAGING_MODE_RGB, IMAGING_MODE_I, rgb2i}, + {IMAGING_MODE_RGB, IMAGING_MODE_I_16, rgb2i16l}, + {IMAGING_MODE_RGB, IMAGING_MODE_I_16L, rgb2i16l}, + {IMAGING_MODE_RGB, IMAGING_MODE_I_16B, rgb2i16b}, +#ifdef WORDS_BIGENDIAN + {IMAGING_MODE_RGB, IMAGING_MODE_I_16N, rgb2i16b}, +#else + {IMAGING_MODE_RGB, IMAGING_MODE_I_16N, rgb2i16l}, +#endif + {IMAGING_MODE_RGB, IMAGING_MODE_F, rgb2f}, + {IMAGING_MODE_RGB, IMAGING_MODE_BGR_15, rgb2bgr15}, + {IMAGING_MODE_RGB, IMAGING_MODE_BGR_16, rgb2bgr16}, + {IMAGING_MODE_RGB, IMAGING_MODE_BGR_24, rgb2bgr24}, + {IMAGING_MODE_RGB, IMAGING_MODE_RGBA, rgb2rgba}, + {IMAGING_MODE_RGB, IMAGING_MODE_RGBa, rgb2rgba}, + {IMAGING_MODE_RGB, IMAGING_MODE_RGBX, rgb2rgba}, + {IMAGING_MODE_RGB, IMAGING_MODE_CMYK, rgb2cmyk}, + {IMAGING_MODE_RGB, IMAGING_MODE_YCbCr, ImagingConvertRGB2YCbCr}, + {IMAGING_MODE_RGB, IMAGING_MODE_HSV, rgb2hsv}, + + {IMAGING_MODE_RGBA, IMAGING_MODE_1, rgb2bit}, + {IMAGING_MODE_RGBA, IMAGING_MODE_L, rgb2l}, + {IMAGING_MODE_RGBA, IMAGING_MODE_LA, rgba2la}, + {IMAGING_MODE_RGBA, IMAGING_MODE_I, rgb2i}, + {IMAGING_MODE_RGBA, IMAGING_MODE_F, rgb2f}, + {IMAGING_MODE_RGBA, IMAGING_MODE_RGB, rgba2rgb}, + {IMAGING_MODE_RGBA, IMAGING_MODE_RGBa, rgbA2rgba}, + {IMAGING_MODE_RGBA, IMAGING_MODE_RGBX, rgb2rgba}, + {IMAGING_MODE_RGBA, IMAGING_MODE_CMYK, rgb2cmyk}, + {IMAGING_MODE_RGBA, IMAGING_MODE_YCbCr, ImagingConvertRGB2YCbCr}, + {IMAGING_MODE_RGBA, IMAGING_MODE_HSV, rgb2hsv}, + + {IMAGING_MODE_RGBa, IMAGING_MODE_RGBA, rgba2rgbA}, + {IMAGING_MODE_RGBa, IMAGING_MODE_RGB, rgba2rgb_}, + + {IMAGING_MODE_RGBX, IMAGING_MODE_1, rgb2bit}, + {IMAGING_MODE_RGBX, IMAGING_MODE_L, rgb2l}, + {IMAGING_MODE_RGBX, IMAGING_MODE_LA, rgb2la}, + {IMAGING_MODE_RGBX, IMAGING_MODE_I, rgb2i}, + {IMAGING_MODE_RGBX, IMAGING_MODE_F, rgb2f}, + {IMAGING_MODE_RGBX, IMAGING_MODE_RGB, rgba2rgb}, + {IMAGING_MODE_RGBX, IMAGING_MODE_CMYK, rgb2cmyk}, + {IMAGING_MODE_RGBX, IMAGING_MODE_YCbCr, ImagingConvertRGB2YCbCr}, + {IMAGING_MODE_RGBX, IMAGING_MODE_HSV, rgb2hsv}, + + {IMAGING_MODE_CMYK, IMAGING_MODE_RGB, cmyk2rgb}, + {IMAGING_MODE_CMYK, IMAGING_MODE_RGBA, cmyk2rgb}, + {IMAGING_MODE_CMYK, IMAGING_MODE_RGBX, cmyk2rgb}, + {IMAGING_MODE_CMYK, IMAGING_MODE_HSV, cmyk2hsv}, + + {IMAGING_MODE_YCbCr, IMAGING_MODE_L, ycbcr2l}, + {IMAGING_MODE_YCbCr, IMAGING_MODE_LA, ycbcr2la}, + {IMAGING_MODE_YCbCr, IMAGING_MODE_RGB, ImagingConvertYCbCr2RGB}, + + {IMAGING_MODE_HSV, IMAGING_MODE_RGB, hsv2rgb}, + + {IMAGING_MODE_I, IMAGING_MODE_I_16, I_I16L}, + {IMAGING_MODE_I_16, IMAGING_MODE_I, I16L_I}, + {IMAGING_MODE_I_16, IMAGING_MODE_RGB, I16_RGB}, + {IMAGING_MODE_L, IMAGING_MODE_I_16, L_I16L}, + {IMAGING_MODE_I_16, IMAGING_MODE_L, I16L_L}, + + {IMAGING_MODE_I, IMAGING_MODE_I_16L, I_I16L}, + {IMAGING_MODE_I_16L, IMAGING_MODE_I, I16L_I}, + {IMAGING_MODE_I, IMAGING_MODE_I_16B, I_I16B}, + {IMAGING_MODE_I_16B, IMAGING_MODE_I, I16B_I}, + + {IMAGING_MODE_L, IMAGING_MODE_I_16L, L_I16L}, + {IMAGING_MODE_I_16L, IMAGING_MODE_L, I16L_L}, + {IMAGING_MODE_L, IMAGING_MODE_I_16B, L_I16B}, + {IMAGING_MODE_I_16B, IMAGING_MODE_L, I16B_L}, +#ifdef WORDS_BIGENDIAN + {IMAGING_MODE_L, IMAGING_MODE_I_16N, L_I16B}, + {IMAGING_MODE_I_16N, IMAGING_MODE_L, I16B_L}, +#else + {IMAGING_MODE_L, IMAGING_MODE_I_16N, L_I16L}, + {IMAGING_MODE_I_16N, IMAGING_MODE_L, I16L_L}, +#endif + + {IMAGING_MODE_I_16, IMAGING_MODE_F, I16L_F}, + {IMAGING_MODE_I_16L, IMAGING_MODE_F, I16L_F}, + {IMAGING_MODE_I_16B, IMAGING_MODE_F, I16B_F} +}; static Imaging -convert( - Imaging imOut, Imaging imIn, const Mode *mode, ImagingPalette palette, int dither -) { +convert(Imaging imOut, Imaging imIn, ModeID mode, ImagingPalette palette, int dither) { ImagingSectionCookie cookie; ImagingShuffler convert; - int y; if (!imIn) { return (Imaging)ImagingError_ModeError(); } - if (!mode) { + if (mode == IMAGING_MODE_UNKNOWN) { /* Map palette image to full depth */ if (!imIn->palette) { return (Imaging)ImagingError_ModeError(); @@ -1504,10 +1630,9 @@ convert( /* standard conversion machinery */ convert = NULL; - - for (y = 0; converters[y].from; y++) { - if (imIn->mode == converters[y].from && mode == converters[y].to) { - convert = converters[y].convert; + for (size_t i = 0; i < sizeof(converters) / sizeof(*converters); i++) { + if (imIn->mode == converters[i].from && mode == converters[i].to) { + convert = converters[i].convert; break; } } @@ -1518,7 +1643,11 @@ convert( #else static char buf[100]; snprintf( - buf, 100, "conversion from %.10s to %.10s not supported", imIn->mode->name, mode->name + buf, + 100, + "conversion from %.10s to %.10s not supported", + getModeData(imIn->mode)->name, + getModeData(mode)->name ); return (Imaging)ImagingError_ValueError(buf); #endif @@ -1530,7 +1659,7 @@ convert( } ImagingSectionEnter(&cookie); - for (y = 0; y < imIn->ysize; y++) { + for (int y = 0; y < imIn->ysize; y++) { (*convert)((UINT8 *)imOut->image[y], (UINT8 *)imIn->image[y], imIn->xsize); } ImagingSectionLeave(&cookie); @@ -1539,7 +1668,7 @@ convert( } Imaging -ImagingConvert(Imaging imIn, const Mode *mode, ImagingPalette palette, int dither) { +ImagingConvert(Imaging imIn, const ModeID mode, ImagingPalette palette, int dither) { return convert(NULL, imIn, mode, palette, dither); } @@ -1549,7 +1678,7 @@ ImagingConvert2(Imaging imOut, Imaging imIn) { } Imaging -ImagingConvertTransparent(Imaging imIn, const Mode *mode, int r, int g, int b) { +ImagingConvertTransparent(Imaging imIn, const ModeID mode, int r, int g, int b) { ImagingSectionCookie cookie; ImagingShuffler convert; Imaging imOut = NULL; @@ -1598,8 +1727,8 @@ ImagingConvertTransparent(Imaging imIn, const Mode *mode, int r, int g, int b) { buf, 100, "conversion from %.10s to %.10s not supported in convert_transparent", - imIn->mode->name, - mode->name + getModeData(imIn->mode)->name, + getModeData(mode)->name ); return (Imaging)ImagingError_ValueError(buf); } @@ -1622,7 +1751,7 @@ ImagingConvertTransparent(Imaging imIn, const Mode *mode, int r, int g, int b) { } Imaging -ImagingConvertInPlace(Imaging imIn, const Mode *mode) { +ImagingConvertInPlace(Imaging imIn, const ModeID mode) { ImagingSectionCookie cookie; ImagingShuffler convert; int y; @@ -1644,155 +1773,3 @@ ImagingConvertInPlace(Imaging imIn, const Mode *mode) { return imIn; } - -/* ------------------ */ -/* Converter mappings */ -/* ------------------ */ - -void -ImagingConvertInit(void) { - const struct Converter temp[] = { - {IMAGING_MODE_1, IMAGING_MODE_L, bit2l}, - {IMAGING_MODE_1, IMAGING_MODE_I, bit2i}, - {IMAGING_MODE_1, IMAGING_MODE_F, bit2f}, - {IMAGING_MODE_1, IMAGING_MODE_RGB, bit2rgb}, - {IMAGING_MODE_1, IMAGING_MODE_RGBA, bit2rgb}, - {IMAGING_MODE_1, IMAGING_MODE_RGBX, bit2rgb}, - {IMAGING_MODE_1, IMAGING_MODE_CMYK, bit2cmyk}, - {IMAGING_MODE_1, IMAGING_MODE_YCbCr, bit2ycbcr}, - {IMAGING_MODE_1, IMAGING_MODE_HSV, bit2hsv}, - - {IMAGING_MODE_L, IMAGING_MODE_1, l2bit}, - {IMAGING_MODE_L, IMAGING_MODE_LA, l2la}, - {IMAGING_MODE_L, IMAGING_MODE_I, l2i}, - {IMAGING_MODE_L, IMAGING_MODE_F, l2f}, - {IMAGING_MODE_L, IMAGING_MODE_RGB, l2rgb}, - {IMAGING_MODE_L, IMAGING_MODE_RGBA, l2rgb}, - {IMAGING_MODE_L, IMAGING_MODE_RGBX, l2rgb}, - {IMAGING_MODE_L, IMAGING_MODE_CMYK, l2cmyk}, - {IMAGING_MODE_L, IMAGING_MODE_YCbCr, l2ycbcr}, - {IMAGING_MODE_L, IMAGING_MODE_HSV, l2hsv}, - - {IMAGING_MODE_LA, IMAGING_MODE_L, la2l}, - {IMAGING_MODE_LA, IMAGING_MODE_La, lA2la}, - {IMAGING_MODE_LA, IMAGING_MODE_RGB, la2rgb}, - {IMAGING_MODE_LA, IMAGING_MODE_RGBA, la2rgb}, - {IMAGING_MODE_LA, IMAGING_MODE_RGBX, la2rgb}, - {IMAGING_MODE_LA, IMAGING_MODE_CMYK, la2cmyk}, - {IMAGING_MODE_LA, IMAGING_MODE_YCbCr, la2ycbcr}, - {IMAGING_MODE_LA, IMAGING_MODE_HSV, la2hsv}, - - {IMAGING_MODE_La, IMAGING_MODE_LA, la2lA}, - - {IMAGING_MODE_I, IMAGING_MODE_L, i2l}, - {IMAGING_MODE_I, IMAGING_MODE_F, i2f}, - {IMAGING_MODE_I, IMAGING_MODE_RGB, i2rgb}, - {IMAGING_MODE_I, IMAGING_MODE_RGBA, i2rgb}, - {IMAGING_MODE_I, IMAGING_MODE_RGBX, i2rgb}, - {IMAGING_MODE_I, IMAGING_MODE_HSV, i2hsv}, - - {IMAGING_MODE_F, IMAGING_MODE_L, f2l}, - {IMAGING_MODE_F, IMAGING_MODE_I, f2i}, - - {IMAGING_MODE_RGB, IMAGING_MODE_1, rgb2bit}, - {IMAGING_MODE_RGB, IMAGING_MODE_L, rgb2l}, - {IMAGING_MODE_RGB, IMAGING_MODE_LA, rgb2la}, - {IMAGING_MODE_RGB, IMAGING_MODE_La, rgb2la}, - {IMAGING_MODE_RGB, IMAGING_MODE_I, rgb2i}, - {IMAGING_MODE_RGB, IMAGING_MODE_I_16, rgb2i16l}, - {IMAGING_MODE_RGB, IMAGING_MODE_I_16L, rgb2i16l}, - {IMAGING_MODE_RGB, IMAGING_MODE_I_16B, rgb2i16b}, -#ifdef WORDS_BIGENDIAN - {IMAGING_MODE_RGB, IMAGING_MODE_I_16N, rgb2i16b}, -#else - {IMAGING_MODE_RGB, IMAGING_MODE_I_16N, rgb2i16l}, -#endif - {IMAGING_MODE_RGB, IMAGING_MODE_F, rgb2f}, - {IMAGING_MODE_RGB, IMAGING_MODE_BGR_15, rgb2bgr15}, - {IMAGING_MODE_RGB, IMAGING_MODE_BGR_16, rgb2bgr16}, - {IMAGING_MODE_RGB, IMAGING_MODE_BGR_24, rgb2bgr24}, - {IMAGING_MODE_RGB, IMAGING_MODE_RGBA, rgb2rgba}, - {IMAGING_MODE_RGB, IMAGING_MODE_RGBa, rgb2rgba}, - {IMAGING_MODE_RGB, IMAGING_MODE_RGBX, rgb2rgba}, - {IMAGING_MODE_RGB, IMAGING_MODE_CMYK, rgb2cmyk}, - {IMAGING_MODE_RGB, IMAGING_MODE_YCbCr, ImagingConvertRGB2YCbCr}, - {IMAGING_MODE_RGB, IMAGING_MODE_HSV, rgb2hsv}, - - {IMAGING_MODE_RGBA, IMAGING_MODE_1, rgb2bit}, - {IMAGING_MODE_RGBA, IMAGING_MODE_L, rgb2l}, - {IMAGING_MODE_RGBA, IMAGING_MODE_LA, rgba2la}, - {IMAGING_MODE_RGBA, IMAGING_MODE_I, rgb2i}, - {IMAGING_MODE_RGBA, IMAGING_MODE_F, rgb2f}, - {IMAGING_MODE_RGBA, IMAGING_MODE_RGB, rgba2rgb}, - {IMAGING_MODE_RGBA, IMAGING_MODE_RGBa, rgbA2rgba}, - {IMAGING_MODE_RGBA, IMAGING_MODE_RGBX, rgb2rgba}, - {IMAGING_MODE_RGBA, IMAGING_MODE_CMYK, rgb2cmyk}, - {IMAGING_MODE_RGBA, IMAGING_MODE_YCbCr, ImagingConvertRGB2YCbCr}, - {IMAGING_MODE_RGBA, IMAGING_MODE_HSV, rgb2hsv}, - - {IMAGING_MODE_RGBa, IMAGING_MODE_RGBA, rgba2rgbA}, - {IMAGING_MODE_RGBa, IMAGING_MODE_RGB, rgba2rgb_}, - - {IMAGING_MODE_RGBX, IMAGING_MODE_1, rgb2bit}, - {IMAGING_MODE_RGBX, IMAGING_MODE_L, rgb2l}, - {IMAGING_MODE_RGBX, IMAGING_MODE_LA, rgb2la}, - {IMAGING_MODE_RGBX, IMAGING_MODE_I, rgb2i}, - {IMAGING_MODE_RGBX, IMAGING_MODE_F, rgb2f}, - {IMAGING_MODE_RGBX, IMAGING_MODE_RGB, rgba2rgb}, - {IMAGING_MODE_RGBX, IMAGING_MODE_CMYK, rgb2cmyk}, - {IMAGING_MODE_RGBX, IMAGING_MODE_YCbCr, ImagingConvertRGB2YCbCr}, - {IMAGING_MODE_RGBX, IMAGING_MODE_HSV, rgb2hsv}, - - {IMAGING_MODE_CMYK, IMAGING_MODE_RGB, cmyk2rgb}, - {IMAGING_MODE_CMYK, IMAGING_MODE_RGBA, cmyk2rgb}, - {IMAGING_MODE_CMYK, IMAGING_MODE_RGBX, cmyk2rgb}, - {IMAGING_MODE_CMYK, IMAGING_MODE_HSV, cmyk2hsv}, - - {IMAGING_MODE_YCbCr, IMAGING_MODE_L, ycbcr2l}, - {IMAGING_MODE_YCbCr, IMAGING_MODE_LA, ycbcr2la}, - {IMAGING_MODE_YCbCr, IMAGING_MODE_RGB, ImagingConvertYCbCr2RGB}, - - {IMAGING_MODE_HSV, IMAGING_MODE_RGB, hsv2rgb}, - - {IMAGING_MODE_I, IMAGING_MODE_I_16, I_I16L}, - {IMAGING_MODE_I_16, IMAGING_MODE_I, I16L_I}, - {IMAGING_MODE_I_16, IMAGING_MODE_RGB, I16_RGB}, - {IMAGING_MODE_L, IMAGING_MODE_I_16, L_I16L}, - {IMAGING_MODE_I_16, IMAGING_MODE_L, I16L_L}, - - {IMAGING_MODE_I, IMAGING_MODE_I_16L, I_I16L}, - {IMAGING_MODE_I_16L, IMAGING_MODE_I, I16L_I}, - {IMAGING_MODE_I, IMAGING_MODE_I_16B, I_I16B}, - {IMAGING_MODE_I_16B, IMAGING_MODE_I, I16B_I}, - - {IMAGING_MODE_L, IMAGING_MODE_I_16L, L_I16L}, - {IMAGING_MODE_I_16L, IMAGING_MODE_L, I16L_L}, - {IMAGING_MODE_L, IMAGING_MODE_I_16B, L_I16B}, - {IMAGING_MODE_I_16B, IMAGING_MODE_L, I16B_L}, -#ifdef WORDS_BIGENDIAN - {IMAGING_MODE_L, IMAGING_MODE_I_16N, L_I16B}, - {IMAGING_MODE_I_16N, IMAGING_MODE_L, I16B_L}, -#else - {IMAGING_MODE_L, IMAGING_MODE_I_16N, L_I16L}, - {IMAGING_MODE_I_16N, IMAGING_MODE_L, I16L_L}, -#endif - - {IMAGING_MODE_I_16, IMAGING_MODE_F, I16L_F}, - {IMAGING_MODE_I_16L, IMAGING_MODE_F, I16L_F}, - {IMAGING_MODE_I_16B, IMAGING_MODE_F, I16B_F}, - - {NULL} - }; - converters = malloc(sizeof(temp)); - if (converters == NULL) { - fprintf(stderr, "ConvertInit: failed to allocate memory for converter table\n"); - exit(1); - } - memcpy(converters, temp, sizeof(temp)); -} - -void -ImagingConvertFree(void) { - free(converters); - converters = NULL; -} diff --git a/src/libImaging/Dib.c b/src/libImaging/Dib.c index 154c610ec..2afe71d4a 100644 --- a/src/libImaging/Dib.c +++ b/src/libImaging/Dib.c @@ -25,13 +25,13 @@ #include "ImDib.h" -const Mode * +ModeID ImagingGetModeDIB(int size_out[2]) { /* Get device characteristics */ const HDC dc = CreateCompatibleDC(NULL); - const Mode *mode = IMAGING_MODE_P; + ModeID mode = IMAGING_MODE_P; if (!(GetDeviceCaps(dc, RASTERCAPS) & RC_PALETTE)) { mode = IMAGING_MODE_RGB; if (GetDeviceCaps(dc, BITSPIXEL) == 1) { @@ -50,7 +50,7 @@ ImagingGetModeDIB(int size_out[2]) { } ImagingDIB -ImagingNewDIB(const Mode * const mode, int xsize, int ysize) { +ImagingNewDIB(const ModeID mode, int xsize, int ysize) { /* Create a Windows bitmap */ ImagingDIB dib; diff --git a/src/libImaging/Fill.c b/src/libImaging/Fill.c index 854cdb9fe..0224d1ba9 100644 --- a/src/libImaging/Fill.c +++ b/src/libImaging/Fill.c @@ -68,7 +68,7 @@ ImagingFill(Imaging im, const void *colour) { } Imaging -ImagingFillLinearGradient(const Mode *mode) { +ImagingFillLinearGradient(const ModeID mode) { Imaging im; int y; @@ -105,7 +105,7 @@ ImagingFillLinearGradient(const Mode *mode) { } Imaging -ImagingFillRadialGradient(const Mode *mode) { +ImagingFillRadialGradient(const ModeID mode) { Imaging im; int x, y; int d; diff --git a/src/libImaging/ImDib.h b/src/libImaging/ImDib.h index 6d8f420cb..65f090f92 100644 --- a/src/libImaging/ImDib.h +++ b/src/libImaging/ImDib.h @@ -27,7 +27,7 @@ struct ImagingDIBInstance { UINT8 *bits; HPALETTE palette; /* Used by cut and paste */ - const Mode *mode; + ModeID mode; int xsize, ysize; int pixelsize; int linesize; @@ -37,11 +37,11 @@ struct ImagingDIBInstance { typedef struct ImagingDIBInstance *ImagingDIB; -extern const Mode * +extern ModeID ImagingGetModeDIB(int size_out[2]); extern ImagingDIB -ImagingNewDIB(const Mode * const mode, int xsize, int ysize); +ImagingNewDIB(ModeID mode, int xsize, int ysize); extern void ImagingDeleteDIB(ImagingDIB im); diff --git a/src/libImaging/Imaging.h b/src/libImaging/Imaging.h index 9f450dd3a..290a76c8e 100644 --- a/src/libImaging/Imaging.h +++ b/src/libImaging/Imaging.h @@ -79,11 +79,11 @@ typedef struct { struct ImagingMemoryInstance { /* Format */ - const Mode *mode; /* Image mode (IMAGING_MODE_*) */ - int type; /* Data type (IMAGING_TYPE_*) */ - int depth; /* Depth (ignored in this version) */ - int bands; /* Number of bands (1, 2, 3, or 4) */ - int xsize; /* Image dimension. */ + ModeID mode; /* Image mode (IMAGING_MODE_*) */ + int type; /* Data type (IMAGING_TYPE_*) */ + int depth; /* Depth (ignored in this version) */ + int bands; /* Number of bands (1, 2, 3, or 4) */ + int xsize; /* Image dimension. */ int ysize; /* Colour palette (for "P" images only) */ @@ -137,15 +137,15 @@ struct ImagingMemoryInstance { #define IMAGING_PIXEL_FLOAT32(im, x, y) (((FLOAT32 *)(im)->image32[y])[x]) struct ImagingAccessInstance { - const Mode *mode; + ModeID mode; void (*get_pixel)(Imaging im, int x, int y, void *pixel); void (*put_pixel)(Imaging im, int x, int y, const void *pixel); }; struct ImagingHistogramInstance { /* Format */ - const Mode *mode; /* Mode of corresponding source image */ - int bands; /* Number of bands (1, 3, or 4) */ + ModeID mode; /* Mode ID of corresponding source image */ + int bands; /* Number of bands (1, 3, or 4) */ /* Data */ long *histogram; /* Histogram (bands*256 longs) */ @@ -153,7 +153,7 @@ struct ImagingHistogramInstance { struct ImagingPaletteInstance { /* Format */ - const Mode *mode; + ModeID mode; /* Data */ int size; @@ -181,29 +181,6 @@ typedef struct ImagingMemoryArena { #endif } *ImagingMemoryArena; -/* Memory Management */ -/* ----------------- */ - -extern void -ImagingAccessInit(void); -extern void -ImagingAccessFree(void); - -extern void -ImagingConvertInit(void); -extern void -ImagingConvertFree(void); - -extern void -ImagingPackInit(void); -extern void -ImagingPackFree(void); - -extern void -ImagingUnpackInit(void); -extern void -ImagingUnpackFree(void); - /* Objects */ /* ------- */ @@ -216,20 +193,20 @@ extern void ImagingMemorySetBlockAllocator(ImagingMemoryArena arena, int use_block_allocator); extern Imaging -ImagingNew(const Mode *mode, int xsize, int ysize); +ImagingNew(ModeID mode, int xsize, int ysize); extern Imaging -ImagingNewDirty(const Mode *mode, int xsize, int ysize); +ImagingNewDirty(ModeID mode, int xsize, int ysize); extern Imaging -ImagingNew2Dirty(const Mode *mode, Imaging imOut, Imaging imIn); +ImagingNew2Dirty(ModeID mode, Imaging imOut, Imaging imIn); extern void ImagingDelete(Imaging im); extern Imaging -ImagingNewBlock(const Mode *mode, int xsize, int ysize); +ImagingNewBlock(ModeID mode, int xsize, int ysize); extern Imaging ImagingNewArrow( - const char *mode, + const ModeID mode, int xsize, int ysize, PyObject *schema_capsule, @@ -237,9 +214,9 @@ ImagingNewArrow( ); extern Imaging -ImagingNewPrologue(const Mode *mode, int xsize, int ysize); +ImagingNewPrologue(ModeID mode, int xsize, int ysize); extern Imaging -ImagingNewPrologueSubtype(const Mode *mode, int xsize, int ysize, int structure_size); +ImagingNewPrologueSubtype(ModeID mode, int xsize, int ysize, int structure_size); extern void ImagingCopyPalette(Imaging destination, Imaging source); @@ -254,7 +231,7 @@ _ImagingAccessDelete(Imaging im, ImagingAccess access); #define ImagingAccessDelete(im, access) /* nop, for now */ extern ImagingPalette -ImagingPaletteNew(const Mode *mode); +ImagingPaletteNew(ModeID mode); extern ImagingPalette ImagingPaletteNewBrowser(void); extern ImagingPalette @@ -326,13 +303,13 @@ ImagingBlend(Imaging imIn1, Imaging imIn2, float alpha); extern Imaging ImagingCopy(Imaging im); extern Imaging -ImagingConvert(Imaging im, const Mode *mode, ImagingPalette palette, int dither); +ImagingConvert(Imaging im, ModeID mode, ImagingPalette palette, int dither); extern Imaging -ImagingConvertInPlace(Imaging im, const Mode *mode); +ImagingConvertInPlace(Imaging im, ModeID mode); extern Imaging -ImagingConvertMatrix(Imaging im, const Mode *mode, float m[]); +ImagingConvertMatrix(Imaging im, ModeID mode, float m[]); extern Imaging -ImagingConvertTransparent(Imaging im, const Mode *mode, int r, int g, int b); +ImagingConvertTransparent(Imaging im, ModeID mode, int r, int g, int b); extern Imaging ImagingCrop(Imaging im, int x0, int y0, int x1, int y1); extern Imaging @@ -346,9 +323,9 @@ ImagingFill2( extern Imaging ImagingFillBand(Imaging im, int band, int color); extern Imaging -ImagingFillLinearGradient(const Mode *mode); +ImagingFillLinearGradient(ModeID mode); extern Imaging -ImagingFillRadialGradient(const Mode *mode); +ImagingFillRadialGradient(ModeID mode); extern Imaging ImagingFilter(Imaging im, int xsize, int ysize, const FLOAT32 *kernel, FLOAT32 offset); extern Imaging @@ -362,7 +339,7 @@ ImagingGaussianBlur( extern Imaging ImagingGetBand(Imaging im, int band); extern Imaging -ImagingMerge(const Mode *mode, Imaging bands[4]); +ImagingMerge(ModeID mode, Imaging bands[4]); extern int ImagingSplit(Imaging im, Imaging bands[4]); extern int @@ -389,7 +366,7 @@ ImagingOffset(Imaging im, int xoffset, int yoffset); extern int ImagingPaste(Imaging into, Imaging im, Imaging mask, int x0, int y0, int x1, int y1); extern Imaging -ImagingPoint(Imaging im, const Mode *tablemode, const void *table); +ImagingPoint(Imaging im, ModeID tablemode, const void *table); extern Imaging ImagingPointTransform(Imaging imIn, double scale, double offset); extern Imaging @@ -730,9 +707,9 @@ extern void ImagingConvertYCbCr2RGB(UINT8 *out, const UINT8 *in, int pixels); extern ImagingShuffler -ImagingFindUnpacker(const Mode *mode, const RawMode *rawmode, int *bits_out); +ImagingFindUnpacker(ModeID mode, RawModeID rawmode, int *bits_out); extern ImagingShuffler -ImagingFindPacker(const Mode *mode, const RawMode *rawmode, int *bits_out); +ImagingFindPacker(ModeID mode, RawModeID rawmode, int *bits_out); struct ImagingCodecStateInstance { int count; diff --git a/src/libImaging/Jpeg.h b/src/libImaging/Jpeg.h index 48c6c6184..e07904fc7 100644 --- a/src/libImaging/Jpeg.h +++ b/src/libImaging/Jpeg.h @@ -28,12 +28,12 @@ typedef struct { typedef struct { /* CONFIGURATION */ - /* Jpeg file mode (NULL if not known) */ - const RawMode *jpegmode; + /* Jpeg file mode */ + RawModeID jpegmode; /* Converter output mode (input to the shuffler) */ - /* If NULL, convert conversions are disabled */ - const RawMode *rawmode; + /* If not a valid mode, convert conversions are disabled */ + RawModeID rawmode; /* If set, trade quality for speed */ int draft; @@ -91,7 +91,7 @@ typedef struct { unsigned int restart_marker_rows; /* Converter input mode (input to the shuffler) */ - const RawMode *rawmode; + RawModeID rawmode; /* Custom quantization tables () */ unsigned int *qtables; diff --git a/src/libImaging/Jpeg2KDecode.c b/src/libImaging/Jpeg2KDecode.c index 3cbe2965d..67f705ddd 100644 --- a/src/libImaging/Jpeg2KDecode.c +++ b/src/libImaging/Jpeg2KDecode.c @@ -771,7 +771,7 @@ j2k_decode_entry(Imaging im, ImagingCodecState state) { if (color_space == j2k_unpackers[n].color_space && image->numcomps == j2k_unpackers[n].components && (j2k_unpackers[n].subsampling || (subsampling == -1)) && - strcmp(im->mode->name, j2k_unpackers[n].mode) == 0) { + strcmp(getModeData(im->mode)->name, j2k_unpackers[n].mode) == 0) { unpack = j2k_unpackers[n].unpacker; break; } diff --git a/src/libImaging/JpegDecode.c b/src/libImaging/JpegDecode.c index 49d4fcb2f..ae3274456 100644 --- a/src/libImaging/JpegDecode.c +++ b/src/libImaging/JpegDecode.c @@ -180,8 +180,8 @@ ImagingJpegDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t by /* Decoder settings */ - /* jpegmode indicates what's in the file; if not set, we'll - trust the decoder */ + /* jpegmode indicates what's in the file. */ + /* If not valid, we'll trust the decoder. */ if (context->jpegmode == IMAGING_RAWMODE_L) { context->cinfo.jpeg_color_space = JCS_GRAYSCALE; } else if (context->jpegmode == IMAGING_RAWMODE_RGB) { @@ -194,8 +194,8 @@ ImagingJpegDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t by context->cinfo.jpeg_color_space = JCS_YCCK; } - /* rawmode indicates what we want from the decoder. if not - set, conversions are disabled */ + /* rawmode indicates what we want from the decoder. */ + /* If not valid, conversions are disabled. */ if (context->rawmode == IMAGING_RAWMODE_L) { context->cinfo.out_color_space = JCS_GRAYSCALE; } else if (context->rawmode == IMAGING_RAWMODE_RGB) { @@ -214,7 +214,7 @@ ImagingJpegDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t by } else if (context->rawmode == IMAGING_RAWMODE_YCbCrK) { context->cinfo.out_color_space = JCS_YCCK; } else { - /* Disable decoder conversions */ + /* Disable decoder conversions. */ context->cinfo.jpeg_color_space = JCS_UNKNOWN; context->cinfo.out_color_space = JCS_UNKNOWN; } diff --git a/src/libImaging/Matrix.c b/src/libImaging/Matrix.c index f848b870d..6bc9fbc1d 100644 --- a/src/libImaging/Matrix.c +++ b/src/libImaging/Matrix.c @@ -18,7 +18,7 @@ #define CLIPF(v) ((v <= 0.0) ? 0 : (v >= 255.0F) ? 255 : (UINT8)v) Imaging -ImagingConvertMatrix(Imaging im, const Mode *mode, float m[]) { +ImagingConvertMatrix(Imaging im, const ModeID mode, float m[]) { Imaging imOut; int x, y; ImagingSectionCookie cookie; diff --git a/src/libImaging/Mode.c b/src/libImaging/Mode.c index 01b2b5501..659e7aada 100644 --- a/src/libImaging/Mode.c +++ b/src/libImaging/Mode.c @@ -2,453 +2,258 @@ #include -#define CREATE_MODE(TYPE, NAME, INIT) \ -const TYPE IMAGING_##NAME##_VAL = INIT;\ -const TYPE * const IMAGING_##NAME = &IMAGING_##NAME##_VAL; +const ModeData MODES[] = { + [IMAGING_MODE_UNKNOWN] = {""}, + [IMAGING_MODE_1] = {"1"}, + [IMAGING_MODE_CMYK] = {"CMYK"}, + [IMAGING_MODE_F] = {"F"}, + [IMAGING_MODE_HSV] = {"HSV"}, + [IMAGING_MODE_I] = {"I"}, + [IMAGING_MODE_L] = {"L"}, + [IMAGING_MODE_LA] = {"LA"}, + [IMAGING_MODE_LAB] = {"LAB"}, + [IMAGING_MODE_La] = {"La"}, + [IMAGING_MODE_P] = {"P"}, + [IMAGING_MODE_PA] = {"PA"}, + [IMAGING_MODE_RGB] = {"RGB"}, + [IMAGING_MODE_RGBA] = {"RGBA"}, + [IMAGING_MODE_RGBX] = {"RGBX"}, + [IMAGING_MODE_RGBa] = {"RGBa"}, + [IMAGING_MODE_YCbCr] = {"YCbCr"}, -CREATE_MODE(Mode, MODE_1, {"1"}) -CREATE_MODE(Mode, MODE_CMYK, {"CMYK"}) -CREATE_MODE(Mode, MODE_F, {"F"}) -CREATE_MODE(Mode, MODE_HSV, {"HSV"}) -CREATE_MODE(Mode, MODE_I, {"I"}) -CREATE_MODE(Mode, MODE_L, {"L"}) -CREATE_MODE(Mode, MODE_LA, {"LA"}) -CREATE_MODE(Mode, MODE_LAB, {"LAB"}) -CREATE_MODE(Mode, MODE_La, {"La"}) -CREATE_MODE(Mode, MODE_P, {"P"}) -CREATE_MODE(Mode, MODE_PA, {"PA"}) -CREATE_MODE(Mode, MODE_RGB, {"RGB"}) -CREATE_MODE(Mode, MODE_RGBA, {"RGBA"}) -CREATE_MODE(Mode, MODE_RGBX, {"RGBX"}) -CREATE_MODE(Mode, MODE_RGBa, {"RGBa"}) -CREATE_MODE(Mode, MODE_YCbCr, {"YCbCr"}) + [IMAGING_MODE_BGR_15] = {"BGR;15"}, + [IMAGING_MODE_BGR_16] = {"BGR;16"}, + [IMAGING_MODE_BGR_24] = {"BGR;24"}, -CREATE_MODE(Mode, MODE_BGR_15, {"BGR;15"}) -CREATE_MODE(Mode, MODE_BGR_16, {"BGR;16"}) -CREATE_MODE(Mode, MODE_BGR_24, {"BGR;24"}) - -CREATE_MODE(Mode, MODE_I_16, {"I;16"}) -CREATE_MODE(Mode, MODE_I_16L, {"I;16L"}) -CREATE_MODE(Mode, MODE_I_16B, {"I;16B"}) -CREATE_MODE(Mode, MODE_I_16N, {"I;16N"}) -CREATE_MODE(Mode, MODE_I_32L, {"I;32L"}) -CREATE_MODE(Mode, MODE_I_32B, {"I;32B"}) - -const Mode * const MODES[] = { - IMAGING_MODE_1, - IMAGING_MODE_CMYK, - IMAGING_MODE_F, - IMAGING_MODE_HSV, - IMAGING_MODE_I, - IMAGING_MODE_L, - IMAGING_MODE_LA, - IMAGING_MODE_LAB, - IMAGING_MODE_La, - IMAGING_MODE_P, - IMAGING_MODE_PA, - IMAGING_MODE_RGB, - IMAGING_MODE_RGBA, - IMAGING_MODE_RGBX, - IMAGING_MODE_RGBa, - IMAGING_MODE_YCbCr, - - IMAGING_MODE_BGR_15, - IMAGING_MODE_BGR_16, - IMAGING_MODE_BGR_24, - - IMAGING_MODE_I_16, - IMAGING_MODE_I_16L, - IMAGING_MODE_I_16B, - IMAGING_MODE_I_16N, - IMAGING_MODE_I_32L, - IMAGING_MODE_I_32B, - - NULL + [IMAGING_MODE_I_16] = {"I;16"}, + [IMAGING_MODE_I_16L] = {"I;16L"}, + [IMAGING_MODE_I_16B] = {"I;16B"}, + [IMAGING_MODE_I_16N] = {"I;16N"}, + [IMAGING_MODE_I_32L] = {"I;32L"}, + [IMAGING_MODE_I_32B] = {"I;32B"}, }; -const Mode * findMode(const char * const name) { +const ModeID findModeID(const char * const name) { if (name == NULL) { - return NULL; + return IMAGING_MODE_UNKNOWN; } - const Mode * mode; - for (int i = 0; (mode = MODES[i]); i++) { - if (strcmp(mode->name, name) == 0) { - return mode; + for (size_t i = 0; i < sizeof(MODES) / sizeof(*MODES); i++) { + if (strcmp(MODES[i].name, name) == 0) { + return (ModeID)i; } } - return NULL; + return IMAGING_MODE_UNKNOWN; +} + +const ModeData * const getModeData(const ModeID id) { + if (id < 0 || id > sizeof(MODES) / sizeof(*MODES)) { + return &MODES[IMAGING_MODE_UNKNOWN]; + } + return &MODES[id]; } -// Alias all of the modes as rawmodes so that the addresses are the same. -#define ALIAS_MODE_AS_RAWMODE(NAME) const RawMode * const IMAGING_RAWMODE_##NAME = (const RawMode * const)IMAGING_MODE_##NAME; -ALIAS_MODE_AS_RAWMODE(1) -ALIAS_MODE_AS_RAWMODE(CMYK) -ALIAS_MODE_AS_RAWMODE(F) -ALIAS_MODE_AS_RAWMODE(HSV) -ALIAS_MODE_AS_RAWMODE(I) -ALIAS_MODE_AS_RAWMODE(L) -ALIAS_MODE_AS_RAWMODE(LA) -ALIAS_MODE_AS_RAWMODE(LAB) -ALIAS_MODE_AS_RAWMODE(La) -ALIAS_MODE_AS_RAWMODE(P) -ALIAS_MODE_AS_RAWMODE(PA) -ALIAS_MODE_AS_RAWMODE(RGB) -ALIAS_MODE_AS_RAWMODE(RGBA) -ALIAS_MODE_AS_RAWMODE(RGBX) -ALIAS_MODE_AS_RAWMODE(RGBa) -ALIAS_MODE_AS_RAWMODE(YCbCr) +const RawModeData RAWMODES[] = { + [IMAGING_RAWMODE_UNKNOWN] = {""}, -ALIAS_MODE_AS_RAWMODE(BGR_15) -ALIAS_MODE_AS_RAWMODE(BGR_16) -ALIAS_MODE_AS_RAWMODE(BGR_24) + [IMAGING_RAWMODE_1] = {"1"}, + [IMAGING_RAWMODE_CMYK] = {"CMYK"}, + [IMAGING_RAWMODE_F] = {"F"}, + [IMAGING_RAWMODE_HSV] = {"HSV"}, + [IMAGING_RAWMODE_I] = {"I"}, + [IMAGING_RAWMODE_L] = {"L"}, + [IMAGING_RAWMODE_LA] = {"LA"}, + [IMAGING_RAWMODE_LAB] = {"LAB"}, + [IMAGING_RAWMODE_La] = {"La"}, + [IMAGING_RAWMODE_P] = {"P"}, + [IMAGING_RAWMODE_PA] = {"PA"}, + [IMAGING_RAWMODE_RGB] = {"RGB"}, + [IMAGING_RAWMODE_RGBA] = {"RGBA"}, + [IMAGING_RAWMODE_RGBX] = {"RGBX"}, + [IMAGING_RAWMODE_RGBa] = {"RGBa"}, + [IMAGING_RAWMODE_YCbCr] = {"YCbCr"}, -ALIAS_MODE_AS_RAWMODE(I_16) -ALIAS_MODE_AS_RAWMODE(I_16L) -ALIAS_MODE_AS_RAWMODE(I_16B) -ALIAS_MODE_AS_RAWMODE(I_16N) -ALIAS_MODE_AS_RAWMODE(I_32L) -ALIAS_MODE_AS_RAWMODE(I_32B) + [IMAGING_RAWMODE_BGR_15] = {"BGR;15"}, + [IMAGING_RAWMODE_BGR_16] = {"BGR;16"}, + [IMAGING_RAWMODE_BGR_24] = {"BGR;24"}, + [IMAGING_RAWMODE_BGR_32] = {"BGR;32"}, -CREATE_MODE(RawMode, RAWMODE_1_8, {"1;8"}) -CREATE_MODE(RawMode, RAWMODE_1_I, {"1;I"}) -CREATE_MODE(RawMode, RAWMODE_1_IR, {"1;IR"}) -CREATE_MODE(RawMode, RAWMODE_1_R, {"1;R"}) -CREATE_MODE(RawMode, RAWMODE_A, {"A"}) -CREATE_MODE(RawMode, RAWMODE_ABGR, {"ABGR"}) -CREATE_MODE(RawMode, RAWMODE_ARGB, {"ARGB"}) -CREATE_MODE(RawMode, RAWMODE_A_16B, {"A;16B"}) -CREATE_MODE(RawMode, RAWMODE_A_16L, {"A;16L"}) -CREATE_MODE(RawMode, RAWMODE_A_16N, {"A;16N"}) -CREATE_MODE(RawMode, RAWMODE_B, {"B"}) -CREATE_MODE(RawMode, RAWMODE_BGAR, {"BGAR"}) -CREATE_MODE(RawMode, RAWMODE_BGR, {"BGR"}) -CREATE_MODE(RawMode, RAWMODE_BGRA, {"BGRA"}) -CREATE_MODE(RawMode, RAWMODE_BGRA_15, {"BGRA;15"}) -CREATE_MODE(RawMode, RAWMODE_BGRA_15Z, {"BGRA;15Z"}) -CREATE_MODE(RawMode, RAWMODE_BGRA_16B, {"BGRA;16B"}) -CREATE_MODE(RawMode, RAWMODE_BGRA_16L, {"BGRA;16L"}) -CREATE_MODE(RawMode, RAWMODE_BGRX, {"BGRX"}) -CREATE_MODE(RawMode, RAWMODE_BGR_5, {"BGR;5"}) -CREATE_MODE(RawMode, RAWMODE_BGRa, {"BGRa"}) -CREATE_MODE(RawMode, RAWMODE_BGXR, {"BGXR"}) -CREATE_MODE(RawMode, RAWMODE_B_16B, {"B;16B"}) -CREATE_MODE(RawMode, RAWMODE_B_16L, {"B;16L"}) -CREATE_MODE(RawMode, RAWMODE_B_16N, {"B;16N"}) -CREATE_MODE(RawMode, RAWMODE_C, {"C"}) -CREATE_MODE(RawMode, RAWMODE_CMYKX, {"CMYKX"}) -CREATE_MODE(RawMode, RAWMODE_CMYKXX, {"CMYKXX"}) -CREATE_MODE(RawMode, RAWMODE_CMYK_16B, {"CMYK;16B"}) -CREATE_MODE(RawMode, RAWMODE_CMYK_16L, {"CMYK;16L"}) -CREATE_MODE(RawMode, RAWMODE_CMYK_16N, {"CMYK;16N"}) -CREATE_MODE(RawMode, RAWMODE_CMYK_I, {"CMYK;I"}) -CREATE_MODE(RawMode, RAWMODE_CMYK_L, {"CMYK;L"}) -CREATE_MODE(RawMode, RAWMODE_C_I, {"C;I"}) -CREATE_MODE(RawMode, RAWMODE_Cb, {"Cb"}) -CREATE_MODE(RawMode, RAWMODE_Cr, {"Cr"}) -CREATE_MODE(RawMode, RAWMODE_F_16, {"F;16"}) -CREATE_MODE(RawMode, RAWMODE_F_16B, {"F;16B"}) -CREATE_MODE(RawMode, RAWMODE_F_16BS, {"F;16BS"}) -CREATE_MODE(RawMode, RAWMODE_F_16N, {"F;16N"}) -CREATE_MODE(RawMode, RAWMODE_F_16NS, {"F;16NS"}) -CREATE_MODE(RawMode, RAWMODE_F_16S, {"F;16S"}) -CREATE_MODE(RawMode, RAWMODE_F_32, {"F;32"}) -CREATE_MODE(RawMode, RAWMODE_F_32B, {"F;32B"}) -CREATE_MODE(RawMode, RAWMODE_F_32BF, {"F;32BF"}) -CREATE_MODE(RawMode, RAWMODE_F_32BS, {"F;32BS"}) -CREATE_MODE(RawMode, RAWMODE_F_32F, {"F;32F"}) -CREATE_MODE(RawMode, RAWMODE_F_32N, {"F;32N"}) -CREATE_MODE(RawMode, RAWMODE_F_32NF, {"F;32NF"}) -CREATE_MODE(RawMode, RAWMODE_F_32NS, {"F;32NS"}) -CREATE_MODE(RawMode, RAWMODE_F_32S, {"F;32S"}) -CREATE_MODE(RawMode, RAWMODE_F_64BF, {"F;64BF"}) -CREATE_MODE(RawMode, RAWMODE_F_64F, {"F;64F"}) -CREATE_MODE(RawMode, RAWMODE_F_64NF, {"F;64NF"}) -CREATE_MODE(RawMode, RAWMODE_F_8, {"F;8"}) -CREATE_MODE(RawMode, RAWMODE_F_8S, {"F;8S"}) -CREATE_MODE(RawMode, RAWMODE_G, {"G"}) -CREATE_MODE(RawMode, RAWMODE_G_16B, {"G;16B"}) -CREATE_MODE(RawMode, RAWMODE_G_16L, {"G;16L"}) -CREATE_MODE(RawMode, RAWMODE_G_16N, {"G;16N"}) -CREATE_MODE(RawMode, RAWMODE_H, {"H"}) -CREATE_MODE(RawMode, RAWMODE_I_12, {"I;12"}) -CREATE_MODE(RawMode, RAWMODE_I_16BS, {"I;16BS"}) -CREATE_MODE(RawMode, RAWMODE_I_16NS, {"I;16NS"}) -CREATE_MODE(RawMode, RAWMODE_I_16R, {"I;16R"}) -CREATE_MODE(RawMode, RAWMODE_I_16S, {"I;16S"}) -CREATE_MODE(RawMode, RAWMODE_I_32, {"I;32"}) -CREATE_MODE(RawMode, RAWMODE_I_32BS, {"I;32BS"}) -CREATE_MODE(RawMode, RAWMODE_I_32N, {"I;32N"}) -CREATE_MODE(RawMode, RAWMODE_I_32NS, {"I;32NS"}) -CREATE_MODE(RawMode, RAWMODE_I_32S, {"I;32S"}) -CREATE_MODE(RawMode, RAWMODE_I_8, {"I;8"}) -CREATE_MODE(RawMode, RAWMODE_I_8S, {"I;8S"}) -CREATE_MODE(RawMode, RAWMODE_K, {"K"}) -CREATE_MODE(RawMode, RAWMODE_K_I, {"K;I"}) -CREATE_MODE(RawMode, RAWMODE_LA_16B, {"LA;16B"}) -CREATE_MODE(RawMode, RAWMODE_LA_L, {"LA;L"}) -CREATE_MODE(RawMode, RAWMODE_L_16, {"L;16"}) -CREATE_MODE(RawMode, RAWMODE_L_16B, {"L;16B"}) -CREATE_MODE(RawMode, RAWMODE_L_2, {"L;2"}) -CREATE_MODE(RawMode, RAWMODE_L_2I, {"L;2I"}) -CREATE_MODE(RawMode, RAWMODE_L_2IR, {"L;2IR"}) -CREATE_MODE(RawMode, RAWMODE_L_2R, {"L;2R"}) -CREATE_MODE(RawMode, RAWMODE_L_4, {"L;4"}) -CREATE_MODE(RawMode, RAWMODE_L_4I, {"L;4I"}) -CREATE_MODE(RawMode, RAWMODE_L_4IR, {"L;4IR"}) -CREATE_MODE(RawMode, RAWMODE_L_4R, {"L;4R"}) -CREATE_MODE(RawMode, RAWMODE_L_I, {"L;I"}) -CREATE_MODE(RawMode, RAWMODE_L_R, {"L;R"}) -CREATE_MODE(RawMode, RAWMODE_M, {"M"}) -CREATE_MODE(RawMode, RAWMODE_M_I, {"M;I"}) -CREATE_MODE(RawMode, RAWMODE_PA_L, {"PA;L"}) -CREATE_MODE(RawMode, RAWMODE_PX, {"PX"}) -CREATE_MODE(RawMode, RAWMODE_P_1, {"P;1"}) -CREATE_MODE(RawMode, RAWMODE_P_2, {"P;2"}) -CREATE_MODE(RawMode, RAWMODE_P_2L, {"P;2L"}) -CREATE_MODE(RawMode, RAWMODE_P_4, {"P;4"}) -CREATE_MODE(RawMode, RAWMODE_P_4L, {"P;4L"}) -CREATE_MODE(RawMode, RAWMODE_P_R, {"P;R"}) -CREATE_MODE(RawMode, RAWMODE_R, {"R"}) -CREATE_MODE(RawMode, RAWMODE_RGBAX, {"RGBAX"}) -CREATE_MODE(RawMode, RAWMODE_RGBAXX, {"RGBAXX"}) -CREATE_MODE(RawMode, RAWMODE_RGBA_15, {"RGBA;15"}) -CREATE_MODE(RawMode, RAWMODE_RGBA_16B, {"RGBA;16B"}) -CREATE_MODE(RawMode, RAWMODE_RGBA_16L, {"RGBA;16L"}) -CREATE_MODE(RawMode, RAWMODE_RGBA_16N, {"RGBA;16N"}) -CREATE_MODE(RawMode, RAWMODE_RGBA_4B, {"RGBA;4B"}) -CREATE_MODE(RawMode, RAWMODE_RGBA_I, {"RGBA;I"}) -CREATE_MODE(RawMode, RAWMODE_RGBA_L, {"RGBA;L"}) -CREATE_MODE(RawMode, RAWMODE_RGBXX, {"RGBXX"}) -CREATE_MODE(RawMode, RAWMODE_RGBXXX, {"RGBXXX"}) -CREATE_MODE(RawMode, RAWMODE_RGBX_16B, {"RGBX;16B"}) -CREATE_MODE(RawMode, RAWMODE_RGBX_16L, {"RGBX;16L"}) -CREATE_MODE(RawMode, RAWMODE_RGBX_16N, {"RGBX;16N"}) -CREATE_MODE(RawMode, RAWMODE_RGBX_L, {"RGBX;L"}) -CREATE_MODE(RawMode, RAWMODE_RGB_15, {"RGB;15"}) -CREATE_MODE(RawMode, RAWMODE_RGB_16, {"RGB;16"}) -CREATE_MODE(RawMode, RAWMODE_RGB_16B, {"RGB;16B"}) -CREATE_MODE(RawMode, RAWMODE_RGB_16L, {"RGB;16L"}) -CREATE_MODE(RawMode, RAWMODE_RGB_16N, {"RGB;16N"}) -CREATE_MODE(RawMode, RAWMODE_RGB_4B, {"RGB;4B"}) -CREATE_MODE(RawMode, RAWMODE_RGB_L, {"RGB;L"}) -CREATE_MODE(RawMode, RAWMODE_RGB_R, {"RGB;R"}) -CREATE_MODE(RawMode, RAWMODE_RGBaX, {"RGBaX"}) -CREATE_MODE(RawMode, RAWMODE_RGBaXX, {"RGBaXX"}) -CREATE_MODE(RawMode, RAWMODE_RGBa_16B, {"RGBa;16B"}) -CREATE_MODE(RawMode, RAWMODE_RGBa_16L, {"RGBa;16L"}) -CREATE_MODE(RawMode, RAWMODE_RGBa_16N, {"RGBa;16N"}) -CREATE_MODE(RawMode, RAWMODE_R_16B, {"R;16B"}) -CREATE_MODE(RawMode, RAWMODE_R_16L, {"R;16L"}) -CREATE_MODE(RawMode, RAWMODE_R_16N, {"R;16N"}) -CREATE_MODE(RawMode, RAWMODE_S, {"S"}) -CREATE_MODE(RawMode, RAWMODE_V, {"V"}) -CREATE_MODE(RawMode, RAWMODE_X, {"X"}) -CREATE_MODE(RawMode, RAWMODE_XBGR, {"XBGR"}) -CREATE_MODE(RawMode, RAWMODE_XRGB, {"XRGB"}) -CREATE_MODE(RawMode, RAWMODE_Y, {"Y"}) -CREATE_MODE(RawMode, RAWMODE_YCCA_P, {"YCCA;P"}) -CREATE_MODE(RawMode, RAWMODE_YCC_P, {"YCC;P"}) -CREATE_MODE(RawMode, RAWMODE_YCbCrK, {"YCbCrK"}) -CREATE_MODE(RawMode, RAWMODE_YCbCrX, {"YCbCrX"}) -CREATE_MODE(RawMode, RAWMODE_YCbCr_L, {"YCbCr;L"}) -CREATE_MODE(RawMode, RAWMODE_Y_I, {"Y;I"}) -CREATE_MODE(RawMode, RAWMODE_aBGR, {"aBGR"}) -CREATE_MODE(RawMode, RAWMODE_aRGB, {"aRGB"}) + [IMAGING_RAWMODE_I_16] = {"I;16"}, + [IMAGING_RAWMODE_I_16L] = {"I;16L"}, + [IMAGING_RAWMODE_I_16B] = {"I;16B"}, + [IMAGING_RAWMODE_I_16N] = {"I;16N"}, + [IMAGING_RAWMODE_I_32L] = {"I;32L"}, + [IMAGING_RAWMODE_I_32B] = {"I;32B"}, -const RawMode * const RAWMODES[] = { - IMAGING_RAWMODE_1, - IMAGING_RAWMODE_CMYK, - IMAGING_RAWMODE_F, - IMAGING_RAWMODE_HSV, - IMAGING_RAWMODE_I, - IMAGING_RAWMODE_L, - IMAGING_RAWMODE_LA, - IMAGING_RAWMODE_LAB, - IMAGING_RAWMODE_La, - IMAGING_RAWMODE_P, - IMAGING_RAWMODE_PA, - IMAGING_RAWMODE_RGB, - IMAGING_RAWMODE_RGBA, - IMAGING_RAWMODE_RGBX, - IMAGING_RAWMODE_RGBa, - IMAGING_RAWMODE_YCbCr, - - IMAGING_RAWMODE_BGR_15, - IMAGING_RAWMODE_BGR_16, - IMAGING_RAWMODE_BGR_24, - - IMAGING_RAWMODE_I_16, - IMAGING_RAWMODE_I_16L, - IMAGING_RAWMODE_I_16B, - IMAGING_RAWMODE_I_16N, - IMAGING_RAWMODE_I_32L, - IMAGING_RAWMODE_I_32B, - - IMAGING_RAWMODE_1_8, - IMAGING_RAWMODE_1_I, - IMAGING_RAWMODE_1_IR, - IMAGING_RAWMODE_1_R, - IMAGING_RAWMODE_A, - IMAGING_RAWMODE_ABGR, - IMAGING_RAWMODE_ARGB, - IMAGING_RAWMODE_A_16B, - IMAGING_RAWMODE_A_16L, - IMAGING_RAWMODE_A_16N, - IMAGING_RAWMODE_B, - IMAGING_RAWMODE_BGAR, - IMAGING_RAWMODE_BGR, - IMAGING_RAWMODE_BGRA, - IMAGING_RAWMODE_BGRA_15, - IMAGING_RAWMODE_BGRA_15Z, - IMAGING_RAWMODE_BGRA_16B, - IMAGING_RAWMODE_BGRA_16L, - IMAGING_RAWMODE_BGRX, - IMAGING_RAWMODE_BGR_5, - IMAGING_RAWMODE_BGRa, - IMAGING_RAWMODE_BGXR, - IMAGING_RAWMODE_B_16B, - IMAGING_RAWMODE_B_16L, - IMAGING_RAWMODE_B_16N, - IMAGING_RAWMODE_C, - IMAGING_RAWMODE_CMYKX, - IMAGING_RAWMODE_CMYKXX, - IMAGING_RAWMODE_CMYK_16B, - IMAGING_RAWMODE_CMYK_16L, - IMAGING_RAWMODE_CMYK_16N, - IMAGING_RAWMODE_CMYK_I, - IMAGING_RAWMODE_CMYK_L, - IMAGING_RAWMODE_C_I, - IMAGING_RAWMODE_Cb, - IMAGING_RAWMODE_Cr, - IMAGING_RAWMODE_F_16, - IMAGING_RAWMODE_F_16B, - IMAGING_RAWMODE_F_16BS, - IMAGING_RAWMODE_F_16N, - IMAGING_RAWMODE_F_16NS, - IMAGING_RAWMODE_F_16S, - IMAGING_RAWMODE_F_32, - IMAGING_RAWMODE_F_32B, - IMAGING_RAWMODE_F_32BF, - IMAGING_RAWMODE_F_32BS, - IMAGING_RAWMODE_F_32F, - IMAGING_RAWMODE_F_32N, - IMAGING_RAWMODE_F_32NF, - IMAGING_RAWMODE_F_32NS, - IMAGING_RAWMODE_F_32S, - IMAGING_RAWMODE_F_64BF, - IMAGING_RAWMODE_F_64F, - IMAGING_RAWMODE_F_64NF, - IMAGING_RAWMODE_F_8, - IMAGING_RAWMODE_F_8S, - IMAGING_RAWMODE_G, - IMAGING_RAWMODE_G_16B, - IMAGING_RAWMODE_G_16L, - IMAGING_RAWMODE_G_16N, - IMAGING_RAWMODE_H, - IMAGING_RAWMODE_I_12, - IMAGING_RAWMODE_I_16BS, - IMAGING_RAWMODE_I_16NS, - IMAGING_RAWMODE_I_16R, - IMAGING_RAWMODE_I_16S, - IMAGING_RAWMODE_I_32, - IMAGING_RAWMODE_I_32BS, - IMAGING_RAWMODE_I_32N, - IMAGING_RAWMODE_I_32NS, - IMAGING_RAWMODE_I_32S, - IMAGING_RAWMODE_I_8, - IMAGING_RAWMODE_I_8S, - IMAGING_RAWMODE_K, - IMAGING_RAWMODE_K_I, - IMAGING_RAWMODE_LA_16B, - IMAGING_RAWMODE_LA_L, - IMAGING_RAWMODE_L_16, - IMAGING_RAWMODE_L_16B, - IMAGING_RAWMODE_L_2, - IMAGING_RAWMODE_L_2I, - IMAGING_RAWMODE_L_2IR, - IMAGING_RAWMODE_L_2R, - IMAGING_RAWMODE_L_4, - IMAGING_RAWMODE_L_4I, - IMAGING_RAWMODE_L_4IR, - IMAGING_RAWMODE_L_4R, - IMAGING_RAWMODE_L_I, - IMAGING_RAWMODE_L_R, - IMAGING_RAWMODE_M, - IMAGING_RAWMODE_M_I, - IMAGING_RAWMODE_PA_L, - IMAGING_RAWMODE_PX, - IMAGING_RAWMODE_P_1, - IMAGING_RAWMODE_P_2, - IMAGING_RAWMODE_P_2L, - IMAGING_RAWMODE_P_4, - IMAGING_RAWMODE_P_4L, - IMAGING_RAWMODE_P_R, - IMAGING_RAWMODE_R, - IMAGING_RAWMODE_RGBAX, - IMAGING_RAWMODE_RGBAXX, - IMAGING_RAWMODE_RGBA_15, - IMAGING_RAWMODE_RGBA_16B, - IMAGING_RAWMODE_RGBA_16L, - IMAGING_RAWMODE_RGBA_16N, - IMAGING_RAWMODE_RGBA_4B, - IMAGING_RAWMODE_RGBA_I, - IMAGING_RAWMODE_RGBA_L, - IMAGING_RAWMODE_RGBXX, - IMAGING_RAWMODE_RGBXXX, - IMAGING_RAWMODE_RGBX_16B, - IMAGING_RAWMODE_RGBX_16L, - IMAGING_RAWMODE_RGBX_16N, - IMAGING_RAWMODE_RGBX_L, - IMAGING_RAWMODE_RGB_15, - IMAGING_RAWMODE_RGB_16, - IMAGING_RAWMODE_RGB_16B, - IMAGING_RAWMODE_RGB_16L, - IMAGING_RAWMODE_RGB_16N, - IMAGING_RAWMODE_RGB_4B, - IMAGING_RAWMODE_RGB_L, - IMAGING_RAWMODE_RGB_R, - IMAGING_RAWMODE_RGBaX, - IMAGING_RAWMODE_RGBaXX, - IMAGING_RAWMODE_RGBa_16B, - IMAGING_RAWMODE_RGBa_16L, - IMAGING_RAWMODE_RGBa_16N, - IMAGING_RAWMODE_R_16B, - IMAGING_RAWMODE_R_16L, - IMAGING_RAWMODE_R_16N, - IMAGING_RAWMODE_S, - IMAGING_RAWMODE_V, - IMAGING_RAWMODE_X, - IMAGING_RAWMODE_XBGR, - IMAGING_RAWMODE_XRGB, - IMAGING_RAWMODE_Y, - IMAGING_RAWMODE_YCCA_P, - IMAGING_RAWMODE_YCC_P, - IMAGING_RAWMODE_YCbCrK, - IMAGING_RAWMODE_YCbCrX, - IMAGING_RAWMODE_YCbCr_L, - IMAGING_RAWMODE_Y_I, - IMAGING_RAWMODE_aBGR, - IMAGING_RAWMODE_aRGB, - - NULL + [IMAGING_RAWMODE_1_8] = {"1;8"}, + [IMAGING_RAWMODE_1_I] = {"1;I"}, + [IMAGING_RAWMODE_1_IR] = {"1;IR"}, + [IMAGING_RAWMODE_1_R] = {"1;R"}, + [IMAGING_RAWMODE_A] = {"A"}, + [IMAGING_RAWMODE_ABGR] = {"ABGR"}, + [IMAGING_RAWMODE_ARGB] = {"ARGB"}, + [IMAGING_RAWMODE_A_16B] = {"A;16B"}, + [IMAGING_RAWMODE_A_16L] = {"A;16L"}, + [IMAGING_RAWMODE_A_16N] = {"A;16N"}, + [IMAGING_RAWMODE_B] = {"B"}, + [IMAGING_RAWMODE_BGAR] = {"BGAR"}, + [IMAGING_RAWMODE_BGR] = {"BGR"}, + [IMAGING_RAWMODE_BGRA] = {"BGRA"}, + [IMAGING_RAWMODE_BGRA_15] = {"BGRA;15"}, + [IMAGING_RAWMODE_BGRA_15Z] = {"BGRA;15Z"}, + [IMAGING_RAWMODE_BGRA_16B] = {"BGRA;16B"}, + [IMAGING_RAWMODE_BGRA_16L] = {"BGRA;16L"}, + [IMAGING_RAWMODE_BGRX] = {"BGRX"}, + [IMAGING_RAWMODE_BGR_5] = {"BGR;5"}, + [IMAGING_RAWMODE_BGRa] = {"BGRa"}, + [IMAGING_RAWMODE_BGXR] = {"BGXR"}, + [IMAGING_RAWMODE_B_16B] = {"B;16B"}, + [IMAGING_RAWMODE_B_16L] = {"B;16L"}, + [IMAGING_RAWMODE_B_16N] = {"B;16N"}, + [IMAGING_RAWMODE_C] = {"C"}, + [IMAGING_RAWMODE_CMYKX] = {"CMYKX"}, + [IMAGING_RAWMODE_CMYKXX] = {"CMYKXX"}, + [IMAGING_RAWMODE_CMYK_16B] = {"CMYK;16B"}, + [IMAGING_RAWMODE_CMYK_16L] = {"CMYK;16L"}, + [IMAGING_RAWMODE_CMYK_16N] = {"CMYK;16N"}, + [IMAGING_RAWMODE_CMYK_I] = {"CMYK;I"}, + [IMAGING_RAWMODE_CMYK_L] = {"CMYK;L"}, + [IMAGING_RAWMODE_C_I] = {"C;I"}, + [IMAGING_RAWMODE_Cb] = {"Cb"}, + [IMAGING_RAWMODE_Cr] = {"Cr"}, + [IMAGING_RAWMODE_F_16] = {"F;16"}, + [IMAGING_RAWMODE_F_16B] = {"F;16B"}, + [IMAGING_RAWMODE_F_16BS] = {"F;16BS"}, + [IMAGING_RAWMODE_F_16N] = {"F;16N"}, + [IMAGING_RAWMODE_F_16NS] = {"F;16NS"}, + [IMAGING_RAWMODE_F_16S] = {"F;16S"}, + [IMAGING_RAWMODE_F_32] = {"F;32"}, + [IMAGING_RAWMODE_F_32B] = {"F;32B"}, + [IMAGING_RAWMODE_F_32BF] = {"F;32BF"}, + [IMAGING_RAWMODE_F_32BS] = {"F;32BS"}, + [IMAGING_RAWMODE_F_32F] = {"F;32F"}, + [IMAGING_RAWMODE_F_32N] = {"F;32N"}, + [IMAGING_RAWMODE_F_32NF] = {"F;32NF"}, + [IMAGING_RAWMODE_F_32NS] = {"F;32NS"}, + [IMAGING_RAWMODE_F_32S] = {"F;32S"}, + [IMAGING_RAWMODE_F_64BF] = {"F;64BF"}, + [IMAGING_RAWMODE_F_64F] = {"F;64F"}, + [IMAGING_RAWMODE_F_64NF] = {"F;64NF"}, + [IMAGING_RAWMODE_F_8] = {"F;8"}, + [IMAGING_RAWMODE_F_8S] = {"F;8S"}, + [IMAGING_RAWMODE_G] = {"G"}, + [IMAGING_RAWMODE_G_16B] = {"G;16B"}, + [IMAGING_RAWMODE_G_16L] = {"G;16L"}, + [IMAGING_RAWMODE_G_16N] = {"G;16N"}, + [IMAGING_RAWMODE_H] = {"H"}, + [IMAGING_RAWMODE_I_12] = {"I;12"}, + [IMAGING_RAWMODE_I_16BS] = {"I;16BS"}, + [IMAGING_RAWMODE_I_16NS] = {"I;16NS"}, + [IMAGING_RAWMODE_I_16R] = {"I;16R"}, + [IMAGING_RAWMODE_I_16S] = {"I;16S"}, + [IMAGING_RAWMODE_I_32] = {"I;32"}, + [IMAGING_RAWMODE_I_32BS] = {"I;32BS"}, + [IMAGING_RAWMODE_I_32N] = {"I;32N"}, + [IMAGING_RAWMODE_I_32NS] = {"I;32NS"}, + [IMAGING_RAWMODE_I_32S] = {"I;32S"}, + [IMAGING_RAWMODE_I_8] = {"I;8"}, + [IMAGING_RAWMODE_I_8S] = {"I;8S"}, + [IMAGING_RAWMODE_K] = {"K"}, + [IMAGING_RAWMODE_K_I] = {"K;I"}, + [IMAGING_RAWMODE_LA_16B] = {"LA;16B"}, + [IMAGING_RAWMODE_LA_L] = {"LA;L"}, + [IMAGING_RAWMODE_L_16] = {"L;16"}, + [IMAGING_RAWMODE_L_16B] = {"L;16B"}, + [IMAGING_RAWMODE_L_2] = {"L;2"}, + [IMAGING_RAWMODE_L_2I] = {"L;2I"}, + [IMAGING_RAWMODE_L_2IR] = {"L;2IR"}, + [IMAGING_RAWMODE_L_2R] = {"L;2R"}, + [IMAGING_RAWMODE_L_4] = {"L;4"}, + [IMAGING_RAWMODE_L_4I] = {"L;4I"}, + [IMAGING_RAWMODE_L_4IR] = {"L;4IR"}, + [IMAGING_RAWMODE_L_4R] = {"L;4R"}, + [IMAGING_RAWMODE_L_I] = {"L;I"}, + [IMAGING_RAWMODE_L_R] = {"L;R"}, + [IMAGING_RAWMODE_M] = {"M"}, + [IMAGING_RAWMODE_M_I] = {"M;I"}, + [IMAGING_RAWMODE_PA_L] = {"PA;L"}, + [IMAGING_RAWMODE_PX] = {"PX"}, + [IMAGING_RAWMODE_P_1] = {"P;1"}, + [IMAGING_RAWMODE_P_2] = {"P;2"}, + [IMAGING_RAWMODE_P_2L] = {"P;2L"}, + [IMAGING_RAWMODE_P_4] = {"P;4"}, + [IMAGING_RAWMODE_P_4L] = {"P;4L"}, + [IMAGING_RAWMODE_P_R] = {"P;R"}, + [IMAGING_RAWMODE_R] = {"R"}, + [IMAGING_RAWMODE_RGBAX] = {"RGBAX"}, + [IMAGING_RAWMODE_RGBAXX] = {"RGBAXX"}, + [IMAGING_RAWMODE_RGBA_15] = {"RGBA;15"}, + [IMAGING_RAWMODE_RGBA_16B] = {"RGBA;16B"}, + [IMAGING_RAWMODE_RGBA_16L] = {"RGBA;16L"}, + [IMAGING_RAWMODE_RGBA_16N] = {"RGBA;16N"}, + [IMAGING_RAWMODE_RGBA_4B] = {"RGBA;4B"}, + [IMAGING_RAWMODE_RGBA_I] = {"RGBA;I"}, + [IMAGING_RAWMODE_RGBA_L] = {"RGBA;L"}, + [IMAGING_RAWMODE_RGBXX] = {"RGBXX"}, + [IMAGING_RAWMODE_RGBXXX] = {"RGBXXX"}, + [IMAGING_RAWMODE_RGBX_16B] = {"RGBX;16B"}, + [IMAGING_RAWMODE_RGBX_16L] = {"RGBX;16L"}, + [IMAGING_RAWMODE_RGBX_16N] = {"RGBX;16N"}, + [IMAGING_RAWMODE_RGBX_L] = {"RGBX;L"}, + [IMAGING_RAWMODE_RGB_15] = {"RGB;15"}, + [IMAGING_RAWMODE_RGB_16] = {"RGB;16"}, + [IMAGING_RAWMODE_RGB_16B] = {"RGB;16B"}, + [IMAGING_RAWMODE_RGB_16L] = {"RGB;16L"}, + [IMAGING_RAWMODE_RGB_16N] = {"RGB;16N"}, + [IMAGING_RAWMODE_RGB_4B] = {"RGB;4B"}, + [IMAGING_RAWMODE_RGB_L] = {"RGB;L"}, + [IMAGING_RAWMODE_RGB_R] = {"RGB;R"}, + [IMAGING_RAWMODE_RGBaX] = {"RGBaX"}, + [IMAGING_RAWMODE_RGBaXX] = {"RGBaXX"}, + [IMAGING_RAWMODE_RGBa_16B] = {"RGBa;16B"}, + [IMAGING_RAWMODE_RGBa_16L] = {"RGBa;16L"}, + [IMAGING_RAWMODE_RGBa_16N] = {"RGBa;16N"}, + [IMAGING_RAWMODE_R_16B] = {"R;16B"}, + [IMAGING_RAWMODE_R_16L] = {"R;16L"}, + [IMAGING_RAWMODE_R_16N] = {"R;16N"}, + [IMAGING_RAWMODE_S] = {"S"}, + [IMAGING_RAWMODE_V] = {"V"}, + [IMAGING_RAWMODE_X] = {"X"}, + [IMAGING_RAWMODE_XBGR] = {"XBGR"}, + [IMAGING_RAWMODE_XRGB] = {"XRGB"}, + [IMAGING_RAWMODE_Y] = {"Y"}, + [IMAGING_RAWMODE_YCCA_P] = {"YCCA;P"}, + [IMAGING_RAWMODE_YCC_P] = {"YCC;P"}, + [IMAGING_RAWMODE_YCbCrK] = {"YCbCrK"}, + [IMAGING_RAWMODE_YCbCrX] = {"YCbCrX"}, + [IMAGING_RAWMODE_YCbCr_L] = {"YCbCr;L"}, + [IMAGING_RAWMODE_Y_I] = {"Y;I"}, + [IMAGING_RAWMODE_aBGR] = {"aBGR"}, + [IMAGING_RAWMODE_aRGB] = {"aRGB"}, }; -const RawMode * findRawMode(const char * const name) { +const RawModeID findRawModeID(const char * const name) { if (name == NULL) { - return NULL; + return IMAGING_RAWMODE_UNKNOWN; } - const RawMode * rawmode; - for (int i = 0; (rawmode = RAWMODES[i]); i++) { - if (strcmp(rawmode->name, name) == 0) { - return rawmode; + for (size_t i = 0; i < sizeof(RAWMODES) / sizeof(*RAWMODES); i++) { + if (strcmp(RAWMODES[i].name, name) == 0) { + return (RawModeID)i; } } - return NULL; + return IMAGING_RAWMODE_UNKNOWN; } -int isModeI16(const Mode * const mode) { +const RawModeData * const getRawModeData(const RawModeID id) { + if (id < 0 || id > sizeof(RAWMODES) / sizeof(*RAWMODES)) { + return &RAWMODES[IMAGING_RAWMODE_UNKNOWN]; + } + return &RAWMODES[id]; +} + + +int isModeI16(const ModeID mode) { return mode == IMAGING_MODE_I_16 || mode == IMAGING_MODE_I_16L || mode == IMAGING_MODE_I_16B diff --git a/src/libImaging/Mode.h b/src/libImaging/Mode.h index 663f2f468..e21ad941a 100644 --- a/src/libImaging/Mode.h +++ b/src/libImaging/Mode.h @@ -2,227 +2,237 @@ #define __MODE_H__ -typedef struct { - const char * const name; -} Mode; +typedef enum { + IMAGING_MODE_UNKNOWN, -extern const Mode * const IMAGING_MODE_1; -extern const Mode * const IMAGING_MODE_CMYK; -extern const Mode * const IMAGING_MODE_F; -extern const Mode * const IMAGING_MODE_HSV; -extern const Mode * const IMAGING_MODE_I; -extern const Mode * const IMAGING_MODE_L; -extern const Mode * const IMAGING_MODE_LA; -extern const Mode * const IMAGING_MODE_LAB; -extern const Mode * const IMAGING_MODE_La; -extern const Mode * const IMAGING_MODE_P; -extern const Mode * const IMAGING_MODE_PA; -extern const Mode * const IMAGING_MODE_RGB; -extern const Mode * const IMAGING_MODE_RGBA; -extern const Mode * const IMAGING_MODE_RGBX; -extern const Mode * const IMAGING_MODE_RGBa; -extern const Mode * const IMAGING_MODE_YCbCr; + IMAGING_MODE_1, + IMAGING_MODE_CMYK, + IMAGING_MODE_F, + IMAGING_MODE_HSV, + IMAGING_MODE_I, + IMAGING_MODE_L, + IMAGING_MODE_LA, + IMAGING_MODE_LAB, + IMAGING_MODE_La, + IMAGING_MODE_P, + IMAGING_MODE_PA, + IMAGING_MODE_RGB, + IMAGING_MODE_RGBA, + IMAGING_MODE_RGBX, + IMAGING_MODE_RGBa, + IMAGING_MODE_YCbCr, -extern const Mode * const IMAGING_MODE_BGR_15; -extern const Mode * const IMAGING_MODE_BGR_16; -extern const Mode * const IMAGING_MODE_BGR_24; - -extern const Mode * const IMAGING_MODE_I_16; -extern const Mode * const IMAGING_MODE_I_16L; -extern const Mode * const IMAGING_MODE_I_16B; -extern const Mode * const IMAGING_MODE_I_16N; -extern const Mode * const IMAGING_MODE_I_32L; -extern const Mode * const IMAGING_MODE_I_32B; - -const Mode * findMode(const char * const name); + IMAGING_MODE_BGR_15, + IMAGING_MODE_BGR_16, + IMAGING_MODE_BGR_24, + IMAGING_MODE_I_16, + IMAGING_MODE_I_16L, + IMAGING_MODE_I_16B, + IMAGING_MODE_I_16N, + IMAGING_MODE_I_32L, + IMAGING_MODE_I_32B, +} ModeID; typedef struct { const char * const name; -} RawMode; +} ModeData; -// Non-rawmode aliases. -extern const RawMode * const IMAGING_RAWMODE_1; -extern const RawMode * const IMAGING_RAWMODE_CMYK; -extern const RawMode * const IMAGING_RAWMODE_F; -extern const RawMode * const IMAGING_RAWMODE_HSV; -extern const RawMode * const IMAGING_RAWMODE_I; -extern const RawMode * const IMAGING_RAWMODE_L; -extern const RawMode * const IMAGING_RAWMODE_LA; -extern const RawMode * const IMAGING_RAWMODE_LAB; -extern const RawMode * const IMAGING_RAWMODE_La; -extern const RawMode * const IMAGING_RAWMODE_P; -extern const RawMode * const IMAGING_RAWMODE_PA; -extern const RawMode * const IMAGING_RAWMODE_RGB; -extern const RawMode * const IMAGING_RAWMODE_RGBA; -extern const RawMode * const IMAGING_RAWMODE_RGBX; -extern const RawMode * const IMAGING_RAWMODE_RGBa; -extern const RawMode * const IMAGING_RAWMODE_YCbCr; - -// BGR modes. -extern const RawMode * const IMAGING_RAWMODE_BGR_15; -extern const RawMode * const IMAGING_RAWMODE_BGR_16; -extern const RawMode * const IMAGING_RAWMODE_BGR_24; -extern const RawMode * const IMAGING_RAWMODE_BGR_32; - -// I;* modes. -extern const RawMode * const IMAGING_RAWMODE_I_16; -extern const RawMode * const IMAGING_RAWMODE_I_16L; -extern const RawMode * const IMAGING_RAWMODE_I_16B; -extern const RawMode * const IMAGING_RAWMODE_I_16N; -extern const RawMode * const IMAGING_RAWMODE_I_32L; -extern const RawMode * const IMAGING_RAWMODE_I_32B; - -// Rawmodes -extern const RawMode * const IMAGING_RAWMODE_1_8; -extern const RawMode * const IMAGING_RAWMODE_1_I; -extern const RawMode * const IMAGING_RAWMODE_1_IR; -extern const RawMode * const IMAGING_RAWMODE_1_R; -extern const RawMode * const IMAGING_RAWMODE_A; -extern const RawMode * const IMAGING_RAWMODE_ABGR; -extern const RawMode * const IMAGING_RAWMODE_ARGB; -extern const RawMode * const IMAGING_RAWMODE_A_16B; -extern const RawMode * const IMAGING_RAWMODE_A_16L; -extern const RawMode * const IMAGING_RAWMODE_A_16N; -extern const RawMode * const IMAGING_RAWMODE_B; -extern const RawMode * const IMAGING_RAWMODE_BGAR; -extern const RawMode * const IMAGING_RAWMODE_BGR; -extern const RawMode * const IMAGING_RAWMODE_BGRA; -extern const RawMode * const IMAGING_RAWMODE_BGRA_15; -extern const RawMode * const IMAGING_RAWMODE_BGRA_15Z; -extern const RawMode * const IMAGING_RAWMODE_BGRA_16B; -extern const RawMode * const IMAGING_RAWMODE_BGRA_16L; -extern const RawMode * const IMAGING_RAWMODE_BGRX; -extern const RawMode * const IMAGING_RAWMODE_BGR_5; -extern const RawMode * const IMAGING_RAWMODE_BGRa; -extern const RawMode * const IMAGING_RAWMODE_BGXR; -extern const RawMode * const IMAGING_RAWMODE_B_16B; -extern const RawMode * const IMAGING_RAWMODE_B_16L; -extern const RawMode * const IMAGING_RAWMODE_B_16N; -extern const RawMode * const IMAGING_RAWMODE_C; -extern const RawMode * const IMAGING_RAWMODE_CMYKX; -extern const RawMode * const IMAGING_RAWMODE_CMYKXX; -extern const RawMode * const IMAGING_RAWMODE_CMYK_16B; -extern const RawMode * const IMAGING_RAWMODE_CMYK_16L; -extern const RawMode * const IMAGING_RAWMODE_CMYK_16N; -extern const RawMode * const IMAGING_RAWMODE_CMYK_I; -extern const RawMode * const IMAGING_RAWMODE_CMYK_L; -extern const RawMode * const IMAGING_RAWMODE_C_I; -extern const RawMode * const IMAGING_RAWMODE_Cb; -extern const RawMode * const IMAGING_RAWMODE_Cr; -extern const RawMode * const IMAGING_RAWMODE_F_16; -extern const RawMode * const IMAGING_RAWMODE_F_16B; -extern const RawMode * const IMAGING_RAWMODE_F_16BS; -extern const RawMode * const IMAGING_RAWMODE_F_16N; -extern const RawMode * const IMAGING_RAWMODE_F_16NS; -extern const RawMode * const IMAGING_RAWMODE_F_16S; -extern const RawMode * const IMAGING_RAWMODE_F_32; -extern const RawMode * const IMAGING_RAWMODE_F_32B; -extern const RawMode * const IMAGING_RAWMODE_F_32BF; -extern const RawMode * const IMAGING_RAWMODE_F_32BS; -extern const RawMode * const IMAGING_RAWMODE_F_32F; -extern const RawMode * const IMAGING_RAWMODE_F_32N; -extern const RawMode * const IMAGING_RAWMODE_F_32NF; -extern const RawMode * const IMAGING_RAWMODE_F_32NS; -extern const RawMode * const IMAGING_RAWMODE_F_32S; -extern const RawMode * const IMAGING_RAWMODE_F_64BF; -extern const RawMode * const IMAGING_RAWMODE_F_64F; -extern const RawMode * const IMAGING_RAWMODE_F_64NF; -extern const RawMode * const IMAGING_RAWMODE_F_8; -extern const RawMode * const IMAGING_RAWMODE_F_8S; -extern const RawMode * const IMAGING_RAWMODE_G; -extern const RawMode * const IMAGING_RAWMODE_G_16B; -extern const RawMode * const IMAGING_RAWMODE_G_16L; -extern const RawMode * const IMAGING_RAWMODE_G_16N; -extern const RawMode * const IMAGING_RAWMODE_H; -extern const RawMode * const IMAGING_RAWMODE_I_12; -extern const RawMode * const IMAGING_RAWMODE_I_16BS; -extern const RawMode * const IMAGING_RAWMODE_I_16NS; -extern const RawMode * const IMAGING_RAWMODE_I_16R; -extern const RawMode * const IMAGING_RAWMODE_I_16S; -extern const RawMode * const IMAGING_RAWMODE_I_32; -extern const RawMode * const IMAGING_RAWMODE_I_32BS; -extern const RawMode * const IMAGING_RAWMODE_I_32N; -extern const RawMode * const IMAGING_RAWMODE_I_32NS; -extern const RawMode * const IMAGING_RAWMODE_I_32S; -extern const RawMode * const IMAGING_RAWMODE_I_8; -extern const RawMode * const IMAGING_RAWMODE_I_8S; -extern const RawMode * const IMAGING_RAWMODE_K; -extern const RawMode * const IMAGING_RAWMODE_K_I; -extern const RawMode * const IMAGING_RAWMODE_LA_16B; -extern const RawMode * const IMAGING_RAWMODE_LA_L; -extern const RawMode * const IMAGING_RAWMODE_L_16; -extern const RawMode * const IMAGING_RAWMODE_L_16B; -extern const RawMode * const IMAGING_RAWMODE_L_2; -extern const RawMode * const IMAGING_RAWMODE_L_2I; -extern const RawMode * const IMAGING_RAWMODE_L_2IR; -extern const RawMode * const IMAGING_RAWMODE_L_2R; -extern const RawMode * const IMAGING_RAWMODE_L_4; -extern const RawMode * const IMAGING_RAWMODE_L_4I; -extern const RawMode * const IMAGING_RAWMODE_L_4IR; -extern const RawMode * const IMAGING_RAWMODE_L_4R; -extern const RawMode * const IMAGING_RAWMODE_L_I; -extern const RawMode * const IMAGING_RAWMODE_L_R; -extern const RawMode * const IMAGING_RAWMODE_M; -extern const RawMode * const IMAGING_RAWMODE_M_I; -extern const RawMode * const IMAGING_RAWMODE_PA_L; -extern const RawMode * const IMAGING_RAWMODE_PX; -extern const RawMode * const IMAGING_RAWMODE_P_1; -extern const RawMode * const IMAGING_RAWMODE_P_2; -extern const RawMode * const IMAGING_RAWMODE_P_2L; -extern const RawMode * const IMAGING_RAWMODE_P_4; -extern const RawMode * const IMAGING_RAWMODE_P_4L; -extern const RawMode * const IMAGING_RAWMODE_P_R; -extern const RawMode * const IMAGING_RAWMODE_R; -extern const RawMode * const IMAGING_RAWMODE_RGBAX; -extern const RawMode * const IMAGING_RAWMODE_RGBAXX; -extern const RawMode * const IMAGING_RAWMODE_RGBA_15; -extern const RawMode * const IMAGING_RAWMODE_RGBA_16B; -extern const RawMode * const IMAGING_RAWMODE_RGBA_16L; -extern const RawMode * const IMAGING_RAWMODE_RGBA_16N; -extern const RawMode * const IMAGING_RAWMODE_RGBA_4B; -extern const RawMode * const IMAGING_RAWMODE_RGBA_I; -extern const RawMode * const IMAGING_RAWMODE_RGBA_L; -extern const RawMode * const IMAGING_RAWMODE_RGBXX; -extern const RawMode * const IMAGING_RAWMODE_RGBXXX; -extern const RawMode * const IMAGING_RAWMODE_RGBX_16B; -extern const RawMode * const IMAGING_RAWMODE_RGBX_16L; -extern const RawMode * const IMAGING_RAWMODE_RGBX_16N; -extern const RawMode * const IMAGING_RAWMODE_RGBX_L; -extern const RawMode * const IMAGING_RAWMODE_RGB_15; -extern const RawMode * const IMAGING_RAWMODE_RGB_16; -extern const RawMode * const IMAGING_RAWMODE_RGB_16B; -extern const RawMode * const IMAGING_RAWMODE_RGB_16L; -extern const RawMode * const IMAGING_RAWMODE_RGB_16N; -extern const RawMode * const IMAGING_RAWMODE_RGB_4B; -extern const RawMode * const IMAGING_RAWMODE_RGB_L; -extern const RawMode * const IMAGING_RAWMODE_RGB_R; -extern const RawMode * const IMAGING_RAWMODE_RGBaX; -extern const RawMode * const IMAGING_RAWMODE_RGBaXX; -extern const RawMode * const IMAGING_RAWMODE_RGBa_16B; -extern const RawMode * const IMAGING_RAWMODE_RGBa_16L; -extern const RawMode * const IMAGING_RAWMODE_RGBa_16N; -extern const RawMode * const IMAGING_RAWMODE_R_16B; -extern const RawMode * const IMAGING_RAWMODE_R_16L; -extern const RawMode * const IMAGING_RAWMODE_R_16N; -extern const RawMode * const IMAGING_RAWMODE_S; -extern const RawMode * const IMAGING_RAWMODE_V; -extern const RawMode * const IMAGING_RAWMODE_X; -extern const RawMode * const IMAGING_RAWMODE_XBGR; -extern const RawMode * const IMAGING_RAWMODE_XRGB; -extern const RawMode * const IMAGING_RAWMODE_Y; -extern const RawMode * const IMAGING_RAWMODE_YCCA_P; -extern const RawMode * const IMAGING_RAWMODE_YCC_P; -extern const RawMode * const IMAGING_RAWMODE_YCbCrK; -extern const RawMode * const IMAGING_RAWMODE_YCbCrX; -extern const RawMode * const IMAGING_RAWMODE_YCbCr_L; -extern const RawMode * const IMAGING_RAWMODE_Y_I; -extern const RawMode * const IMAGING_RAWMODE_aBGR; -extern const RawMode * const IMAGING_RAWMODE_aRGB; - -const RawMode * findRawMode(const char * const name); +const ModeID findModeID(const char * const name); +const ModeData * const getModeData(const ModeID id); -int isModeI16(const Mode * const mode); +typedef enum { + IMAGING_RAWMODE_UNKNOWN, + + // Non-rawmode aliases. + IMAGING_RAWMODE_1, + IMAGING_RAWMODE_CMYK, + IMAGING_RAWMODE_F, + IMAGING_RAWMODE_HSV, + IMAGING_RAWMODE_I, + IMAGING_RAWMODE_L, + IMAGING_RAWMODE_LA, + IMAGING_RAWMODE_LAB, + IMAGING_RAWMODE_La, + IMAGING_RAWMODE_P, + IMAGING_RAWMODE_PA, + IMAGING_RAWMODE_RGB, + IMAGING_RAWMODE_RGBA, + IMAGING_RAWMODE_RGBX, + IMAGING_RAWMODE_RGBa, + IMAGING_RAWMODE_YCbCr, + + // BGR modes. + IMAGING_RAWMODE_BGR_15, + IMAGING_RAWMODE_BGR_16, + IMAGING_RAWMODE_BGR_24, + IMAGING_RAWMODE_BGR_32, + + // I;* modes. + IMAGING_RAWMODE_I_16, + IMAGING_RAWMODE_I_16L, + IMAGING_RAWMODE_I_16B, + IMAGING_RAWMODE_I_16N, + IMAGING_RAWMODE_I_32L, + IMAGING_RAWMODE_I_32B, + + // Rawmodes + IMAGING_RAWMODE_1_8, + IMAGING_RAWMODE_1_I, + IMAGING_RAWMODE_1_IR, + IMAGING_RAWMODE_1_R, + IMAGING_RAWMODE_A, + IMAGING_RAWMODE_ABGR, + IMAGING_RAWMODE_ARGB, + IMAGING_RAWMODE_A_16B, + IMAGING_RAWMODE_A_16L, + IMAGING_RAWMODE_A_16N, + IMAGING_RAWMODE_B, + IMAGING_RAWMODE_BGAR, + IMAGING_RAWMODE_BGR, + IMAGING_RAWMODE_BGRA, + IMAGING_RAWMODE_BGRA_15, + IMAGING_RAWMODE_BGRA_15Z, + IMAGING_RAWMODE_BGRA_16B, + IMAGING_RAWMODE_BGRA_16L, + IMAGING_RAWMODE_BGRX, + IMAGING_RAWMODE_BGR_5, + IMAGING_RAWMODE_BGRa, + IMAGING_RAWMODE_BGXR, + IMAGING_RAWMODE_B_16B, + IMAGING_RAWMODE_B_16L, + IMAGING_RAWMODE_B_16N, + IMAGING_RAWMODE_C, + IMAGING_RAWMODE_CMYKX, + IMAGING_RAWMODE_CMYKXX, + IMAGING_RAWMODE_CMYK_16B, + IMAGING_RAWMODE_CMYK_16L, + IMAGING_RAWMODE_CMYK_16N, + IMAGING_RAWMODE_CMYK_I, + IMAGING_RAWMODE_CMYK_L, + IMAGING_RAWMODE_C_I, + IMAGING_RAWMODE_Cb, + IMAGING_RAWMODE_Cr, + IMAGING_RAWMODE_F_16, + IMAGING_RAWMODE_F_16B, + IMAGING_RAWMODE_F_16BS, + IMAGING_RAWMODE_F_16N, + IMAGING_RAWMODE_F_16NS, + IMAGING_RAWMODE_F_16S, + IMAGING_RAWMODE_F_32, + IMAGING_RAWMODE_F_32B, + IMAGING_RAWMODE_F_32BF, + IMAGING_RAWMODE_F_32BS, + IMAGING_RAWMODE_F_32F, + IMAGING_RAWMODE_F_32N, + IMAGING_RAWMODE_F_32NF, + IMAGING_RAWMODE_F_32NS, + IMAGING_RAWMODE_F_32S, + IMAGING_RAWMODE_F_64BF, + IMAGING_RAWMODE_F_64F, + IMAGING_RAWMODE_F_64NF, + IMAGING_RAWMODE_F_8, + IMAGING_RAWMODE_F_8S, + IMAGING_RAWMODE_G, + IMAGING_RAWMODE_G_16B, + IMAGING_RAWMODE_G_16L, + IMAGING_RAWMODE_G_16N, + IMAGING_RAWMODE_H, + IMAGING_RAWMODE_I_12, + IMAGING_RAWMODE_I_16BS, + IMAGING_RAWMODE_I_16NS, + IMAGING_RAWMODE_I_16R, + IMAGING_RAWMODE_I_16S, + IMAGING_RAWMODE_I_32, + IMAGING_RAWMODE_I_32BS, + IMAGING_RAWMODE_I_32N, + IMAGING_RAWMODE_I_32NS, + IMAGING_RAWMODE_I_32S, + IMAGING_RAWMODE_I_8, + IMAGING_RAWMODE_I_8S, + IMAGING_RAWMODE_K, + IMAGING_RAWMODE_K_I, + IMAGING_RAWMODE_LA_16B, + IMAGING_RAWMODE_LA_L, + IMAGING_RAWMODE_L_16, + IMAGING_RAWMODE_L_16B, + IMAGING_RAWMODE_L_2, + IMAGING_RAWMODE_L_2I, + IMAGING_RAWMODE_L_2IR, + IMAGING_RAWMODE_L_2R, + IMAGING_RAWMODE_L_4, + IMAGING_RAWMODE_L_4I, + IMAGING_RAWMODE_L_4IR, + IMAGING_RAWMODE_L_4R, + IMAGING_RAWMODE_L_I, + IMAGING_RAWMODE_L_R, + IMAGING_RAWMODE_M, + IMAGING_RAWMODE_M_I, + IMAGING_RAWMODE_PA_L, + IMAGING_RAWMODE_PX, + IMAGING_RAWMODE_P_1, + IMAGING_RAWMODE_P_2, + IMAGING_RAWMODE_P_2L, + IMAGING_RAWMODE_P_4, + IMAGING_RAWMODE_P_4L, + IMAGING_RAWMODE_P_R, + IMAGING_RAWMODE_R, + IMAGING_RAWMODE_RGBAX, + IMAGING_RAWMODE_RGBAXX, + IMAGING_RAWMODE_RGBA_15, + IMAGING_RAWMODE_RGBA_16B, + IMAGING_RAWMODE_RGBA_16L, + IMAGING_RAWMODE_RGBA_16N, + IMAGING_RAWMODE_RGBA_4B, + IMAGING_RAWMODE_RGBA_I, + IMAGING_RAWMODE_RGBA_L, + IMAGING_RAWMODE_RGBXX, + IMAGING_RAWMODE_RGBXXX, + IMAGING_RAWMODE_RGBX_16B, + IMAGING_RAWMODE_RGBX_16L, + IMAGING_RAWMODE_RGBX_16N, + IMAGING_RAWMODE_RGBX_L, + IMAGING_RAWMODE_RGB_15, + IMAGING_RAWMODE_RGB_16, + IMAGING_RAWMODE_RGB_16B, + IMAGING_RAWMODE_RGB_16L, + IMAGING_RAWMODE_RGB_16N, + IMAGING_RAWMODE_RGB_4B, + IMAGING_RAWMODE_RGB_L, + IMAGING_RAWMODE_RGB_R, + IMAGING_RAWMODE_RGBaX, + IMAGING_RAWMODE_RGBaXX, + IMAGING_RAWMODE_RGBa_16B, + IMAGING_RAWMODE_RGBa_16L, + IMAGING_RAWMODE_RGBa_16N, + IMAGING_RAWMODE_R_16B, + IMAGING_RAWMODE_R_16L, + IMAGING_RAWMODE_R_16N, + IMAGING_RAWMODE_S, + IMAGING_RAWMODE_V, + IMAGING_RAWMODE_X, + IMAGING_RAWMODE_XBGR, + IMAGING_RAWMODE_XRGB, + IMAGING_RAWMODE_Y, + IMAGING_RAWMODE_YCCA_P, + IMAGING_RAWMODE_YCC_P, + IMAGING_RAWMODE_YCbCrK, + IMAGING_RAWMODE_YCbCrX, + IMAGING_RAWMODE_YCbCr_L, + IMAGING_RAWMODE_Y_I, + IMAGING_RAWMODE_aBGR, + IMAGING_RAWMODE_aRGB, +} RawModeID; + +typedef struct { + const char * const name; +} RawModeData; + +const RawModeID findRawModeID(const char * const name); +const RawModeData * const getRawModeData(const RawModeID id); + + +int isModeI16(const ModeID mode); #endif // __MODE_H__ diff --git a/src/libImaging/Pack.c b/src/libImaging/Pack.c index aaa074c92..63bbc8acb 100644 --- a/src/libImaging/Pack.c +++ b/src/libImaging/Pack.c @@ -518,147 +518,146 @@ band3(UINT8 *out, const UINT8 *in, int pixels) { } } -static struct Packer { - const Mode *mode; - const RawMode *rawmode; +static struct { + const ModeID mode; + const RawModeID rawmode; int bits; ImagingShuffler pack; } packers[] = { /* bilevel */ - {"1", "1", 1, pack1}, - {"1", "1;I", 1, pack1I}, - {"1", "1;R", 1, pack1R}, - {"1", "1;IR", 1, pack1IR}, - {"1", "L", 8, pack1L}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1, 1, pack1}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1_I, 1, pack1I}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1_R, 1, pack1R}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1_IR, 1, pack1IR}, + {IMAGING_MODE_1, IMAGING_RAWMODE_L, 8, pack1L}, /* grayscale */ - {"L", "L", 8, copy1}, - {"L", "L;16", 16, packL16}, - {"L", "L;16B", 16, packL16B}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L, 8, copy1}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_16, 16, packL16}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_16B, 16, packL16B}, /* grayscale w. alpha */ - {"LA", "LA", 16, packLA}, - {"LA", "LA;L", 16, packLAL}, + {IMAGING_MODE_LA, IMAGING_RAWMODE_LA, 16, packLA}, + {IMAGING_MODE_LA, IMAGING_RAWMODE_LA_L, 16, packLAL}, /* grayscale w. alpha premultiplied */ - {"La", "La", 16, packLA}, + {IMAGING_MODE_La, IMAGING_RAWMODE_La, 16, packLA}, /* palette */ - {"P", "P;1", 1, pack1}, - {"P", "P;2", 2, packP2}, - {"P", "P;4", 4, packP4}, - {"P", "P", 8, copy1}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_1, 1, pack1}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_2, 2, packP2}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_4, 4, packP4}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P, 8, copy1}, /* palette w. alpha */ - {"PA", "PA", 16, packLA}, - {"PA", "PA;L", 16, packLAL}, + {IMAGING_MODE_PA, IMAGING_RAWMODE_PA, 16, packLA}, + {IMAGING_MODE_PA, IMAGING_RAWMODE_PA_L, 16, packLAL}, /* true colour */ - {"RGB", "RGB", 24, ImagingPackRGB}, - {"RGB", "RGBX", 32, copy4}, - {"RGB", "RGBA", 32, copy4}, - {"RGB", "XRGB", 32, ImagingPackXRGB}, - {"RGB", "BGR", 24, ImagingPackBGR}, - {"RGB", "BGRX", 32, ImagingPackBGRX}, - {"RGB", "XBGR", 32, ImagingPackXBGR}, - {"RGB", "RGB;L", 24, packRGBL}, - {"RGB", "R", 8, band0}, - {"RGB", "G", 8, band1}, - {"RGB", "B", 8, band2}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX, 32, copy4}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBA, 32, copy4}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_XRGB, 32, ImagingPackXRGB}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGRX, 32, ImagingPackBGRX}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_XBGR, 32, ImagingPackXBGR}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_L, 24, packRGBL}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_R, 8, band0}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_G, 8, band1}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_B, 8, band2}, /* true colour w. alpha */ - {"RGBA", "RGBA", 32, copy4}, - {"RGBA", "RGBA;L", 32, packRGBXL}, - {"RGBA", "RGB", 24, ImagingPackRGB}, - {"RGBA", "BGR", 24, ImagingPackBGR}, - {"RGBA", "BGRA", 32, ImagingPackBGRA}, - {"RGBA", "ABGR", 32, ImagingPackABGR}, - {"RGBA", "BGRa", 32, ImagingPackBGRa}, - {"RGBA", "R", 8, band0}, - {"RGBA", "G", 8, band1}, - {"RGBA", "B", 8, band2}, - {"RGBA", "A", 8, band3}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA, 32, copy4}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_L, 32, packRGBXL}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA, 32, ImagingPackBGRA}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_ABGR, 32, ImagingPackABGR}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRa, 32, ImagingPackBGRa}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R, 8, band0}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G, 8, band1}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B, 8, band2}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A, 8, band3}, /* true colour w. alpha premultiplied */ - {"RGBa", "RGBa", 32, copy4}, - {"RGBa", "BGRa", 32, ImagingPackBGRA}, - {"RGBa", "aBGR", 32, ImagingPackABGR}, + {IMAGING_MODE_RGBa, IMAGING_RAWMODE_RGBa, 32, copy4}, + {IMAGING_MODE_RGBa, IMAGING_RAWMODE_BGRa, 32, ImagingPackBGRA}, + {IMAGING_MODE_RGBa, IMAGING_RAWMODE_aBGR, 32, ImagingPackABGR}, /* true colour w. padding */ - {"RGBX", "RGBX", 32, copy4}, - {"RGBX", "RGBX;L", 32, packRGBXL}, - {"RGBX", "RGB", 24, ImagingPackRGB}, - {"RGBX", "BGR", 24, ImagingPackBGR}, - {"RGBX", "BGRX", 32, ImagingPackBGRX}, - {"RGBX", "XBGR", 32, ImagingPackXBGR}, - {"RGBX", "R", 8, band0}, - {"RGBX", "G", 8, band1}, - {"RGBX", "B", 8, band2}, - {"RGBX", "X", 8, band3}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX, 32, copy4}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_L, 32, packRGBXL}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGRX, 32, ImagingPackBGRX}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_XBGR, 32, ImagingPackXBGR}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_R, 8, band0}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_G, 8, band1}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_B, 8, band2}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_X, 8, band3}, /* colour separation */ - {"CMYK", "CMYK", 32, copy4}, - {"CMYK", "CMYK;I", 32, copy4I}, - {"CMYK", "CMYK;L", 32, packRGBXL}, - {"CMYK", "C", 8, band0}, - {"CMYK", "M", 8, band1}, - {"CMYK", "Y", 8, band2}, - {"CMYK", "K", 8, band3}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK, 32, copy4}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_I, 32, copy4I}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_L, 32, packRGBXL}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_C, 8, band0}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_M, 8, band1}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_Y, 8, band2}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_K, 8, band3}, /* video (YCbCr) */ - {"YCbCr", "YCbCr", 24, ImagingPackRGB}, - {"YCbCr", "YCbCr;L", 24, packRGBL}, - {"YCbCr", "YCbCrX", 32, copy4}, - {"YCbCr", "YCbCrK", 32, copy4}, - {"YCbCr", "Y", 8, band0}, - {"YCbCr", "Cb", 8, band1}, - {"YCbCr", "Cr", 8, band2}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr, 24, ImagingPackRGB}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr_L, 24, packRGBL}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrX, 32, copy4}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrK, 32, copy4}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Y, 8, band0}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Cb, 8, band1}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Cr, 8, band2}, /* LAB Color */ - {"LAB", "LAB", 24, ImagingPackLAB}, - {"LAB", "L", 8, band0}, - {"LAB", "A", 8, band1}, - {"LAB", "B", 8, band2}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_LAB, 24, ImagingPackLAB}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_L, 8, band0}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_A, 8, band1}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_B, 8, band2}, /* HSV */ - {"HSV", "HSV", 24, ImagingPackRGB}, - {"HSV", "H", 8, band0}, - {"HSV", "S", 8, band1}, - {"HSV", "V", 8, band2}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_HSV, 24, ImagingPackRGB}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_H, 8, band0}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_S, 8, band1}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_V, 8, band2}, /* integer */ - {"I", "I", 32, copy4}, - {"I", "I;16B", 16, packI16B}, - {"I", "I;32S", 32, packI32S}, - {"I", "I;32NS", 32, copy4}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I, 32, copy4}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_16B, 16, packI16B}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32S, 32, packI32S}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32NS, 32, copy4}, /* floating point */ - {"F", "F", 32, copy4}, - {"F", "F;32F", 32, packI32S}, - {"F", "F;32NF", 32, copy4}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F, 32, copy4}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32F, 32, packI32S}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32NF, 32, copy4}, /* storage modes */ - {"I;16", "I;16", 16, copy2}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16, 16, copy2}, #ifdef WORDS_BIGENDIAN - {"I;16", "I;16B", 16, packI16N_I16}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, packI16N_I16}, #else - {"I;16", "I;16B", 16, packI16N_I16B}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, packI16N_I16B}, #endif - {"I;16B", "I;16B", 16, copy2}, - {"I;16L", "I;16L", 16, copy2}, - {"I;16N", "I;16N", 16, copy2}, - {"I;16", "I;16N", 16, packI16N_I16}, // LibTiff native->image endian. - {"I;16L", "I;16N", 16, packI16N_I16}, - {"I;16B", "I;16N", 16, packI16N_I16B}, + {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16B, 16, copy2}, + {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16L, 16, copy2}, + {IMAGING_MODE_I_16N, IMAGING_RAWMODE_I_16N, 16, copy2}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16N, 16, packI16N_I16}, // LibTiff native->image endian. + {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16N, 16, packI16N_I16}, + {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16N, 16, packI16N_I16B}, {NULL} /* sentinel */ }; ImagingShuffler -ImagingFindPacker(const Mode *mode, const RawMode *rawmode, int *bits_out) { - int i; - for (i = 0; packers[i].mode; i++) { +ImagingFindPacker(const ModeID mode, const RawModeID rawmode, int *bits_out) { + for (size_t i = 0; i < sizeof(packers) / sizeof(*packers); i++) { if (packers[i].mode == mode && packers[i].rawmode == rawmode) { if (bits_out) { *bits_out = packers[i].bits; @@ -668,152 +667,3 @@ ImagingFindPacker(const Mode *mode, const RawMode *rawmode, int *bits_out) { } return NULL; } - -void -ImagingPackInit(void) { - const struct Packer temp[] = { - /* bilevel */ - {IMAGING_MODE_1, IMAGING_RAWMODE_1, 1, pack1}, - {IMAGING_MODE_1, IMAGING_RAWMODE_1_I, 1, pack1I}, - {IMAGING_MODE_1, IMAGING_RAWMODE_1_R, 1, pack1R}, - {IMAGING_MODE_1, IMAGING_RAWMODE_1_IR, 1, pack1IR}, - {IMAGING_MODE_1, IMAGING_RAWMODE_L, 8, pack1L}, - - /* grayscale */ - {IMAGING_MODE_L, IMAGING_RAWMODE_L, 8, copy1}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_16, 16, packL16}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_16B, 16, packL16B}, - - /* grayscale w. alpha */ - {IMAGING_MODE_LA, IMAGING_RAWMODE_LA, 16, packLA}, - {IMAGING_MODE_LA, IMAGING_RAWMODE_LA_L, 16, packLAL}, - - /* grayscale w. alpha premultiplied */ - {IMAGING_MODE_La, IMAGING_RAWMODE_La, 16, packLA}, - - /* palette */ - {IMAGING_MODE_P, IMAGING_RAWMODE_P_1, 1, pack1}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P_2, 2, packP2}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P_4, 4, packP4}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P, 8, copy1}, - - /* palette w. alpha */ - {IMAGING_MODE_PA, IMAGING_RAWMODE_PA, 16, packLA}, - {IMAGING_MODE_PA, IMAGING_RAWMODE_PA_L, 16, packLAL}, - - /* true colour */ - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX, 32, copy4}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBA, 32, copy4}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_XRGB, 32, ImagingPackXRGB}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGRX, 32, ImagingPackBGRX}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_XBGR, 32, ImagingPackXBGR}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_L, 24, packRGBL}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_R, 8, band0}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_G, 8, band1}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_B, 8, band2}, - - /* true colour w. alpha */ - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA, 32, copy4}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_L, 32, packRGBXL}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA, 32, ImagingPackBGRA}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_ABGR, 32, ImagingPackABGR}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRa, 32, ImagingPackBGRa}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R, 8, band0}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G, 8, band1}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B, 8, band2}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A, 8, band3}, - - /* true colour w. alpha premultiplied */ - {IMAGING_MODE_RGBa, IMAGING_RAWMODE_RGBa, 32, copy4}, - {IMAGING_MODE_RGBa, IMAGING_RAWMODE_BGRa, 32, ImagingPackBGRA}, - {IMAGING_MODE_RGBa, IMAGING_RAWMODE_aBGR, 32, ImagingPackABGR}, - - /* true colour w. padding */ - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX, 32, copy4}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_L, 32, packRGBXL}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB, 24, ImagingPackRGB}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR, 24, ImagingPackBGR}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGRX, 32, ImagingPackBGRX}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_XBGR, 32, ImagingPackXBGR}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_R, 8, band0}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_G, 8, band1}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_B, 8, band2}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_X, 8, band3}, - - /* colour separation */ - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK, 32, copy4}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_I, 32, copy4I}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_L, 32, packRGBXL}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_C, 8, band0}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_M, 8, band1}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_Y, 8, band2}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_K, 8, band3}, - - /* video (YCbCr) */ - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr, 24, ImagingPackRGB}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr_L, 24, packRGBL}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrX, 32, copy4}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrK, 32, copy4}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Y, 8, band0}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Cb, 8, band1}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_Cr, 8, band2}, - - /* LAB Color */ - {IMAGING_MODE_LAB, IMAGING_RAWMODE_LAB, 24, ImagingPackLAB}, - {IMAGING_MODE_LAB, IMAGING_RAWMODE_L, 8, band0}, - {IMAGING_MODE_LAB, IMAGING_RAWMODE_A, 8, band1}, - {IMAGING_MODE_LAB, IMAGING_RAWMODE_B, 8, band2}, - - /* HSV */ - {IMAGING_MODE_HSV, IMAGING_RAWMODE_HSV, 24, ImagingPackRGB}, - {IMAGING_MODE_HSV, IMAGING_RAWMODE_H, 8, band0}, - {IMAGING_MODE_HSV, IMAGING_RAWMODE_S, 8, band1}, - {IMAGING_MODE_HSV, IMAGING_RAWMODE_V, 8, band2}, - - /* integer */ - {IMAGING_MODE_I, IMAGING_RAWMODE_I, 32, copy4}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_16B, 16, packI16B}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32S, 32, packI32S}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32NS, 32, copy4}, - - /* floating point */ - {IMAGING_MODE_F, IMAGING_RAWMODE_F, 32, copy4}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32F, 32, packI32S}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32NF, 32, copy4}, - - /* storage modes */ - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16, 16, copy2}, -#ifdef WORDS_BIGENDIAN - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, packI16N_I16}, -#else - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, packI16N_I16B}, -#endif - {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16B, 16, copy2}, - {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16L, 16, copy2}, - {IMAGING_MODE_I_16N, IMAGING_RAWMODE_I_16N, 16, copy2}, - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16N, 16, packI16N_I16}, // LibTiff native->image endian. - {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16N, 16, packI16N_I16}, - {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16N, 16, packI16N_I16B}, - {IMAGING_MODE_BGR_15, IMAGING_RAWMODE_BGR_15, 16, copy2}, - {IMAGING_MODE_BGR_16, IMAGING_RAWMODE_BGR_16, 16, copy2}, - {IMAGING_MODE_BGR_24, IMAGING_RAWMODE_BGR_24, 24, copy3}, - - {NULL} /* sentinel */ - }; - packers = malloc(sizeof(temp)); - if (packers == NULL) { - fprintf(stderr, "PackInit: failed to allocate memory for packers table\n"); - exit(1); - } - memcpy(packers, temp, sizeof(temp)); -} - -void -ImagingPackFree(void) { - free(packers); - packers = NULL; -} diff --git a/src/libImaging/Palette.c b/src/libImaging/Palette.c index 6b4fea6a5..2bbdb69ef 100644 --- a/src/libImaging/Palette.c +++ b/src/libImaging/Palette.c @@ -21,7 +21,7 @@ #include ImagingPalette -ImagingPaletteNew(const Mode *mode) { +ImagingPaletteNew(const ModeID mode) { /* Create a palette object */ int i; diff --git a/src/libImaging/Point.c b/src/libImaging/Point.c index e33f38508..fa0b1027c 100644 --- a/src/libImaging/Point.c +++ b/src/libImaging/Point.c @@ -128,7 +128,7 @@ im_point_32_8(Imaging imOut, Imaging imIn, im_point_context *context) { } Imaging -ImagingPoint(Imaging imIn, const Mode *mode, const void *table) { +ImagingPoint(Imaging imIn, ModeID mode, const void *table) { /* lookup table transform */ ImagingSectionCookie cookie; @@ -140,7 +140,7 @@ ImagingPoint(Imaging imIn, const Mode *mode, const void *table) { return (Imaging)ImagingError_ModeError(); } - if (!mode) { + if (mode == IMAGING_MODE_UNKNOWN) { mode = imIn->mode; } diff --git a/src/libImaging/Storage.c b/src/libImaging/Storage.c index 38142b7c5..c09062c92 100644 --- a/src/libImaging/Storage.c +++ b/src/libImaging/Storage.c @@ -42,7 +42,7 @@ */ Imaging -ImagingNewPrologueSubtype(const Mode *mode, int xsize, int ysize, int size) { +ImagingNewPrologueSubtype(const ModeID mode, int xsize, int ysize, int size) { Imaging im; /* linesize overflow check, roughly the current largest space req'd */ @@ -256,7 +256,7 @@ ImagingNewPrologueSubtype(const Mode *mode, int xsize, int ysize, int size) { } Imaging -ImagingNewPrologue(const Mode *mode, int xsize, int ysize) { +ImagingNewPrologue(const ModeID mode, int xsize, int ysize) { return ImagingNewPrologueSubtype( mode, xsize, ysize, sizeof(struct ImagingMemoryInstance) ); @@ -593,7 +593,7 @@ ImagingBorrowArrow( */ Imaging -ImagingNewInternal(const Mode *mode, int xsize, int ysize, int dirty) { +ImagingNewInternal(const ModeID mode, int xsize, int ysize, int dirty) { Imaging im; if (xsize < 0 || ysize < 0) { @@ -629,7 +629,7 @@ ImagingNewInternal(const Mode *mode, int xsize, int ysize, int dirty) { } Imaging -ImagingNew(const Mode *mode, int xsize, int ysize) { +ImagingNew(const ModeID mode, int xsize, int ysize) { if (ImagingDefaultArena.use_block_allocator) { return ImagingNewBlock(mode, xsize, ysize); } @@ -637,7 +637,7 @@ ImagingNew(const Mode *mode, int xsize, int ysize) { } Imaging -ImagingNewDirty(const Mode *mode, int xsize, int ysize) { +ImagingNewDirty(const ModeID mode, int xsize, int ysize) { if (ImagingDefaultArena.use_block_allocator) { return ImagingNewBlock(mode, xsize, ysize); } @@ -645,7 +645,7 @@ ImagingNewDirty(const Mode *mode, int xsize, int ysize) { } Imaging -ImagingNewBlock(const Mode *mode, int xsize, int ysize) { +ImagingNewBlock(const ModeID mode, int xsize, int ysize) { Imaging im; if (xsize < 0 || ysize < 0) { @@ -667,7 +667,7 @@ ImagingNewBlock(const Mode *mode, int xsize, int ysize) { Imaging ImagingNewArrow( - const Mode *mode, + const ModeID mode, int xsize, int ysize, PyObject *schema_capsule, @@ -740,7 +740,7 @@ ImagingNewArrow( } Imaging -ImagingNew2Dirty(const Mode *mode, Imaging imOut, Imaging imIn) { +ImagingNew2Dirty(const ModeID mode, Imaging imOut, Imaging imIn) { /* allocate or validate output image */ if (imOut) { diff --git a/src/libImaging/TiffDecode.c b/src/libImaging/TiffDecode.c index 40e8fba50..f987c608f 100644 --- a/src/libImaging/TiffDecode.c +++ b/src/libImaging/TiffDecode.c @@ -640,7 +640,7 @@ ImagingLibTiffDecode( ); TRACE( ("Image: mode %s, type %d, bands: %d, xsize %d, ysize %d \n", - im->mode->name, + getModeData(im->mode)->name, im->type, im->bands, im->xsize, @@ -987,7 +987,7 @@ ImagingLibTiffEncode(Imaging im, ImagingCodecState state, UINT8 *buffer, int byt ); TRACE( ("Image: mode %s, type %d, bands: %d, xsize %d, ysize %d \n", - im->mode->name, + getModeData(im->mode)->name, im->type, im->bands, im->xsize, diff --git a/src/libImaging/Unpack.c b/src/libImaging/Unpack.c index 787602151..8d4bb8619 100644 --- a/src/libImaging/Unpack.c +++ b/src/libImaging/Unpack.c @@ -1313,7 +1313,7 @@ copy4skip2(UINT8 *_out, const UINT8 *in, int pixels) { /* Unpack to "I" and "F" images */ #define UNPACK_RAW(NAME, GET, INTYPE, OUTTYPE) \ - static void NAME(UINT8 *out_, const UINT8 *in, int pixels) { \ + static void NAME(UINT8 *out, const UINT8 *in, int pixels) { \ int i; \ OUTTYPE *out = (OUTTYPE *)out_; \ for (i = 0; i < pixels; i++, in += sizeof(INTYPE)) { \ @@ -1322,7 +1322,7 @@ copy4skip2(UINT8 *_out, const UINT8 *in, int pixels) { } #define UNPACK(NAME, COPY, INTYPE, OUTTYPE) \ - static void NAME(UINT8 *out_, const UINT8 *in, int pixels) { \ + static void NAME(UINT8 *out, const UINT8 *in, int pixels) { \ int i; \ OUTTYPE *out = (OUTTYPE *)out_; \ INTYPE tmp_; \ @@ -1541,13 +1541,12 @@ band316L(UINT8 *out, const UINT8 *in, int pixels) { } } -static struct Unpacker { - const Mode *mode; - const RawMode *rawmode; +static struct { + const ModeID mode; + const RawModeID rawmode; int bits; ImagingShuffler unpack; } unpackers[] = { - /* raw mode syntax is ";" where "bits" defaults depending on mode (1 for "1", 8 for "P" and "L", etc), and "flags" should be given in alphabetical order. if both bits @@ -1560,297 +1559,294 @@ static struct Unpacker { /* exception: rawmodes "I" and "F" are always native endian byte order */ /* bilevel */ - {"1", "1", 1, unpack1}, - {"1", "1;I", 1, unpack1I}, - {"1", "1;R", 1, unpack1R}, - {"1", "1;IR", 1, unpack1IR}, - {"1", "1;8", 8, unpack18}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1, 1, unpack1}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1_I, 1, unpack1I}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1_R, 1, unpack1R}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1_IR, 1, unpack1IR}, + {IMAGING_MODE_1, IMAGING_RAWMODE_1_8, 8, unpack18}, /* grayscale */ - {"L", "L;2", 2, unpackL2}, - {"L", "L;2I", 2, unpackL2I}, - {"L", "L;2R", 2, unpackL2R}, - {"L", "L;2IR", 2, unpackL2IR}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_2, 2, unpackL2}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_2I, 2, unpackL2I}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_2R, 2, unpackL2R}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_2IR, 2, unpackL2IR}, - {"L", "L;4", 4, unpackL4}, - {"L", "L;4I", 4, unpackL4I}, - {"L", "L;4R", 4, unpackL4R}, - {"L", "L;4IR", 4, unpackL4IR}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_4, 4, unpackL4}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_4I, 4, unpackL4I}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_4R, 4, unpackL4R}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_4IR, 4, unpackL4IR}, - {"L", "L", 8, copy1}, - {"L", "L;I", 8, unpackLI}, - {"L", "L;R", 8, unpackLR}, - {"L", "L;16", 16, unpackL16}, - {"L", "L;16B", 16, unpackL16B}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L, 8, copy1}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_I, 8, unpackLI}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_R, 8, unpackLR}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_16, 16, unpackL16}, + {IMAGING_MODE_L, IMAGING_RAWMODE_L_16B, 16, unpackL16B}, /* grayscale w. alpha */ - {"LA", "LA", 16, unpackLA}, - {"LA", "LA;L", 16, unpackLAL}, + {IMAGING_MODE_LA, IMAGING_RAWMODE_LA, 16, unpackLA}, + {IMAGING_MODE_LA, IMAGING_RAWMODE_LA_L, 16, unpackLAL}, /* grayscale w. alpha premultiplied */ - {"La", "La", 16, unpackLA}, + {IMAGING_MODE_La, IMAGING_RAWMODE_La, 16, unpackLA}, /* palette */ - {"P", "P;1", 1, unpackP1}, - {"P", "P;2", 2, unpackP2}, - {"P", "P;2L", 2, unpackP2L}, - {"P", "P;4", 4, unpackP4}, - {"P", "P;4L", 4, unpackP4L}, - {"P", "P", 8, copy1}, - {"P", "P;R", 8, unpackLR}, - {"P", "L", 8, copy1}, - {"P", "PX", 16, unpackL16B}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_1, 1, unpackP1}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_2, 2, unpackP2}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_2L, 2, unpackP2L}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_4, 4, unpackP4}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_4L, 4, unpackP4L}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P, 8, copy1}, + {IMAGING_MODE_P, IMAGING_RAWMODE_P_R, 8, unpackLR}, + {IMAGING_MODE_P, IMAGING_RAWMODE_L, 8, copy1}, + {IMAGING_MODE_P, IMAGING_RAWMODE_PX, 16, unpackL16B}, /* palette w. alpha */ - {"PA", "PA", 16, unpackLA}, - {"PA", "PA;L", 16, unpackLAL}, - {"PA", "LA", 16, unpackLA}, + {IMAGING_MODE_PA, IMAGING_RAWMODE_PA, 16, unpackLA}, + {IMAGING_MODE_PA, IMAGING_RAWMODE_PA_L, 16, unpackLAL}, + {IMAGING_MODE_PA, IMAGING_RAWMODE_LA, 16, unpackLA}, /* true colour */ - {"RGB", "RGB", 24, ImagingUnpackRGB}, - {"RGB", "RGB;L", 24, unpackRGBL}, - {"RGB", "RGB;R", 24, unpackRGBR}, - {"RGB", "RGB;16L", 48, unpackRGB16L}, - {"RGB", "RGB;16B", 48, unpackRGB16B}, - {"RGB", "BGR", 24, ImagingUnpackBGR}, - {"RGB", "RGB;15", 16, ImagingUnpackRGB15}, - {"RGB", "BGR;15", 16, ImagingUnpackBGR15}, - {"RGB", "RGB;16", 16, ImagingUnpackRGB16}, - {"RGB", "BGR;16", 16, ImagingUnpackBGR16}, - {"RGB", "RGBX;16L", 64, unpackRGBA16L}, - {"RGB", "RGBX;16B", 64, unpackRGBA16B}, - {"RGB", "RGB;4B", 16, ImagingUnpackRGB4B}, - {"RGB", "BGR;5", 16, ImagingUnpackBGR15}, /* compat */ - {"RGB", "RGBX", 32, copy4}, - {"RGB", "RGBX;L", 32, unpackRGBAL}, - {"RGB", "RGBXX", 40, copy4skip1}, - {"RGB", "RGBXXX", 48, copy4skip2}, - {"RGB", "RGBA;L", 32, unpackRGBAL}, - {"RGB", "RGBA;15", 16, ImagingUnpackRGBA15}, - {"RGB", "BGRX", 32, ImagingUnpackBGRX}, - {"RGB", "BGXR", 32, ImagingUnpackBGXR}, - {"RGB", "XRGB", 32, ImagingUnpackXRGB}, - {"RGB", "XBGR", 32, ImagingUnpackXBGR}, - {"RGB", "YCC;P", 24, ImagingUnpackYCC}, - {"RGB", "R", 8, band0}, - {"RGB", "G", 8, band1}, - {"RGB", "B", 8, band2}, - {"RGB", "R;16L", 16, band016L}, - {"RGB", "G;16L", 16, band116L}, - {"RGB", "B;16L", 16, band216L}, - {"RGB", "R;16B", 16, band016B}, - {"RGB", "G;16B", 16, band116B}, - {"RGB", "B;16B", 16, band216B}, - {"RGB", "CMYK", 32, cmyk2rgb}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB, 24, ImagingUnpackRGB}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_L, 24, unpackRGBL}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_R, 24, unpackRGBR}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16L, 48, unpackRGB16L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16B, 48, unpackRGB16B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR, 24, ImagingUnpackBGR}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_15, 16, ImagingUnpackRGB15}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR_15, 16, ImagingUnpackBGR15}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16, 16, ImagingUnpackRGB16}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR_16, 16, ImagingUnpackBGR16}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_16L, 64, unpackRGBA16L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_16B, 64, unpackRGBA16B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_4B, 16, ImagingUnpackRGB4B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR_5, 16, ImagingUnpackBGR15}, /* compat */ + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX, 32, copy4}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_L, 32, unpackRGBAL}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBXX, 40, copy4skip1}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBXXX, 48, copy4skip2}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBA_L, 32, unpackRGBAL}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBA_15, 16, ImagingUnpackRGBA15}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGRX, 32, ImagingUnpackBGRX}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGXR, 32, ImagingUnpackBGXR}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_XRGB, 32, ImagingUnpackXRGB}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_XBGR, 32, ImagingUnpackXBGR}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_YCC_P, 24, ImagingUnpackYCC}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_R, 8, band0}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_G, 8, band1}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_B, 8, band2}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16L, 16, band016L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16L, 16, band116L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16L, 16, band216L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16B, 16, band016B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16B, 16, band116B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16B, 16, band216B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_CMYK, 32, cmyk2rgb}, /* true colour w. alpha */ - {"RGBA", "LA", 16, unpackRGBALA}, - {"RGBA", "LA;16B", 32, unpackRGBALA16B}, - {"RGBA", "RGBA", 32, copy4}, - {"RGBA", "RGBAX", 40, copy4skip1}, - {"RGBA", "RGBAXX", 48, copy4skip2}, - {"RGBA", "RGBa", 32, unpackRGBa}, - {"RGBA", "RGBaX", 40, unpackRGBaskip1}, - {"RGBA", "RGBaXX", 48, unpackRGBaskip2}, - {"RGBA", "RGBa;16L", 64, unpackRGBa16L}, - {"RGBA", "RGBa;16B", 64, unpackRGBa16B}, - {"RGBA", "BGR", 24, ImagingUnpackBGR}, - {"RGBA", "BGRa", 32, unpackBGRa}, - {"RGBA", "RGBA;I", 32, unpackRGBAI}, - {"RGBA", "RGBA;L", 32, unpackRGBAL}, - {"RGBA", "RGBA;15", 16, ImagingUnpackRGBA15}, - {"RGBA", "BGRA;15", 16, ImagingUnpackBGRA15}, - {"RGBA", "BGRA;15Z", 16, ImagingUnpackBGRA15Z}, - {"RGBA", "RGBA;4B", 16, ImagingUnpackRGBA4B}, - {"RGBA", "RGBA;16L", 64, unpackRGBA16L}, - {"RGBA", "RGBA;16B", 64, unpackRGBA16B}, - {"RGBA", "BGRA", 32, unpackBGRA}, - {"RGBA", "BGRA;16L", 64, unpackBGRA16L}, - {"RGBA", "BGRA;16B", 64, unpackBGRA16B}, - {"RGBA", "BGAR", 32, unpackBGAR}, - {"RGBA", "ARGB", 32, unpackARGB}, - {"RGBA", "ABGR", 32, unpackABGR}, - {"RGBA", "YCCA;P", 32, ImagingUnpackYCCA}, - {"RGBA", "R", 8, band0}, - {"RGBA", "G", 8, band1}, - {"RGBA", "B", 8, band2}, - {"RGBA", "A", 8, band3}, - {"RGBA", "R;16L", 16, band016L}, - {"RGBA", "G;16L", 16, band116L}, - {"RGBA", "B;16L", 16, band216L}, - {"RGBA", "A;16L", 16, band316L}, - {"RGBA", "R;16B", 16, band016B}, - {"RGBA", "G;16B", 16, band116B}, - {"RGBA", "B;16B", 16, band216B}, - {"RGBA", "A;16B", 16, band316B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_LA, 16, unpackRGBALA}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_LA_16B, 32, unpackRGBALA16B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA, 32, copy4}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBAX, 40, copy4skip1}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBAXX, 48, copy4skip2}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa, 32, unpackRGBa}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBaX, 40, unpackRGBaskip1}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBaXX, 48, unpackRGBaskip2}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16L, 64, unpackRGBa16L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16B, 64, unpackRGBa16B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGR, 24, ImagingUnpackBGR}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRa, 32, unpackBGRa}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_I, 32, unpackRGBAI}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_L, 32, unpackRGBAL}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_15, 16, ImagingUnpackRGBA15}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_15, 16, ImagingUnpackBGRA15}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_15Z, 16, ImagingUnpackBGRA15Z}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_4B, 16, ImagingUnpackRGBA4B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16L, 64, unpackRGBA16L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16B, 64, unpackRGBA16B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA, 32, unpackBGRA}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_16L, 64, unpackBGRA16L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_16B, 64, unpackBGRA16B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGAR, 32, unpackBGAR}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_ARGB, 32, unpackARGB}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_ABGR, 32, unpackABGR}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_YCCA_P, 32, ImagingUnpackYCCA}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R, 8, band0}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G, 8, band1}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B, 8, band2}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A, 8, band3}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16L, 16, band016L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16L, 16, band116L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16L, 16, band216L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16L, 16, band316L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16B, 16, band016B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16B, 16, band116B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16B, 16, band216B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16B, 16, band316B}, #ifdef WORDS_BIGENDIAN - {"RGB", "RGB;16N", 48, unpackRGB16B}, - {"RGB", "RGBX;16N", 64, unpackRGBA16B}, - {"RGBA", "RGBa;16N", 64, unpackRGBa16B}, - {"RGBA", "RGBA;16N", 64, unpackRGBA16B}, - {"RGBX", "RGBX;16N", 64, unpackRGBA16B}, - {"RGB", "R;16N", 16, band016B}, - {"RGB", "G;16N", 16, band116B}, - {"RGB", "B;16N", 16, band216B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16N, 48, unpackRGB16B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_16N, 64, unpackRGBA16B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16N, 64, unpackRGBa16B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16N, 64, unpackRGBA16B}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16N, 64, unpackRGBA16B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16N, 16, band016B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16N, 16, band116B}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16N, 16, band216B}, - {"RGBA", "R;16N", 16, band016B}, - {"RGBA", "G;16N", 16, band116B}, - {"RGBA", "B;16N", 16, band216B}, - {"RGBA", "A;16N", 16, band316B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16N, 16, band016B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16N, 16, band116B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16N, 16, band216B}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16N, 16, band316B}, #else - {"RGB", "RGB;16N", 48, unpackRGB16L}, - {"RGB", "RGBX;16N", 64, unpackRGBA16L}, - {"RGBA", "RGBa;16N", 64, unpackRGBa16L}, - {"RGBA", "RGBA;16N", 64, unpackRGBA16L}, - {"RGBX", "RGBX;16N", 64, unpackRGBA16L}, - {"RGB", "R;16N", 16, band016L}, - {"RGB", "G;16N", 16, band116L}, - {"RGB", "B;16N", 16, band216L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16N, 48, unpackRGB16L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_16N, 64, unpackRGBA16L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16N, 64, unpackRGBa16L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16N, 64, unpackRGBA16L}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16N, 64, unpackRGBA16L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16N, 16, band016L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16N, 16, band116L}, + {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16N, 16, band216L}, - {"RGBA", "R;16N", 16, band016L}, - {"RGBA", "G;16N", 16, band116L}, - {"RGBA", "B;16N", 16, band216L}, - {"RGBA", "A;16N", 16, band316L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16N, 16, band016L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16N, 16, band116L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16N, 16, band216L}, + {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16N, 16, band316L}, #endif /* true colour w. alpha premultiplied */ - {"RGBa", "RGBa", 32, copy4}, - {"RGBa", "BGRa", 32, unpackBGRA}, - {"RGBa", "aRGB", 32, unpackARGB}, - {"RGBa", "aBGR", 32, unpackABGR}, + {IMAGING_MODE_RGBa, IMAGING_RAWMODE_RGBa, 32, copy4}, + {IMAGING_MODE_RGBa, IMAGING_RAWMODE_BGRa, 32, unpackBGRA}, + {IMAGING_MODE_RGBa, IMAGING_RAWMODE_aRGB, 32, unpackARGB}, + {IMAGING_MODE_RGBa, IMAGING_RAWMODE_aBGR, 32, unpackABGR}, /* true colour w. padding */ - {"RGBX", "RGB", 24, ImagingUnpackRGB}, - {"RGBX", "RGB;L", 24, unpackRGBL}, - {"RGBX", "RGB;16B", 48, unpackRGB16B}, - {"RGBX", "BGR", 24, ImagingUnpackBGR}, - {"RGBX", "RGB;15", 16, ImagingUnpackRGB15}, - {"RGBX", "BGR;15", 16, ImagingUnpackBGR15}, - {"RGBX", "RGB;4B", 16, ImagingUnpackRGB4B}, - {"RGBX", "BGR;5", 16, ImagingUnpackBGR15}, /* compat */ - {"RGBX", "RGBX", 32, copy4}, - {"RGBX", "RGBXX", 40, copy4skip1}, - {"RGBX", "RGBXXX", 48, copy4skip2}, - {"RGBX", "RGBX;L", 32, unpackRGBAL}, - {"RGBX", "RGBX;16L", 64, unpackRGBA16L}, - {"RGBX", "RGBX;16B", 64, unpackRGBA16B}, - {"RGBX", "BGRX", 32, ImagingUnpackBGRX}, - {"RGBX", "XRGB", 32, ImagingUnpackXRGB}, - {"RGBX", "XBGR", 32, ImagingUnpackXBGR}, - {"RGBX", "YCC;P", 24, ImagingUnpackYCC}, - {"RGBX", "R", 8, band0}, - {"RGBX", "G", 8, band1}, - {"RGBX", "B", 8, band2}, - {"RGBX", "X", 8, band3}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB, 24, ImagingUnpackRGB}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_L, 24, unpackRGBL}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_16B, 48, unpackRGB16B}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR, 24, ImagingUnpackBGR}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_15, 16, ImagingUnpackRGB15}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR_15, 16, ImagingUnpackBGR15}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_4B, 16, ImagingUnpackRGB4B}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR_5, 16, ImagingUnpackBGR15}, /* compat */ + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX, 32, copy4}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBXX, 40, copy4skip1}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBXXX, 48, copy4skip2}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_L, 32, unpackRGBAL}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16L, 64, unpackRGBA16L}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16B, 64, unpackRGBA16B}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGRX, 32, ImagingUnpackBGRX}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_XRGB, 32, ImagingUnpackXRGB}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_XBGR, 32, ImagingUnpackXBGR}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_YCC_P, 24, ImagingUnpackYCC}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_R, 8, band0}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_G, 8, band1}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_B, 8, band2}, + {IMAGING_MODE_RGBX, IMAGING_RAWMODE_X, 8, band3}, /* colour separation */ - {"CMYK", "CMYK", 32, copy4}, - {"CMYK", "CMYKX", 40, copy4skip1}, - {"CMYK", "CMYKXX", 48, copy4skip2}, - {"CMYK", "CMYK;I", 32, unpackCMYKI}, - {"CMYK", "CMYK;L", 32, unpackRGBAL}, - {"CMYK", "CMYK;16L", 64, unpackRGBA16L}, - {"CMYK", "CMYK;16B", 64, unpackRGBA16B}, - {"CMYK", "C", 8, band0}, - {"CMYK", "M", 8, band1}, - {"CMYK", "Y", 8, band2}, - {"CMYK", "K", 8, band3}, - {"CMYK", "C;I", 8, band0I}, - {"CMYK", "M;I", 8, band1I}, - {"CMYK", "Y;I", 8, band2I}, - {"CMYK", "K;I", 8, band3I}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK, 32, copy4}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYKX, 40, copy4skip1}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYKXX, 48, copy4skip2}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_I, 32, unpackCMYKI}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_L, 32, unpackRGBAL}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16L, 64, unpackRGBA16L}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16B, 64, unpackRGBA16B}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_C, 8, band0}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_M, 8, band1}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_Y, 8, band2}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_K, 8, band3}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_C_I, 8, band0I}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_M_I, 8, band1I}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_Y_I, 8, band2I}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_K_I, 8, band3I}, #ifdef WORDS_BIGENDIAN - {"CMYK", "CMYK;16N", 64, unpackRGBA16B}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16N, 64, unpackRGBA16B}, #else - {"CMYK", "CMYK;16N", 64, unpackRGBA16L}, + {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16N, 64, unpackRGBA16L}, #endif /* video (YCbCr) */ - {"YCbCr", "YCbCr", 24, ImagingUnpackRGB}, - {"YCbCr", "YCbCr;L", 24, unpackRGBL}, - {"YCbCr", "YCbCrX", 32, copy4}, - {"YCbCr", "YCbCrK", 32, copy4}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr, 24, ImagingUnpackRGB}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr_L, 24, unpackRGBL}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrX, 32, copy4}, + {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrK, 32, copy4}, /* LAB Color */ - {"LAB", "LAB", 24, ImagingUnpackLAB}, - {"LAB", "L", 8, band0}, - {"LAB", "A", 8, band1}, - {"LAB", "B", 8, band2}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_LAB, 24, ImagingUnpackLAB}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_L, 8, band0}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_A, 8, band1}, + {IMAGING_MODE_LAB, IMAGING_RAWMODE_B, 8, band2}, /* HSV Color */ - {"HSV", "HSV", 24, ImagingUnpackRGB}, - {"HSV", "H", 8, band0}, - {"HSV", "S", 8, band1}, - {"HSV", "V", 8, band2}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_HSV, 24, ImagingUnpackRGB}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_H, 8, band0}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_S, 8, band1}, + {IMAGING_MODE_HSV, IMAGING_RAWMODE_V, 8, band2}, /* integer variations */ - {"I", "I", 32, copy4}, - {"I", "I;8", 8, unpackI8}, - {"I", "I;8S", 8, unpackI8S}, - {"I", "I;16", 16, unpackI16}, - {"I", "I;16S", 16, unpackI16S}, - {"I", "I;16B", 16, unpackI16B}, - {"I", "I;16BS", 16, unpackI16BS}, - {"I", "I;16N", 16, unpackI16N}, - {"I", "I;16NS", 16, unpackI16NS}, - {"I", "I;32", 32, unpackI32}, - {"I", "I;32S", 32, unpackI32S}, - {"I", "I;32B", 32, unpackI32B}, - {"I", "I;32BS", 32, unpackI32BS}, - {"I", "I;32N", 32, unpackI32N}, - {"I", "I;32NS", 32, unpackI32NS}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I, 32, copy4}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_8, 8, unpackI8}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_8S, 8, unpackI8S}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_16, 16, unpackI16}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_16S, 16, unpackI16S}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_16B, 16, unpackI16B}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_16BS, 16, unpackI16BS}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_16N, 16, unpackI16N}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_16NS, 16, unpackI16NS}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32, 32, unpackI32}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32S, 32, unpackI32S}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32B, 32, unpackI32B}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32BS, 32, unpackI32BS}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32N, 32, unpackI32N}, + {IMAGING_MODE_I, IMAGING_RAWMODE_I_32NS, 32, unpackI32NS}, /* floating point variations */ - {"F", "F", 32, copy4}, - {"F", "F;8", 8, unpackF8}, - {"F", "F;8S", 8, unpackF8S}, - {"F", "F;16", 16, unpackF16}, - {"F", "F;16S", 16, unpackF16S}, - {"F", "F;16B", 16, unpackF16B}, - {"F", "F;16BS", 16, unpackF16BS}, - {"F", "F;16N", 16, unpackF16N}, - {"F", "F;16NS", 16, unpackF16NS}, - {"F", "F;32", 32, unpackF32}, - {"F", "F;32S", 32, unpackF32S}, - {"F", "F;32B", 32, unpackF32B}, - {"F", "F;32BS", 32, unpackF32BS}, - {"F", "F;32N", 32, unpackF32N}, - {"F", "F;32NS", 32, unpackF32NS}, - {"F", "F;32F", 32, unpackF32F}, - {"F", "F;32BF", 32, unpackF32BF}, - {"F", "F;32NF", 32, unpackF32NF}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F, 32, copy4}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_8, 8, unpackF8}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_8S, 8, unpackF8S}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_16, 16, unpackF16}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_16S, 16, unpackF16S}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_16B, 16, unpackF16B}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_16BS, 16, unpackF16BS}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_16N, 16, unpackF16N}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_16NS, 16, unpackF16NS}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32, 32, unpackF32}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32S, 32, unpackF32S}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32B, 32, unpackF32B}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32BS, 32, unpackF32BS}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32N, 32, unpackF32N}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32NS, 32, unpackF32NS}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32F, 32, unpackF32F}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32BF, 32, unpackF32BF}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_32NF, 32, unpackF32NF}, #ifdef FLOAT64 - {"F", "F;64F", 64, unpackF64F}, - {"F", "F;64BF", 64, unpackF64BF}, - {"F", "F;64NF", 64, unpackF64NF}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_64F, 64, unpackF64F}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_64BF, 64, unpackF64BF}, + {IMAGING_MODE_F, IMAGING_RAWMODE_F_64NF, 64, unpackF64NF}, #endif /* storage modes */ - {"I;16", "I;16", 16, copy2}, - {"I;16B", "I;16B", 16, copy2}, - {"I;16L", "I;16L", 16, copy2}, - {"I;16N", "I;16N", 16, copy2}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16, 16, copy2}, + {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16B, 16, copy2}, + {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16L, 16, copy2}, + {IMAGING_MODE_I_16N, IMAGING_RAWMODE_I_16N, 16, copy2}, - {"I;16", "I;16B", 16, unpackI16B_I16}, - {"I;16", "I;16N", 16, unpackI16N_I16}, // LibTiff native->image endian. - {"I;16L", "I;16N", 16, unpackI16N_I16}, // LibTiff native->image endian. - {"I;16B", "I;16N", 16, unpackI16N_I16B}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, unpackI16B_I16}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16N, 16, unpackI16N_I16}, // LibTiff native->image endian. + {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16N, 16, unpackI16N_I16}, // LibTiff native->image endian. + {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16N, 16, unpackI16N_I16B}, - {"I;16", "I;16R", 16, unpackI16R_I16}, + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16R, 16, unpackI16R_I16}, - {"I;16", "I;12", 12, unpackI12_I16}, // 12 bit Tiffs stored in 16bits. + {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_12, 12, unpackI12_I16}, // 12 bit Tiffs stored in 16bits. {NULL} /* sentinel */ }; ImagingShuffler -ImagingFindUnpacker(const Mode *mode, const RawMode *rawmode, int *bits_out) { - int i; - - /* find a suitable pixel unpacker */ - for (i = 0; unpackers[i].rawmode; i++) { +ImagingFindUnpacker(const ModeID mode, const RawModeID rawmode, int *bits_out) { + for (size_t i = 0; i < sizeof(unpackers) / sizeof(*unpackers); i++) { if (unpackers[i].mode == mode && unpackers[i].rawmode == rawmode) { if (bits_out) { *bits_out = unpackers[i].bits; @@ -1863,317 +1859,3 @@ ImagingFindUnpacker(const Mode *mode, const RawMode *rawmode, int *bits_out) { return NULL; } - -void -ImagingUnpackInit(void) { - const struct Unpacker temp[] = { - /* raw mode syntax is ";" where "bits" defaults - depending on mode (1 for "1", 8 for "P" and "L", etc), and - "flags" should be given in alphabetical order. if both bits - and flags have their default values, the ; should be left out */ - - /* flags: "I" inverted data; "R" reversed bit order; "B" big - endian byte order (default is little endian); "L" line - interleave, "S" signed, "F" floating point, "Z" inverted alpha */ - - /* exception: rawmodes "I" and "F" are always native endian byte order */ - - /* bilevel */ - {IMAGING_MODE_1, IMAGING_RAWMODE_1, 1, unpack1}, - {IMAGING_MODE_1, IMAGING_RAWMODE_1_I, 1, unpack1I}, - {IMAGING_MODE_1, IMAGING_RAWMODE_1_R, 1, unpack1R}, - {IMAGING_MODE_1, IMAGING_RAWMODE_1_IR, 1, unpack1IR}, - {IMAGING_MODE_1, IMAGING_RAWMODE_1_8, 8, unpack18}, - - /* grayscale */ - {IMAGING_MODE_L, IMAGING_RAWMODE_L_2, 2, unpackL2}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_2I, 2, unpackL2I}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_2R, 2, unpackL2R}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_2IR, 2, unpackL2IR}, - - {IMAGING_MODE_L, IMAGING_RAWMODE_L_4, 4, unpackL4}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_4I, 4, unpackL4I}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_4R, 4, unpackL4R}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_4IR, 4, unpackL4IR}, - - {IMAGING_MODE_L, IMAGING_RAWMODE_L, 8, copy1}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_I, 8, unpackLI}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_R, 8, unpackLR}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_16, 16, unpackL16}, - {IMAGING_MODE_L, IMAGING_RAWMODE_L_16B, 16, unpackL16B}, - - /* grayscale w. alpha */ - {IMAGING_MODE_LA, IMAGING_RAWMODE_LA, 16, unpackLA}, - {IMAGING_MODE_LA, IMAGING_RAWMODE_LA_L, 16, unpackLAL}, - - /* grayscale w. alpha premultiplied */ - {IMAGING_MODE_La, IMAGING_RAWMODE_La, 16, unpackLA}, - - /* palette */ - {IMAGING_MODE_P, IMAGING_RAWMODE_P_1, 1, unpackP1}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P_2, 2, unpackP2}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P_2L, 2, unpackP2L}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P_4, 4, unpackP4}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P_4L, 4, unpackP4L}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P, 8, copy1}, - {IMAGING_MODE_P, IMAGING_RAWMODE_P_R, 8, unpackLR}, - {IMAGING_MODE_P, IMAGING_RAWMODE_L, 8, copy1}, - {IMAGING_MODE_P, IMAGING_RAWMODE_PX, 16, unpackL16B}, - - /* palette w. alpha */ - {IMAGING_MODE_PA, IMAGING_RAWMODE_PA, 16, unpackLA}, - {IMAGING_MODE_PA, IMAGING_RAWMODE_PA_L, 16, unpackLAL}, - {IMAGING_MODE_PA, IMAGING_RAWMODE_LA, 16, unpackLA}, - - /* true colour */ - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB, 24, ImagingUnpackRGB}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_L, 24, unpackRGBL}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_R, 24, unpackRGBR}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16L, 48, unpackRGB16L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16B, 48, unpackRGB16B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR, 24, ImagingUnpackBGR}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_15, 16, ImagingUnpackRGB15}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR_15, 16, ImagingUnpackBGR15}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16, 16, ImagingUnpackRGB16}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR_16, 16, ImagingUnpackBGR16}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_16L, 64, unpackRGBA16L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_16B, 64, unpackRGBA16B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_4B, 16, ImagingUnpackRGB4B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGR_5, 16, ImagingUnpackBGR15}, /* compat */ - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX, 32, copy4}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBX_L, 32, unpackRGBAL}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBXX, 40, copy4skip1}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBXXX, 48, copy4skip2}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBA_L, 32, unpackRGBAL}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGBA_15, 16, ImagingUnpackRGBA15}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGRX, 32, ImagingUnpackBGRX}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_BGXR, 32, ImagingUnpackBGXR}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_XRGB, 32, ImagingUnpackXRGB}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_XBGR, 32, ImagingUnpackXBGR}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_YCC_P, 24, ImagingUnpackYCC}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_R, 8, band0}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_G, 8, band1}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_B, 8, band2}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16L, 16, band016L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16L, 16, band116L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16L, 16, band216L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16B, 16, band016B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16B, 16, band116B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16B, 16, band216B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_CMYK, 32, cmyk2rgb}, - - {IMAGING_MODE_BGR_15, IMAGING_RAWMODE_BGR_15, 16, copy2}, - {IMAGING_MODE_BGR_16, IMAGING_RAWMODE_BGR_16, 16, copy2}, - {IMAGING_MODE_BGR_24, IMAGING_RAWMODE_BGR_24, 24, copy3}, - - /* true colour w. alpha */ - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_LA, 16, unpackRGBALA}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_LA_16B, 32, unpackRGBALA16B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA, 32, copy4}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBAX, 40, copy4skip1}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBAXX, 48, copy4skip2}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa, 32, unpackRGBa}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBaX, 40, unpackRGBaskip1}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBaXX, 48, unpackRGBaskip2}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16L, 64, unpackRGBa16L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16B, 64, unpackRGBa16B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRa, 32, unpackBGRa}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_I, 32, unpackRGBAI}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_L, 32, unpackRGBAL}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_15, 16, ImagingUnpackRGBA15}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_15, 16, ImagingUnpackBGRA15}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_15Z, 16, ImagingUnpackBGRA15Z}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_4B, 16, ImagingUnpackRGBA4B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16L, 64, unpackRGBA16L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16B, 64, unpackRGBA16B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA, 32, unpackBGRA}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_16L, 64, unpackBGRA16L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGRA_16B, 64, unpackBGRA16B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_BGAR, 32, unpackBGAR}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_ARGB, 32, unpackARGB}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_ABGR, 32, unpackABGR}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_YCCA_P, 32, ImagingUnpackYCCA}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R, 8, band0}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G, 8, band1}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B, 8, band2}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A, 8, band3}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16L, 16, band016L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16L, 16, band116L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16L, 16, band216L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16L, 16, band316L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16B, 16, band016B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16B, 16, band116B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16B, 16, band216B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16B, 16, band316B}, - -#ifdef WORDS_BIGENDIAN - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16N, 48, unpackRGB16B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16N, 64, unpackRGBa16B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16N, 64, unpackRGBA16B}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16N, 64, unpackRGBA16B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16N, 16, band016B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16N, 16, band116B}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16N, 16, band216B}, - - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16N, 16, band016B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16N, 16, band116B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16N, 16, band216B}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16N, 16, band316B}, -#else - {IMAGING_MODE_RGB, IMAGING_RAWMODE_RGB_16N, 48, unpackRGB16L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBa_16N, 64, unpackRGBa16L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_RGBA_16N, 64, unpackRGBA16L}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16N, 64, unpackRGBA16L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_R_16N, 16, band016L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_G_16N, 16, band116L}, - {IMAGING_MODE_RGB, IMAGING_RAWMODE_B_16N, 16, band216L}, - - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_R_16N, 16, band016L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_G_16N, 16, band116L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_B_16N, 16, band216L}, - {IMAGING_MODE_RGBA, IMAGING_RAWMODE_A_16N, 16, band316L}, -#endif - - /* true colour w. alpha premultiplied */ - {IMAGING_MODE_RGBa, IMAGING_RAWMODE_RGBa, 32, copy4}, - {IMAGING_MODE_RGBa, IMAGING_RAWMODE_BGRa, 32, unpackBGRA}, - {IMAGING_MODE_RGBa, IMAGING_RAWMODE_aRGB, 32, unpackARGB}, - {IMAGING_MODE_RGBa, IMAGING_RAWMODE_aBGR, 32, unpackABGR}, - - /* true colour w. padding */ - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB, 24, ImagingUnpackRGB}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_L, 24, unpackRGBL}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_16B, 48, unpackRGB16B}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR, 24, ImagingUnpackBGR}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_15, 16, ImagingUnpackRGB15}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR_15, 16, ImagingUnpackBGR15}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGB_4B, 16, ImagingUnpackRGB4B}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGR_5, 16, ImagingUnpackBGR15}, /* compat */ - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX, 32, copy4}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBXX, 40, copy4skip1}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBXXX, 48, copy4skip2}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_L, 32, unpackRGBAL}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16L, 64, unpackRGBA16L}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_RGBX_16B, 64, unpackRGBA16B}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_BGRX, 32, ImagingUnpackBGRX}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_XRGB, 32, ImagingUnpackXRGB}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_XBGR, 32, ImagingUnpackXBGR}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_YCC_P, 24, ImagingUnpackYCC}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_R, 8, band0}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_G, 8, band1}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_B, 8, band2}, - {IMAGING_MODE_RGBX, IMAGING_RAWMODE_X, 8, band3}, - - /* colour separation */ - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK, 32, copy4}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYKX, 40, copy4skip1}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYKXX, 48, copy4skip2}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_I, 32, unpackCMYKI}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_L, 32, unpackRGBAL}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16L, 64, unpackRGBA16L}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16B, 64, unpackRGBA16B}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_C, 8, band0}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_M, 8, band1}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_Y, 8, band2}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_K, 8, band3}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_C_I, 8, band0I}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_M_I, 8, band1I}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_Y_I, 8, band2I}, - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_K_I, 8, band3I}, - -#ifdef WORDS_BIGENDIAN - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16N, 64, unpackRGBA16B}, -#else - {IMAGING_MODE_CMYK, IMAGING_RAWMODE_CMYK_16N, 64, unpackRGBA16L}, -#endif - - /* video (YCbCr) */ - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr, 24, ImagingUnpackRGB}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCr_L, 24, unpackRGBL}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrX, 32, copy4}, - {IMAGING_MODE_YCbCr, IMAGING_RAWMODE_YCbCrK, 32, copy4}, - - /* LAB Color */ - {IMAGING_MODE_LAB, IMAGING_RAWMODE_LAB, 24, ImagingUnpackLAB}, - {IMAGING_MODE_LAB, IMAGING_RAWMODE_L, 8, band0}, - {IMAGING_MODE_LAB, IMAGING_RAWMODE_A, 8, band1}, - {IMAGING_MODE_LAB, IMAGING_RAWMODE_B, 8, band2}, - - /* HSV Color */ - {IMAGING_MODE_HSV, IMAGING_RAWMODE_HSV, 24, ImagingUnpackRGB}, - {IMAGING_MODE_HSV, IMAGING_RAWMODE_H, 8, band0}, - {IMAGING_MODE_HSV, IMAGING_RAWMODE_S, 8, band1}, - {IMAGING_MODE_HSV, IMAGING_RAWMODE_V, 8, band2}, - - /* integer variations */ - {IMAGING_MODE_I, IMAGING_RAWMODE_I, 32, copy4}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_8, 8, unpackI8}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_8S, 8, unpackI8S}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_16, 16, unpackI16}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_16S, 16, unpackI16S}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_16B, 16, unpackI16B}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_16BS, 16, unpackI16BS}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_16N, 16, unpackI16N}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_16NS, 16, unpackI16NS}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32, 32, unpackI32}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32S, 32, unpackI32S}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32B, 32, unpackI32B}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32BS, 32, unpackI32BS}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32N, 32, unpackI32N}, - {IMAGING_MODE_I, IMAGING_RAWMODE_I_32NS, 32, unpackI32NS}, - - /* floating point variations */ - {IMAGING_MODE_F, IMAGING_RAWMODE_F, 32, copy4}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_8, 8, unpackF8}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_8S, 8, unpackF8S}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_16, 16, unpackF16}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_16S, 16, unpackF16S}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_16B, 16, unpackF16B}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_16BS, 16, unpackF16BS}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_16N, 16, unpackF16N}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_16NS, 16, unpackF16NS}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32, 32, unpackF32}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32S, 32, unpackF32S}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32B, 32, unpackF32B}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32BS, 32, unpackF32BS}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32N, 32, unpackF32N}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32NS, 32, unpackF32NS}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32F, 32, unpackF32F}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32BF, 32, unpackF32BF}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_32NF, 32, unpackF32NF}, -#ifdef FLOAT64 - {IMAGING_MODE_F, IMAGING_RAWMODE_F_64F, 64, unpackF64F}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_64BF, 64, unpackF64BF}, - {IMAGING_MODE_F, IMAGING_RAWMODE_F_64NF, 64, unpackF64NF}, -#endif - - /* storage modes */ - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16, 16, copy2}, - {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16B, 16, copy2}, - {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16L, 16, copy2}, - {IMAGING_MODE_I_16N, IMAGING_RAWMODE_I_16N, 16, copy2}, - - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16B, 16, unpackI16B_I16}, - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16N, 16, unpackI16N_I16}, // LibTiff native->image endian. - {IMAGING_MODE_I_16L, IMAGING_RAWMODE_I_16N, 16, unpackI16N_I16}, // LibTiff native->image endian. - {IMAGING_MODE_I_16B, IMAGING_RAWMODE_I_16N, 16, unpackI16N_I16B}, - - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_16R, 16, unpackI16R_I16}, - - {IMAGING_MODE_I_16, IMAGING_RAWMODE_I_12, 12, unpackI12_I16}, // 12 bit Tiffs stored in 16bits. - - {NULL} /* sentinel */ - }; - unpackers = malloc(sizeof(temp)); - if (unpackers == NULL) { - fprintf(stderr, "UnpackInit: failed to allocate memory for unpackers table\n"); - exit(1); - } - memcpy(unpackers, temp, sizeof(temp)); -} - -void -ImagingUnpackFree(void) { - free(unpackers); - unpackers = NULL; -} diff --git a/src/map.c b/src/map.c index 451cca589..6f66b0cc5 100644 --- a/src/map.c +++ b/src/map.c @@ -82,7 +82,7 @@ PyImaging_MapBuffer(PyObject *self, PyObject *args) { return NULL; } - const Mode * const mode = findMode(mode_name); + const ModeID mode = findModeID(mode_name); if (stride <= 0) { if (mode == IMAGING_MODE_L || mode == IMAGING_MODE_P) {