123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /*
- * The Python Imaging Library.
- * $Id$
- *
- * Declarations for a fast, suspendable GIF decoder.
- *
- * Copyright (c) Fredrik Lundh 1995-96.
- */
- /* Max size for a LZW code word. */
- #define GIFBITS 12
- #define GIFTABLE (1<<GIFBITS)
- #define GIFBUFFER (1<<GIFBITS)
- typedef struct {
- /* CONFIGURATION */
- /* Initial number of bits. The caller should clear all fields in
- this structure and set this field before calling the decoder
- the first time. */
- int bits;
- /* If set, this is an interlaced image. Process it the following way:
- * 1st pass: start at top line, lines are 8 pixels high, step 8 pixels
- * 2nd pass: start at line 4, lines are 4 pixels high, step 8 pixels
- * 3rd pass: start at line 2, lines are 2 pixels high, step 4 pixels
- * 4th pass: start at line 1, lines are 1 pixels high, step 2 pixels
- */
- int interlace;
- /* PRIVATE CONTEXT (set by decoder) */
- /* Interlace parameters */
- int step, repeat;
- /* Input bit buffer */
- INT32 bitbuffer;
- int bitcount;
- int blocksize;
- /* Code buffer */
- int codesize;
- int codemask;
- /* Constant symbol codes */
- int clear, end;
- /* Symbol history */
- int lastcode;
- unsigned char lastdata;
- /* History buffer */
- int bufferindex;
- unsigned char buffer[GIFTABLE];
- /* Symbol table */
- UINT16 link[GIFTABLE];
- unsigned char data[GIFTABLE];
- int next;
- } GIFDECODERSTATE;
- typedef struct GIFENCODERBLOCK_T
- {
- struct GIFENCODERBLOCK_T *next;
- int size;
- UINT8 data[255];
- } GIFENCODERBLOCK;
- typedef struct {
- /* CONFIGURATION */
- /* Initial number of bits. The caller should clear all fields in
- this structure and set this field before calling the encoder
- the first time. */
- int bits;
- /* NOTE: the expanding encoder ignores this field */
- /* If set, write an interlaced image (see above) */
- int interlace;
- /* PRIVATE CONTEXT (set by encoder) */
- /* Interlace parameters */
- int step, repeat;
- /* Output bit buffer */
- INT32 bitbuffer;
- int bitcount;
- /* Output buffer list (linked list) */
- GIFENCODERBLOCK* block; /* current block */
- GIFENCODERBLOCK* flush; /* output queue */
- GIFENCODERBLOCK* free; /* if not null, use this */
- /* Fields used for run-length encoding */
- int first; /* true if we haven't read the first pixel */
- int last; /* last byte value seen */
- int count; /* how many bytes with that value we've seen */
- int lastcode;
- } GIFENCODERSTATE;
|