123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /*
- * The Python Imaging Library.
- * $Id$
- *
- * decoder for uncompressed PCD image data.
- *
- * history:
- * 96-05-10 fl Created
- * 96-05-18 fl New tables
- * 97-01-25 fl Use PhotoYCC unpacker
- *
- * notes:
- * This driver supports uncompressed PCD modes only
- * (resolutions up to 768x512).
- *
- * Copyright (c) Fredrik Lundh 1996-97.
- * Copyright (c) Secret Labs AB 1997.
- *
- * See the README file for information on usage and redistribution.
- */
- #include "Imaging.h"
- int
- ImagingPcdDecode(Imaging im, ImagingCodecState state, UINT8* buf, Py_ssize_t bytes)
- {
- int x;
- int chunk;
- UINT8* out;
- UINT8* ptr;
- ptr = buf;
- chunk = 3 * state->xsize;
- for (;;) {
- /* We need data for two full lines before we can do anything */
- if (bytes < chunk)
- return ptr - buf;
- /* Unpack first line */
- out = state->buffer;
- for (x = 0; x < state->xsize; x++) {
- out[0] = ptr[x];
- out[1] = ptr[(x+4*state->xsize)/2];
- out[2] = ptr[(x+5*state->xsize)/2];
- out += 3;
- }
- state->shuffle((UINT8*) im->image[state->y],
- state->buffer, state->xsize);
- if (++state->y >= state->ysize)
- return -1; /* This can hardly happen */
- /* Unpack second line */
- out = state->buffer;
- for (x = 0; x < state->xsize; x++) {
- out[0] = ptr[x+state->xsize];
- out[1] = ptr[(x+4*state->xsize)/2];
- out[2] = ptr[(x+5*state->xsize)/2];
- out += 3;
- }
- state->shuffle((UINT8*) im->image[state->y],
- state->buffer, state->xsize);
- if (++state->y >= state->ysize)
- return -1;
- ptr += chunk;
- bytes -= chunk;
- }
- }
|