2
* The Python Imaging Library.
4
* standard decoder interfaces for the Imaging library
7
* 1996-03-28 fl Moved from _imagingmodule.c
8
* 1996-04-15 fl Support subregions in setimage
9
* 1996-04-19 fl Allocate decoder buffer (where appropriate)
10
* 1996-05-02 fl Added jpeg decoder
11
* 1996-05-12 fl Compile cleanly as C++
12
* 1996-05-16 fl Added hex decoder
13
* 1996-05-26 fl Added jpeg configuration parameters
14
* 1996-12-14 fl Added zip decoder
15
* 1996-12-30 fl Plugged potential memory leak for tiled images
16
* 1997-01-03 fl Added fli and msp decoders
17
* 1997-01-04 fl Added sun_rle and tga_rle decoders
18
* 1997-05-31 fl Added bitfield decoder
19
* 1998-09-11 fl Added orientation and pixelsize fields to tga_rle decoder
20
* 1998-12-29 fl Added mode/rawmode argument to decoders
21
* 1998-12-30 fl Added mode argument to *all* decoders
22
* 2002-06-09 fl Added stride argument to pcx decoder
24
* Copyright (c) 1997-2002 by Secret Labs AB.
25
* Copyright (c) 1995-2002 by Fredrik Lundh.
27
* See the README file for information on usage and redistribution.
30
/* FIXME: make these pluggable! */
34
#if PY_VERSION_HEX < 0x01060000
35
#define PyObject_New PyObject_NEW
36
#define PyObject_Del PyMem_DEL
47
/* -------------------------------------------------------------------- */
49
/* -------------------------------------------------------------------- */
53
int (*decode)(Imaging im, ImagingCodecState state,
54
UINT8* buffer, int bytes);
55
struct ImagingCodecStateInstance state;
58
} ImagingDecoderObject;
60
staticforward PyTypeObject ImagingDecoderType;
62
static ImagingDecoderObject*
63
PyImaging_DecoderNew(int contextsize)
65
ImagingDecoderObject *decoder;
68
ImagingDecoderType.ob_type = &PyType_Type;
70
decoder = PyObject_New(ImagingDecoderObject, &ImagingDecoderType);
74
/* Clear the decoder state */
75
memset(&decoder->state, 0, sizeof(decoder->state));
77
/* Allocate decoder context */
78
if (contextsize > 0) {
79
context = (void*) calloc(1, contextsize);
82
(void) PyErr_NoMemory();
88
/* Initialize decoder context */
89
decoder->state.context = context;
99
_dealloc(ImagingDecoderObject* decoder)
101
free(decoder->state.buffer);
102
free(decoder->state.context);
103
Py_XDECREF(decoder->lock);
104
PyObject_Del(decoder);
108
_decode(ImagingDecoderObject* decoder, PyObject* args)
113
if (!PyArg_ParseTuple(args, "s#", &buffer, &bufsize))
116
status = decoder->decode(decoder->im, &decoder->state, buffer, bufsize);
118
return Py_BuildValue("ii", status, decoder->state.errcode);
121
extern Imaging PyImaging_AsImaging(PyObject *op);
124
_setimage(ImagingDecoderObject* decoder, PyObject* args)
128
ImagingCodecState state;
131
x0 = y0 = x1 = y1 = 0;
133
/* FIXME: should publish the ImagingType descriptor */
134
if (!PyArg_ParseTuple(args, "O|(iiii)", &op, &x0, &y0, &x1, &y1))
136
im = PyImaging_AsImaging(op);
142
state = &decoder->state;
144
/* Setup decoding tile extent */
145
if (x0 == 0 && x1 == 0) {
146
state->xsize = im->xsize;
147
state->ysize = im->ysize;
151
state->xsize = x1 - x0;
152
state->ysize = y1 - y0;
155
if (state->xsize <= 0 ||
156
state->xsize + state->xoff > (int) im->xsize ||
158
state->ysize + state->yoff > (int) im->ysize) {
159
PyErr_SetString(PyExc_ValueError, "tile cannot extend outside image");
163
/* Allocate memory buffer (if bits field is set) */
164
if (state->bits > 0) {
166
state->bytes = (state->bits * state->xsize+7)/8;
167
state->buffer = (UINT8*) malloc(state->bytes);
169
return PyErr_NoMemory();
172
/* Keep a reference to the image object, to make sure it doesn't
173
go away before we do */
175
Py_XDECREF(decoder->lock);
182
static struct PyMethodDef methods[] = {
183
{"decode", (PyCFunction)_decode, 1},
184
{"setimage", (PyCFunction)_setimage, 1},
185
{NULL, NULL} /* sentinel */
189
_getattr(ImagingDecoderObject* self, char* name)
191
return Py_FindMethod(methods, (PyObject*) self, name);
194
statichere PyTypeObject ImagingDecoderType = {
195
PyObject_HEAD_INIT(NULL)
197
"ImagingDecoder", /*tp_name*/
198
sizeof(ImagingDecoderObject), /*tp_size*/
201
(destructor)_dealloc, /*tp_dealloc*/
203
(getattrfunc)_getattr, /*tp_getattr*/
210
/* -------------------------------------------------------------------- */
213
get_unpacker(ImagingDecoderObject* decoder, const char* mode,
217
ImagingShuffler unpack;
219
unpack = ImagingFindUnpacker(mode, rawmode, &bits);
222
PyErr_SetString(PyExc_ValueError, "unknown raw mode");
226
decoder->state.shuffle = unpack;
227
decoder->state.bits = bits;
233
/* -------------------------------------------------------------------- */
234
/* BIT (packed fields) */
235
/* -------------------------------------------------------------------- */
238
PyImaging_BitDecoderNew(PyObject* self, PyObject* args)
240
ImagingDecoderObject* decoder;
248
if (!PyArg_ParseTuple(args, "s|iiiii", &mode, &bits, &pad, &fill,
252
if (strcmp(mode, "F") != 0) {
253
PyErr_SetString(PyExc_ValueError, "bad image mode");
257
decoder = PyImaging_DecoderNew(sizeof(BITSTATE));
261
decoder->decode = ImagingBitDecode;
263
decoder->state.ystep = ystep;
265
((BITSTATE*)decoder->state.context)->bits = bits;
266
((BITSTATE*)decoder->state.context)->pad = pad;
267
((BITSTATE*)decoder->state.context)->fill = fill;
268
((BITSTATE*)decoder->state.context)->sign = sign;
270
return (PyObject*) decoder;
274
/* -------------------------------------------------------------------- */
276
/* -------------------------------------------------------------------- */
279
PyImaging_FliDecoderNew(PyObject* self, PyObject* args)
281
ImagingDecoderObject* decoder;
283
decoder = PyImaging_DecoderNew(0);
287
decoder->decode = ImagingFliDecode;
289
return (PyObject*) decoder;
293
/* -------------------------------------------------------------------- */
295
/* -------------------------------------------------------------------- */
298
PyImaging_GifDecoderNew(PyObject* self, PyObject* args)
300
ImagingDecoderObject* decoder;
305
if (!PyArg_ParseTuple(args, "s|ii", &mode, &bits, &interlace))
308
if (strcmp(mode, "L") != 0 && strcmp(mode, "P") != 0) {
309
PyErr_SetString(PyExc_ValueError, "bad image mode");
313
decoder = PyImaging_DecoderNew(sizeof(GIFDECODERSTATE));
317
decoder->decode = ImagingGifDecode;
319
((GIFDECODERSTATE*)decoder->state.context)->bits = bits;
320
((GIFDECODERSTATE*)decoder->state.context)->interlace = interlace;
322
return (PyObject*) decoder;
326
/* -------------------------------------------------------------------- */
328
/* -------------------------------------------------------------------- */
331
PyImaging_HexDecoderNew(PyObject* self, PyObject* args)
333
ImagingDecoderObject* decoder;
337
if (!PyArg_ParseTuple(args, "ss", &mode, &rawmode))
340
decoder = PyImaging_DecoderNew(0);
344
if (get_unpacker(decoder, mode, rawmode) < 0)
347
decoder->decode = ImagingHexDecode;
349
return (PyObject*) decoder;
353
/* -------------------------------------------------------------------- */
355
/* -------------------------------------------------------------------- */
358
PyImaging_TiffLzwDecoderNew(PyObject* self, PyObject* args)
360
ImagingDecoderObject* decoder;
365
if (!PyArg_ParseTuple(args, "ss|i", &mode, &rawmode, &filter))
368
decoder = PyImaging_DecoderNew(sizeof(LZWSTATE));
372
if (get_unpacker(decoder, mode, rawmode) < 0)
375
decoder->decode = ImagingLzwDecode;
377
((LZWSTATE*)decoder->state.context)->filter = filter;
379
return (PyObject*) decoder;
383
/* -------------------------------------------------------------------- */
385
/* -------------------------------------------------------------------- */
388
PyImaging_MspDecoderNew(PyObject* self, PyObject* args)
390
ImagingDecoderObject* decoder;
392
decoder = PyImaging_DecoderNew(0);
396
if (get_unpacker(decoder, "1", "1") < 0)
399
decoder->decode = ImagingMspDecode;
401
return (PyObject*) decoder;
405
/* -------------------------------------------------------------------- */
407
/* -------------------------------------------------------------------- */
410
PyImaging_PackbitsDecoderNew(PyObject* self, PyObject* args)
412
ImagingDecoderObject* decoder;
416
if (!PyArg_ParseTuple(args, "ss", &mode, &rawmode))
419
decoder = PyImaging_DecoderNew(0);
423
if (get_unpacker(decoder, mode, rawmode) < 0)
426
decoder->decode = ImagingPackbitsDecode;
428
return (PyObject*) decoder;
432
/* -------------------------------------------------------------------- */
434
/* -------------------------------------------------------------------- */
437
PyImaging_PcdDecoderNew(PyObject* self, PyObject* args)
439
ImagingDecoderObject* decoder;
441
decoder = PyImaging_DecoderNew(0);
445
/* Unpack from PhotoYCC to RGB */
446
if (get_unpacker(decoder, "RGB", "YCC;P") < 0)
449
decoder->decode = ImagingPcdDecode;
451
return (PyObject*) decoder;
455
/* -------------------------------------------------------------------- */
457
/* -------------------------------------------------------------------- */
460
PyImaging_PcxDecoderNew(PyObject* self, PyObject* args)
462
ImagingDecoderObject* decoder;
467
if (!PyArg_ParseTuple(args, "ssi", &mode, &rawmode, &stride))
470
decoder = PyImaging_DecoderNew(0);
474
if (get_unpacker(decoder, mode, rawmode) < 0)
477
decoder->state.bytes = stride;
479
decoder->decode = ImagingPcxDecode;
481
return (PyObject*) decoder;
485
/* -------------------------------------------------------------------- */
487
/* -------------------------------------------------------------------- */
490
PyImaging_RawDecoderNew(PyObject* self, PyObject* args)
492
ImagingDecoderObject* decoder;
498
if (!PyArg_ParseTuple(args, "ss|ii", &mode, &rawmode, &stride, &ystep))
501
decoder = PyImaging_DecoderNew(sizeof(RAWSTATE));
505
if (get_unpacker(decoder, mode, rawmode) < 0)
508
decoder->decode = ImagingRawDecode;
510
decoder->state.ystep = ystep;
512
((RAWSTATE*)decoder->state.context)->stride = stride;
514
return (PyObject*) decoder;
518
/* -------------------------------------------------------------------- */
520
/* -------------------------------------------------------------------- */
523
PyImaging_SunRleDecoderNew(PyObject* self, PyObject* args)
525
ImagingDecoderObject* decoder;
529
if (!PyArg_ParseTuple(args, "ss", &mode, &rawmode))
532
decoder = PyImaging_DecoderNew(0);
536
if (get_unpacker(decoder, mode, rawmode) < 0)
539
decoder->decode = ImagingSunRleDecode;
541
return (PyObject*) decoder;
545
/* -------------------------------------------------------------------- */
547
/* -------------------------------------------------------------------- */
550
PyImaging_TgaRleDecoderNew(PyObject* self, PyObject* args)
552
ImagingDecoderObject* decoder;
558
if (!PyArg_ParseTuple(args, "ss|ii", &mode, &rawmode, &ystep, &depth))
561
decoder = PyImaging_DecoderNew(0);
565
if (get_unpacker(decoder, mode, rawmode) < 0)
568
decoder->decode = ImagingTgaRleDecode;
570
decoder->state.ystep = ystep;
571
decoder->state.count = depth / 8;
573
return (PyObject*) decoder;
577
/* -------------------------------------------------------------------- */
579
/* -------------------------------------------------------------------- */
582
PyImaging_XbmDecoderNew(PyObject* self, PyObject* args)
584
ImagingDecoderObject* decoder;
586
decoder = PyImaging_DecoderNew(0);
590
if (get_unpacker(decoder, "1", "1;R") < 0)
593
decoder->decode = ImagingXbmDecode;
595
return (PyObject*) decoder;
599
/* -------------------------------------------------------------------- */
601
/* -------------------------------------------------------------------- */
608
PyImaging_ZipDecoderNew(PyObject* self, PyObject* args)
610
ImagingDecoderObject* decoder;
615
if (!PyArg_ParseTuple(args, "ss|i", &mode, &rawmode, &interlaced))
618
decoder = PyImaging_DecoderNew(sizeof(ZIPSTATE));
622
if (get_unpacker(decoder, mode, rawmode) < 0)
625
decoder->decode = ImagingZipDecode;
627
((ZIPSTATE*)decoder->state.context)->interlaced = interlaced;
629
return (PyObject*) decoder;
634
/* -------------------------------------------------------------------- */
636
/* -------------------------------------------------------------------- */
640
/* We better define this decoder last in this file, so the following
641
undef's won't mess things up for the Imaging library proper. */
643
#undef HAVE_PROTOTYPES
656
PyImaging_JpegDecoderNew(PyObject* self, PyObject* args)
658
ImagingDecoderObject* decoder;
661
char* rawmode; /* what we wan't from the decoder */
662
char* jpegmode; /* what's in the file */
665
if (!PyArg_ParseTuple(args, "ssz|ii", &mode, &rawmode, &jpegmode,
672
decoder = PyImaging_DecoderNew(sizeof(JPEGSTATE));
676
if (get_unpacker(decoder, mode, rawmode) < 0)
679
decoder->decode = ImagingJpegDecode;
681
strncpy(((JPEGSTATE*)decoder->state.context)->rawmode, rawmode, 8);
682
strncpy(((JPEGSTATE*)decoder->state.context)->jpegmode, jpegmode, 8);
684
((JPEGSTATE*)decoder->state.context)->scale = scale;
685
((JPEGSTATE*)decoder->state.context)->draft = draft;
687
return (PyObject*) decoder;