decode.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917
  1. /*
  2. * The Python Imaging Library.
  3. *
  4. * standard decoder interfaces for the Imaging library
  5. *
  6. * history:
  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
  23. *
  24. * Copyright (c) 1997-2002 by Secret Labs AB.
  25. * Copyright (c) 1995-2002 by Fredrik Lundh.
  26. *
  27. * See the README file for information on usage and redistribution.
  28. */
  29. /* FIXME: make these pluggable! */
  30. #define PY_SSIZE_T_CLEAN
  31. #include "Python.h"
  32. #include "Imaging.h"
  33. #include "py3.h"
  34. #include "Gif.h"
  35. #include "Raw.h"
  36. #include "Bit.h"
  37. #include "Sgi.h"
  38. /* -------------------------------------------------------------------- */
  39. /* Common */
  40. /* -------------------------------------------------------------------- */
  41. typedef struct {
  42. PyObject_HEAD
  43. int (*decode)(Imaging im, ImagingCodecState state,
  44. UINT8* buffer, Py_ssize_t bytes);
  45. int (*cleanup)(ImagingCodecState state);
  46. struct ImagingCodecStateInstance state;
  47. Imaging im;
  48. PyObject* lock;
  49. int pulls_fd;
  50. } ImagingDecoderObject;
  51. static PyTypeObject ImagingDecoderType;
  52. static ImagingDecoderObject*
  53. PyImaging_DecoderNew(int contextsize)
  54. {
  55. ImagingDecoderObject *decoder;
  56. void *context;
  57. if(PyType_Ready(&ImagingDecoderType) < 0)
  58. return NULL;
  59. decoder = PyObject_New(ImagingDecoderObject, &ImagingDecoderType);
  60. if (decoder == NULL)
  61. return NULL;
  62. /* Clear the decoder state */
  63. memset(&decoder->state, 0, sizeof(decoder->state));
  64. /* Allocate decoder context */
  65. if (contextsize > 0) {
  66. context = (void*) calloc(1, contextsize);
  67. if (!context) {
  68. Py_DECREF(decoder);
  69. (void) PyErr_NoMemory();
  70. return NULL;
  71. }
  72. } else
  73. context = 0;
  74. /* Initialize decoder context */
  75. decoder->state.context = context;
  76. /* Target image */
  77. decoder->lock = NULL;
  78. decoder->im = NULL;
  79. /* Initialize the cleanup function pointer */
  80. decoder->cleanup = NULL;
  81. /* set if the decoder needs to pull data from the fd, instead of
  82. having it pushed */
  83. decoder->pulls_fd = 0;
  84. return decoder;
  85. }
  86. static void
  87. _dealloc(ImagingDecoderObject* decoder)
  88. {
  89. if (decoder->cleanup)
  90. decoder->cleanup(&decoder->state);
  91. free(decoder->state.buffer);
  92. free(decoder->state.context);
  93. Py_XDECREF(decoder->lock);
  94. Py_XDECREF(decoder->state.fd);
  95. PyObject_Del(decoder);
  96. }
  97. static PyObject*
  98. _decode(ImagingDecoderObject* decoder, PyObject* args)
  99. {
  100. UINT8* buffer;
  101. Py_ssize_t bufsize;
  102. int status;
  103. ImagingSectionCookie cookie;
  104. if (!PyArg_ParseTuple(args, PY_ARG_BYTES_LENGTH, &buffer, &bufsize))
  105. return NULL;
  106. if (!decoder->pulls_fd) {
  107. ImagingSectionEnter(&cookie);
  108. }
  109. status = decoder->decode(decoder->im, &decoder->state, buffer, bufsize);
  110. if (!decoder->pulls_fd) {
  111. ImagingSectionLeave(&cookie);
  112. }
  113. return Py_BuildValue("ii", status, decoder->state.errcode);
  114. }
  115. static PyObject*
  116. _decode_cleanup(ImagingDecoderObject* decoder, PyObject* args)
  117. {
  118. int status = 0;
  119. if (decoder->cleanup){
  120. status = decoder->cleanup(&decoder->state);
  121. }
  122. return Py_BuildValue("i", status);
  123. }
  124. extern Imaging PyImaging_AsImaging(PyObject *op);
  125. static PyObject*
  126. _setimage(ImagingDecoderObject* decoder, PyObject* args)
  127. {
  128. PyObject* op;
  129. Imaging im;
  130. ImagingCodecState state;
  131. int x0, y0, x1, y1;
  132. x0 = y0 = x1 = y1 = 0;
  133. /* FIXME: should publish the ImagingType descriptor */
  134. if (!PyArg_ParseTuple(args, "O|(iiii)", &op, &x0, &y0, &x1, &y1))
  135. return NULL;
  136. im = PyImaging_AsImaging(op);
  137. if (!im)
  138. return NULL;
  139. decoder->im = im;
  140. state = &decoder->state;
  141. /* Setup decoding tile extent */
  142. if (x0 == 0 && x1 == 0) {
  143. state->xsize = im->xsize;
  144. state->ysize = im->ysize;
  145. } else {
  146. state->xoff = x0;
  147. state->yoff = y0;
  148. state->xsize = x1 - x0;
  149. state->ysize = y1 - y0;
  150. }
  151. if (state->xsize <= 0 ||
  152. state->xsize + state->xoff > (int) im->xsize ||
  153. state->ysize <= 0 ||
  154. state->ysize + state->yoff > (int) im->ysize) {
  155. PyErr_SetString(PyExc_ValueError, "tile cannot extend outside image");
  156. return NULL;
  157. }
  158. /* Allocate memory buffer (if bits field is set) */
  159. if (state->bits > 0) {
  160. if (!state->bytes) {
  161. if (state->xsize > ((INT_MAX / state->bits)-7)){
  162. return PyErr_NoMemory();
  163. }
  164. state->bytes = (state->bits * state->xsize+7)/8;
  165. }
  166. /* malloc check ok, overflow checked above */
  167. state->buffer = (UINT8*) malloc(state->bytes);
  168. if (!state->buffer)
  169. return PyErr_NoMemory();
  170. }
  171. /* Keep a reference to the image object, to make sure it doesn't
  172. go away before we do */
  173. Py_INCREF(op);
  174. Py_XDECREF(decoder->lock);
  175. decoder->lock = op;
  176. Py_INCREF(Py_None);
  177. return Py_None;
  178. }
  179. static PyObject*
  180. _setfd(ImagingDecoderObject* decoder, PyObject* args)
  181. {
  182. PyObject* fd;
  183. ImagingCodecState state;
  184. if (!PyArg_ParseTuple(args, "O", &fd))
  185. return NULL;
  186. state = &decoder->state;
  187. Py_XINCREF(fd);
  188. state->fd = fd;
  189. Py_INCREF(Py_None);
  190. return Py_None;
  191. }
  192. static PyObject *
  193. _get_pulls_fd(ImagingDecoderObject *decoder)
  194. {
  195. return PyBool_FromLong(decoder->pulls_fd);
  196. }
  197. static struct PyMethodDef methods[] = {
  198. {"decode", (PyCFunction)_decode, 1},
  199. {"cleanup", (PyCFunction)_decode_cleanup, 1},
  200. {"setimage", (PyCFunction)_setimage, 1},
  201. {"setfd", (PyCFunction)_setfd, 1},
  202. {NULL, NULL} /* sentinel */
  203. };
  204. static struct PyGetSetDef getseters[] = {
  205. {"pulls_fd", (getter)_get_pulls_fd, NULL,
  206. "True if this decoder expects to pull from self.fd itself.",
  207. NULL},
  208. {NULL, NULL, NULL, NULL, NULL} /* sentinel */
  209. };
  210. static PyTypeObject ImagingDecoderType = {
  211. PyVarObject_HEAD_INIT(NULL, 0)
  212. "ImagingDecoder", /*tp_name*/
  213. sizeof(ImagingDecoderObject), /*tp_size*/
  214. 0, /*tp_itemsize*/
  215. /* methods */
  216. (destructor)_dealloc, /*tp_dealloc*/
  217. 0, /*tp_print*/
  218. 0, /*tp_getattr*/
  219. 0, /*tp_setattr*/
  220. 0, /*tp_compare*/
  221. 0, /*tp_repr*/
  222. 0, /*tp_as_number */
  223. 0, /*tp_as_sequence */
  224. 0, /*tp_as_mapping */
  225. 0, /*tp_hash*/
  226. 0, /*tp_call*/
  227. 0, /*tp_str*/
  228. 0, /*tp_getattro*/
  229. 0, /*tp_setattro*/
  230. 0, /*tp_as_buffer*/
  231. Py_TPFLAGS_DEFAULT, /*tp_flags*/
  232. 0, /*tp_doc*/
  233. 0, /*tp_traverse*/
  234. 0, /*tp_clear*/
  235. 0, /*tp_richcompare*/
  236. 0, /*tp_weaklistoffset*/
  237. 0, /*tp_iter*/
  238. 0, /*tp_iternext*/
  239. methods, /*tp_methods*/
  240. 0, /*tp_members*/
  241. getseters, /*tp_getset*/
  242. };
  243. /* -------------------------------------------------------------------- */
  244. int
  245. get_unpacker(ImagingDecoderObject* decoder, const char* mode,
  246. const char* rawmode)
  247. {
  248. int bits;
  249. ImagingShuffler unpack;
  250. unpack = ImagingFindUnpacker(mode, rawmode, &bits);
  251. if (!unpack) {
  252. Py_DECREF(decoder);
  253. PyErr_SetString(PyExc_ValueError, "unknown raw mode");
  254. return -1;
  255. }
  256. decoder->state.shuffle = unpack;
  257. decoder->state.bits = bits;
  258. return 0;
  259. }
  260. /* -------------------------------------------------------------------- */
  261. /* BIT (packed fields) */
  262. /* -------------------------------------------------------------------- */
  263. PyObject*
  264. PyImaging_BitDecoderNew(PyObject* self, PyObject* args)
  265. {
  266. ImagingDecoderObject* decoder;
  267. char* mode;
  268. int bits = 8;
  269. int pad = 8;
  270. int fill = 0;
  271. int sign = 0;
  272. int ystep = 1;
  273. if (!PyArg_ParseTuple(args, "s|iiiii", &mode, &bits, &pad, &fill,
  274. &sign, &ystep))
  275. return NULL;
  276. if (strcmp(mode, "F") != 0) {
  277. PyErr_SetString(PyExc_ValueError, "bad image mode");
  278. return NULL;
  279. }
  280. decoder = PyImaging_DecoderNew(sizeof(BITSTATE));
  281. if (decoder == NULL)
  282. return NULL;
  283. decoder->decode = ImagingBitDecode;
  284. decoder->state.ystep = ystep;
  285. ((BITSTATE*)decoder->state.context)->bits = bits;
  286. ((BITSTATE*)decoder->state.context)->pad = pad;
  287. ((BITSTATE*)decoder->state.context)->fill = fill;
  288. ((BITSTATE*)decoder->state.context)->sign = sign;
  289. return (PyObject*) decoder;
  290. }
  291. /* -------------------------------------------------------------------- */
  292. /* BCn: GPU block-compressed texture formats */
  293. /* -------------------------------------------------------------------- */
  294. PyObject*
  295. PyImaging_BcnDecoderNew(PyObject* self, PyObject* args)
  296. {
  297. ImagingDecoderObject* decoder;
  298. char* mode;
  299. char* actual;
  300. int n = 0;
  301. int ystep = 1;
  302. if (!PyArg_ParseTuple(args, "s|ii", &mode, &n, &ystep))
  303. return NULL;
  304. switch (n) {
  305. case 1: /* BC1: 565 color, 1-bit alpha */
  306. case 2: /* BC2: 565 color, 4-bit alpha */
  307. case 3: /* BC3: 565 color, 2-endpoint 8-bit interpolated alpha */
  308. case 5: /* BC5: 2-channel 8-bit via 2 BC3 alpha blocks */
  309. case 7: /* BC7: 4-channel 8-bit via everything */
  310. actual = "RGBA"; break;
  311. case 4: /* BC4: 1-channel 8-bit via 1 BC3 alpha block */
  312. actual = "L"; break;
  313. case 6: /* BC6: 3-channel 16-bit float */
  314. /* TODO: support 4-channel floating point images */
  315. actual = "RGBAF"; break;
  316. default:
  317. PyErr_SetString(PyExc_ValueError, "block compression type unknown");
  318. return NULL;
  319. }
  320. if (strcmp(mode, actual) != 0) {
  321. PyErr_SetString(PyExc_ValueError, "bad image mode");
  322. return NULL;
  323. }
  324. decoder = PyImaging_DecoderNew(0);
  325. if (decoder == NULL)
  326. return NULL;
  327. decoder->decode = ImagingBcnDecode;
  328. decoder->state.state = n;
  329. decoder->state.ystep = ystep;
  330. return (PyObject*) decoder;
  331. }
  332. /* -------------------------------------------------------------------- */
  333. /* FLI */
  334. /* -------------------------------------------------------------------- */
  335. PyObject*
  336. PyImaging_FliDecoderNew(PyObject* self, PyObject* args)
  337. {
  338. ImagingDecoderObject* decoder;
  339. decoder = PyImaging_DecoderNew(0);
  340. if (decoder == NULL)
  341. return NULL;
  342. decoder->decode = ImagingFliDecode;
  343. return (PyObject*) decoder;
  344. }
  345. /* -------------------------------------------------------------------- */
  346. /* GIF */
  347. /* -------------------------------------------------------------------- */
  348. PyObject*
  349. PyImaging_GifDecoderNew(PyObject* self, PyObject* args)
  350. {
  351. ImagingDecoderObject* decoder;
  352. char* mode;
  353. int bits = 8;
  354. int interlace = 0;
  355. if (!PyArg_ParseTuple(args, "s|ii", &mode, &bits, &interlace))
  356. return NULL;
  357. if (strcmp(mode, "L") != 0 && strcmp(mode, "P") != 0) {
  358. PyErr_SetString(PyExc_ValueError, "bad image mode");
  359. return NULL;
  360. }
  361. decoder = PyImaging_DecoderNew(sizeof(GIFDECODERSTATE));
  362. if (decoder == NULL)
  363. return NULL;
  364. decoder->decode = ImagingGifDecode;
  365. ((GIFDECODERSTATE*)decoder->state.context)->bits = bits;
  366. ((GIFDECODERSTATE*)decoder->state.context)->interlace = interlace;
  367. return (PyObject*) decoder;
  368. }
  369. /* -------------------------------------------------------------------- */
  370. /* HEX */
  371. /* -------------------------------------------------------------------- */
  372. PyObject*
  373. PyImaging_HexDecoderNew(PyObject* self, PyObject* args)
  374. {
  375. ImagingDecoderObject* decoder;
  376. char* mode;
  377. char* rawmode;
  378. if (!PyArg_ParseTuple(args, "ss", &mode, &rawmode))
  379. return NULL;
  380. decoder = PyImaging_DecoderNew(0);
  381. if (decoder == NULL)
  382. return NULL;
  383. if (get_unpacker(decoder, mode, rawmode) < 0)
  384. return NULL;
  385. decoder->decode = ImagingHexDecode;
  386. return (PyObject*) decoder;
  387. }
  388. /* -------------------------------------------------------------------- */
  389. /* LibTiff */
  390. /* -------------------------------------------------------------------- */
  391. #ifdef HAVE_LIBTIFF
  392. #include "TiffDecode.h"
  393. #include <string.h>
  394. PyObject*
  395. PyImaging_LibTiffDecoderNew(PyObject* self, PyObject* args)
  396. {
  397. ImagingDecoderObject* decoder;
  398. char* mode;
  399. char* rawmode;
  400. char* compname;
  401. int fp;
  402. uint32 ifdoffset;
  403. if (! PyArg_ParseTuple(args, "sssiI", &mode, &rawmode, &compname, &fp, &ifdoffset))
  404. return NULL;
  405. TRACE(("new tiff decoder %s\n", compname));
  406. decoder = PyImaging_DecoderNew(sizeof(TIFFSTATE));
  407. if (decoder == NULL)
  408. return NULL;
  409. if (get_unpacker(decoder, mode, rawmode) < 0)
  410. return NULL;
  411. if (! ImagingLibTiffInit(&decoder->state, fp, ifdoffset)) {
  412. Py_DECREF(decoder);
  413. PyErr_SetString(PyExc_RuntimeError, "tiff codec initialization failed");
  414. return NULL;
  415. }
  416. decoder->decode = ImagingLibTiffDecode;
  417. return (PyObject*) decoder;
  418. }
  419. #endif
  420. /* -------------------------------------------------------------------- */
  421. /* PackBits */
  422. /* -------------------------------------------------------------------- */
  423. PyObject*
  424. PyImaging_PackbitsDecoderNew(PyObject* self, PyObject* args)
  425. {
  426. ImagingDecoderObject* decoder;
  427. char* mode;
  428. char* rawmode;
  429. if (!PyArg_ParseTuple(args, "ss", &mode, &rawmode))
  430. return NULL;
  431. decoder = PyImaging_DecoderNew(0);
  432. if (decoder == NULL)
  433. return NULL;
  434. if (get_unpacker(decoder, mode, rawmode) < 0)
  435. return NULL;
  436. decoder->decode = ImagingPackbitsDecode;
  437. return (PyObject*) decoder;
  438. }
  439. /* -------------------------------------------------------------------- */
  440. /* PCD */
  441. /* -------------------------------------------------------------------- */
  442. PyObject*
  443. PyImaging_PcdDecoderNew(PyObject* self, PyObject* args)
  444. {
  445. ImagingDecoderObject* decoder;
  446. decoder = PyImaging_DecoderNew(0);
  447. if (decoder == NULL)
  448. return NULL;
  449. /* Unpack from PhotoYCC to RGB */
  450. if (get_unpacker(decoder, "RGB", "YCC;P") < 0)
  451. return NULL;
  452. decoder->decode = ImagingPcdDecode;
  453. return (PyObject*) decoder;
  454. }
  455. /* -------------------------------------------------------------------- */
  456. /* PCX */
  457. /* -------------------------------------------------------------------- */
  458. PyObject*
  459. PyImaging_PcxDecoderNew(PyObject* self, PyObject* args)
  460. {
  461. ImagingDecoderObject* decoder;
  462. char* mode;
  463. char* rawmode;
  464. int stride;
  465. if (!PyArg_ParseTuple(args, "ssi", &mode, &rawmode, &stride))
  466. return NULL;
  467. decoder = PyImaging_DecoderNew(0);
  468. if (decoder == NULL)
  469. return NULL;
  470. if (get_unpacker(decoder, mode, rawmode) < 0)
  471. return NULL;
  472. decoder->state.bytes = stride;
  473. decoder->decode = ImagingPcxDecode;
  474. return (PyObject*) decoder;
  475. }
  476. /* -------------------------------------------------------------------- */
  477. /* RAW */
  478. /* -------------------------------------------------------------------- */
  479. PyObject*
  480. PyImaging_RawDecoderNew(PyObject* self, PyObject* args)
  481. {
  482. ImagingDecoderObject* decoder;
  483. char* mode;
  484. char* rawmode;
  485. int stride = 0;
  486. int ystep = 1;
  487. if (!PyArg_ParseTuple(args, "ss|ii", &mode, &rawmode, &stride, &ystep))
  488. return NULL;
  489. decoder = PyImaging_DecoderNew(sizeof(RAWSTATE));
  490. if (decoder == NULL)
  491. return NULL;
  492. if (get_unpacker(decoder, mode, rawmode) < 0)
  493. return NULL;
  494. decoder->decode = ImagingRawDecode;
  495. decoder->state.ystep = ystep;
  496. ((RAWSTATE*)decoder->state.context)->stride = stride;
  497. return (PyObject*) decoder;
  498. }
  499. /* -------------------------------------------------------------------- */
  500. /* SGI RLE */
  501. /* -------------------------------------------------------------------- */
  502. PyObject*
  503. PyImaging_SgiRleDecoderNew(PyObject* self, PyObject* args)
  504. {
  505. ImagingDecoderObject* decoder;
  506. char* mode;
  507. char* rawmode;
  508. int ystep = 1;
  509. int bpc = 1;
  510. if (!PyArg_ParseTuple(args, "ss|ii", &mode, &rawmode, &ystep, &bpc))
  511. return NULL;
  512. decoder = PyImaging_DecoderNew(sizeof(SGISTATE));
  513. if (decoder == NULL)
  514. return NULL;
  515. if (get_unpacker(decoder, mode, rawmode) < 0)
  516. return NULL;
  517. decoder->pulls_fd = 1;
  518. decoder->decode = ImagingSgiRleDecode;
  519. decoder->state.ystep = ystep;
  520. ((SGISTATE*)decoder->state.context)->bpc = bpc;
  521. return (PyObject*) decoder;
  522. }
  523. /* -------------------------------------------------------------------- */
  524. /* SUN RLE */
  525. /* -------------------------------------------------------------------- */
  526. PyObject*
  527. PyImaging_SunRleDecoderNew(PyObject* self, PyObject* args)
  528. {
  529. ImagingDecoderObject* decoder;
  530. char* mode;
  531. char* rawmode;
  532. if (!PyArg_ParseTuple(args, "ss", &mode, &rawmode))
  533. return NULL;
  534. decoder = PyImaging_DecoderNew(0);
  535. if (decoder == NULL)
  536. return NULL;
  537. if (get_unpacker(decoder, mode, rawmode) < 0)
  538. return NULL;
  539. decoder->decode = ImagingSunRleDecode;
  540. return (PyObject*) decoder;
  541. }
  542. /* -------------------------------------------------------------------- */
  543. /* TGA RLE */
  544. /* -------------------------------------------------------------------- */
  545. PyObject*
  546. PyImaging_TgaRleDecoderNew(PyObject* self, PyObject* args)
  547. {
  548. ImagingDecoderObject* decoder;
  549. char* mode;
  550. char* rawmode;
  551. int ystep = 1;
  552. int depth = 8;
  553. if (!PyArg_ParseTuple(args, "ss|ii", &mode, &rawmode, &ystep, &depth))
  554. return NULL;
  555. decoder = PyImaging_DecoderNew(0);
  556. if (decoder == NULL)
  557. return NULL;
  558. if (get_unpacker(decoder, mode, rawmode) < 0)
  559. return NULL;
  560. decoder->decode = ImagingTgaRleDecode;
  561. decoder->state.ystep = ystep;
  562. decoder->state.count = depth / 8;
  563. return (PyObject*) decoder;
  564. }
  565. /* -------------------------------------------------------------------- */
  566. /* XBM */
  567. /* -------------------------------------------------------------------- */
  568. PyObject*
  569. PyImaging_XbmDecoderNew(PyObject* self, PyObject* args)
  570. {
  571. ImagingDecoderObject* decoder;
  572. decoder = PyImaging_DecoderNew(0);
  573. if (decoder == NULL)
  574. return NULL;
  575. if (get_unpacker(decoder, "1", "1;R") < 0)
  576. return NULL;
  577. decoder->decode = ImagingXbmDecode;
  578. return (PyObject*) decoder;
  579. }
  580. /* -------------------------------------------------------------------- */
  581. /* ZIP */
  582. /* -------------------------------------------------------------------- */
  583. #ifdef HAVE_LIBZ
  584. #include "Zip.h"
  585. PyObject*
  586. PyImaging_ZipDecoderNew(PyObject* self, PyObject* args)
  587. {
  588. ImagingDecoderObject* decoder;
  589. char* mode;
  590. char* rawmode;
  591. int interlaced = 0;
  592. if (!PyArg_ParseTuple(args, "ss|i", &mode, &rawmode, &interlaced))
  593. return NULL;
  594. decoder = PyImaging_DecoderNew(sizeof(ZIPSTATE));
  595. if (decoder == NULL)
  596. return NULL;
  597. if (get_unpacker(decoder, mode, rawmode) < 0)
  598. return NULL;
  599. decoder->decode = ImagingZipDecode;
  600. decoder->cleanup = ImagingZipDecodeCleanup;
  601. ((ZIPSTATE*)decoder->state.context)->interlaced = interlaced;
  602. return (PyObject*) decoder;
  603. }
  604. #endif
  605. /* -------------------------------------------------------------------- */
  606. /* JPEG */
  607. /* -------------------------------------------------------------------- */
  608. #ifdef HAVE_LIBJPEG
  609. /* We better define this decoder last in this file, so the following
  610. undef's won't mess things up for the Imaging library proper. */
  611. #undef HAVE_PROTOTYPES
  612. #undef HAVE_STDDEF_H
  613. #undef HAVE_STDLIB_H
  614. #undef UINT8
  615. #undef UINT16
  616. #undef UINT32
  617. #undef INT8
  618. #undef INT16
  619. #undef INT32
  620. #include "Jpeg.h"
  621. PyObject*
  622. PyImaging_JpegDecoderNew(PyObject* self, PyObject* args)
  623. {
  624. ImagingDecoderObject* decoder;
  625. char* mode;
  626. char* rawmode; /* what we want from the decoder */
  627. char* jpegmode; /* what's in the file */
  628. int scale = 1;
  629. int draft = 0;
  630. if (!PyArg_ParseTuple(args, "ssz|ii", &mode, &rawmode, &jpegmode,
  631. &scale, &draft))
  632. return NULL;
  633. if (!jpegmode)
  634. jpegmode = "";
  635. decoder = PyImaging_DecoderNew(sizeof(JPEGSTATE));
  636. if (decoder == NULL)
  637. return NULL;
  638. // libjpeg-turbo supports different output formats.
  639. // We are choosing Pillow's native format (3 color bytes + 1 padding)
  640. // to avoid extra conversion in Unpack.c.
  641. if (ImagingJpegUseJCSExtensions() && strcmp(rawmode, "RGB") == 0) {
  642. rawmode = "RGBX";
  643. }
  644. if (get_unpacker(decoder, mode, rawmode) < 0)
  645. return NULL;
  646. decoder->decode = ImagingJpegDecode;
  647. decoder->cleanup = ImagingJpegDecodeCleanup;
  648. strncpy(((JPEGSTATE*)decoder->state.context)->rawmode, rawmode, 8);
  649. strncpy(((JPEGSTATE*)decoder->state.context)->jpegmode, jpegmode, 8);
  650. ((JPEGSTATE*)decoder->state.context)->scale = scale;
  651. ((JPEGSTATE*)decoder->state.context)->draft = draft;
  652. return (PyObject*) decoder;
  653. }
  654. #endif
  655. /* -------------------------------------------------------------------- */
  656. /* JPEG 2000 */
  657. /* -------------------------------------------------------------------- */
  658. #ifdef HAVE_OPENJPEG
  659. #include "Jpeg2K.h"
  660. PyObject*
  661. PyImaging_Jpeg2KDecoderNew(PyObject* self, PyObject* args)
  662. {
  663. ImagingDecoderObject* decoder;
  664. JPEG2KDECODESTATE *context;
  665. char* mode;
  666. char* format;
  667. OPJ_CODEC_FORMAT codec_format;
  668. int reduce = 0;
  669. int layers = 0;
  670. int fd = -1;
  671. PY_LONG_LONG length = -1;
  672. if (!PyArg_ParseTuple(args, "ss|iiiL", &mode, &format,
  673. &reduce, &layers, &fd, &length))
  674. return NULL;
  675. if (strcmp(format, "j2k") == 0)
  676. codec_format = OPJ_CODEC_J2K;
  677. else if (strcmp(format, "jpt") == 0)
  678. codec_format = OPJ_CODEC_JPT;
  679. else if (strcmp(format, "jp2") == 0)
  680. codec_format = OPJ_CODEC_JP2;
  681. else
  682. return NULL;
  683. decoder = PyImaging_DecoderNew(sizeof(JPEG2KDECODESTATE));
  684. if (decoder == NULL)
  685. return NULL;
  686. decoder->pulls_fd = 1;
  687. decoder->decode = ImagingJpeg2KDecode;
  688. decoder->cleanup = ImagingJpeg2KDecodeCleanup;
  689. context = (JPEG2KDECODESTATE *)decoder->state.context;
  690. context->fd = fd;
  691. context->length = (off_t)length;
  692. context->format = codec_format;
  693. context->reduce = reduce;
  694. context->layers = layers;
  695. return (PyObject*) decoder;
  696. }
  697. #endif /* HAVE_OPENJPEG */