Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Imaging/libImaging/Gif.h
diff options
context:
space:
mode:
Diffstat (limited to 'Imaging/libImaging/Gif.h')
-rw-r--r--Imaging/libImaging/Gif.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/Imaging/libImaging/Gif.h b/Imaging/libImaging/Gif.h
new file mode 100644
index 0000000..8957c39
--- /dev/null
+++ b/Imaging/libImaging/Gif.h
@@ -0,0 +1,109 @@
+/*
+ * The Python Imaging Library.
+ * $Id: Gif.h 2134 2004-10-06 08:55:20Z fredrik $
+ *
+ * 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 */
+ unsigned INT16 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;