1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /*
- * 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;
- }
- }
|