1c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
29aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
39aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikgif_lib.h - service library for decoding and encoding GIF images
49aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
59aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik*****************************************************************************/
6c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
7c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#ifndef _GIF_LIB_H_
8c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define _GIF_LIB_H_ 1
9c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
10c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#ifdef __cplusplus
11c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projectextern "C" {
12c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#endif /* __cplusplus */
13c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
149aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define GIFLIB_MAJOR 5
15e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett#define GIFLIB_MINOR 1
1635418eae036ff745837b1098ab8d4c606ea577d5Leon Scroggins III#define GIFLIB_RELEASE 4
17c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
18c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define GIF_ERROR   0
19c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define GIF_OK      1
20c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
21e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett#include <stddef.h>
229aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#include <stdbool.h>
23c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
24c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define GIF_STAMP "GIFVER"          /* First chars in file - GIF stamp.  */
25c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1
26c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define GIF_VERSION_POS 3           /* Version first character in stamp. */
27c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define GIF87_STAMP "GIF87a"        /* First chars in file - GIF stamp.  */
28c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define GIF89_STAMP "GIF89a"        /* First chars in file - GIF stamp.  */
29c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
30c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef unsigned char GifPixelType;
31c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef unsigned char *GifRowType;
32c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef unsigned char GifByteType;
339aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craiktypedef unsigned int GifPrefixType;
349aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craiktypedef int GifWord;
35c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
36c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef struct GifColorType {
37c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    GifByteType Red, Green, Blue;
38c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project} GifColorType;
39c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
40c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef struct ColorMapObject {
41c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    int ColorCount;
42c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    int BitsPerPixel;
439aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    bool SortFlag;
44c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    GifColorType *Colors;    /* on malloc(3) heap */
45c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project} ColorMapObject;
46c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
47c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef struct GifImageDesc {
489aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifWord Left, Top, Width, Height;   /* Current image dimensions. */
499aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    bool Interlace;                     /* Sequential/Interlaced lines. */
509aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    ColorMapObject *ColorMap;           /* The local color map */
51c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project} GifImageDesc;
52c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
539aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craiktypedef struct ExtensionBlock {
549aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int ByteCount;
559aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifByteType *Bytes; /* on malloc(3) heap */
569aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int Function;       /* The block function code */
579aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define CONTINUE_EXT_FUNC_CODE    0x00    /* continuation subblock */
589aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define COMMENT_EXT_FUNC_CODE     0xfe    /* comment */
599aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define GRAPHICS_EXT_FUNC_CODE    0xf9    /* graphics control (GIF89) */
609aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define PLAINTEXT_EXT_FUNC_CODE   0x01    /* plaintext */
619aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define APPLICATION_EXT_FUNC_CODE 0xff    /* application block */
629aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik} ExtensionBlock;
639aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
649aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craiktypedef struct SavedImage {
659aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifImageDesc ImageDesc;
669aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifByteType *RasterBits;         /* on malloc(3) heap */
679aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int ExtensionBlockCount;         /* Count of extensions before image */
689aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    ExtensionBlock *ExtensionBlocks; /* Extensions before image */
699aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik} SavedImage;
709aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
71c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef struct GifFileType {
729aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifWord SWidth, SHeight;         /* Size of virtual canvas */
739aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifWord SColorResolution;        /* How many colors can we generate? */
749aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifWord SBackGroundColor;        /* Background color for virtual canvas */
759aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifByteType AspectByte;	     /* Used to compute pixel aspect ratio */
769aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    ColorMapObject *SColorMap;       /* Global colormap, NULL if nonexistent. */
779aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int ImageCount;                  /* Number of current image (both APIs) */
789aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    GifImageDesc Image;              /* Current image (low-level API) */
799aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    SavedImage *SavedImages;         /* Image sequence (high-level API) */
809aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int ExtensionBlockCount;         /* Count extensions past last image */
819aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    ExtensionBlock *ExtensionBlocks; /* Extensions past last image */
829aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int Error;			     /* Last error condition reported */
839aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    void *UserData;                  /* hook to attach user data (TVT) */
849aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    void *Private;                   /* Don't mess with this! */
85c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project} GifFileType;
86c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
879aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define GIF_ASPECT_RATIO(n)	((n)+15.0/64.0)
889aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
89c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef enum {
90c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    UNDEFINED_RECORD_TYPE,
91c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    SCREEN_DESC_RECORD_TYPE,
92c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    IMAGE_DESC_RECORD_TYPE, /* Begin with ',' */
93c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    EXTENSION_RECORD_TYPE,  /* Begin with '!' */
94c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project    TERMINATE_RECORD_TYPE   /* Begin with ';' */
95c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project} GifRecordType;
96c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
97c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/* func type to read gif data from arbitrary sources (TVT) */
98c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef int (*InputFunc) (GifFileType *, GifByteType *, int);
99c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
1009aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/* func type to write gif data to arbitrary targets.
101c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project * Returns count of bytes written. (MRB)
102c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project */
103c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projecttypedef int (*OutputFunc) (GifFileType *, const GifByteType *, int);
104c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
105c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
1069aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik GIF89 structures
107c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project******************************************************************************/
108c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
1099aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craiktypedef struct GraphicsControlBlock {
1109aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int DisposalMode;
1119aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define DISPOSAL_UNSPECIFIED      0       /* No disposal specified. */
1129aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define DISPOSE_DO_NOT            1       /* Leave image in place */
1139aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define DISPOSE_BACKGROUND        2       /* Set area too background color */
1149aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define DISPOSE_PREVIOUS          3       /* Restore to previous content */
1159aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    bool UserInputFlag;      /* User confirmation required before disposal */
1169aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int DelayTime;           /* pre-display delay in 0.01sec units */
1179aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik    int TransparentColor;    /* Palette index for transparency, -1 if none */
1189aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik#define NO_TRANSPARENT_COLOR	-1
1199aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik} GraphicsControlBlock;
120c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
121c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
1229aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik GIF encoding routines
123c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project******************************************************************************/
124c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
1259aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/* Main entry points */
126c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source ProjectGifFileType *EGifOpenFileName(const char *GifFileName,
1279aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                              const bool GifTestExistence, int *Error);
1289aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris CraikGifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error);
1299aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris CraikGifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error);
130c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projectint EGifSpew(GifFileType * GifFile);
131e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettconst char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */
132e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettint EGifCloseFile(GifFileType *GifFile, int *ErrorCode);
133c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
134e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett#define E_GIF_SUCCEEDED          0
135c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_OPEN_FAILED    1    /* And EGif possible errors. */
136c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_WRITE_FAILED   2
137c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_HAS_SCRN_DSCR  3
138c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_HAS_IMAG_DSCR  4
139c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_NO_COLOR_MAP   5
140c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_DATA_TOO_BIG   6
141c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_NOT_ENOUGH_MEM 7
142c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_DISK_IS_FULL   8
143c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_CLOSE_FAILED   9
144c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define E_GIF_ERR_NOT_WRITEABLE  10
145c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
1469aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/* These are legacy.  You probably do not want to call them directly */
1479aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutScreenDesc(GifFileType *GifFile,
1489aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                      const int GifWidth, const int GifHeight,
1499aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik		      const int GifColorRes,
1509aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                      const int GifBackGround,
1519aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                      const ColorMapObject *GifColorMap);
1529aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutImageDesc(GifFileType *GifFile,
1539aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik		     const int GifLeft, const int GifTop,
1549aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                     const int GifWidth, const int GifHeight,
1559aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik		     const bool GifInterlace,
1569aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                     const ColorMapObject *GifColorMap);
1579aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikvoid EGifSetGifVersion(GifFileType *GifFile, const bool gif89);
1589aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine,
1599aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                int GifLineLen);
1609aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel);
1619aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutComment(GifFileType *GifFile, const char *GifComment);
1629aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode);
1639aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutExtensionBlock(GifFileType *GifFile,
1649aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                         const int GifExtLen, const void *GifExtension);
1659aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutExtensionTrailer(GifFileType *GifFile);
1669aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutExtension(GifFileType *GifFile, const int GifExtCode,
1679aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik		     const int GifExtLen,
1689aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                     const void *GifExtension);
1699aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutCode(GifFileType *GifFile, int GifCodeSize,
1709aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                const GifByteType *GifCodeBlock);
1719aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifPutCodeNext(GifFileType *GifFile,
1729aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                    const GifByteType *GifCodeBlock);
1739aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
174c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
1759aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik GIF decoding routines
1769aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik******************************************************************************/
1779aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
1789aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/* Main entry points */
1799aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris CraikGifFileType *DGifOpenFileName(const char *GifFileName, int *Error);
1809aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris CraikGifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error);
181c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Projectint DGifSlurp(GifFileType * GifFile);
1829aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris CraikGifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error);    /* new one (TVT) */
183e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett    int DGifCloseFile(GifFileType * GifFile, int *ErrorCode);
184c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
185e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett#define D_GIF_SUCCEEDED          0
186c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_OPEN_FAILED    101    /* And DGif possible errors. */
187c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_READ_FAILED    102
188c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_NOT_GIF_FILE   103
189c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_NO_SCRN_DSCR   104
190c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_NO_IMAG_DSCR   105
191c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_NO_COLOR_MAP   106
192c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_WRONG_RECORD   107
193c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_DATA_TOO_BIG   108
194c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_NOT_ENOUGH_MEM 109
195c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_CLOSE_FAILED   110
196c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_NOT_READABLE   111
197c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_IMAGE_DEFECT   112
198c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#define D_GIF_ERR_EOF_TOO_SOON   113
199c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
2009aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/* These are legacy.  You probably do not want to call them directly */
2019aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetScreenDesc(GifFileType *GifFile);
2029aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType);
2039aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetImageDesc(GifFileType *GifFile);
2049aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
2059aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel);
2069aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetComment(GifFileType *GifFile, char *GifComment);
2079aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetExtension(GifFileType *GifFile, int *GifExtCode,
2089aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                     GifByteType **GifExtension);
2099aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension);
2109aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetCode(GifFileType *GifFile, int *GifCodeSize,
2119aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                GifByteType **GifCodeBlock);
2129aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock);
2139aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifGetLZCodes(GifFileType *GifFile, int *GifCode);
2149aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
2159aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
216c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
2179aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik Color table quantization (deprecated)
218c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project******************************************************************************/
2199aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint GifQuantizeBuffer(unsigned int Width, unsigned int Height,
220c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project                   int *ColorMapSize, GifByteType * RedInput,
221c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project                   GifByteType * GreenInput, GifByteType * BlueInput,
222c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project                   GifByteType * OutputBuffer,
223c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project                   GifColorType * OutputColorMap);
224c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
225c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
2269aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik Error handling and reporting.
227c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project******************************************************************************/
228e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettextern const char *GifErrorString(int ErrorCode);     /* new in 2012 - ESR */
229c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
2309aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/*****************************************************************************
2319aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik Everything below this point is new after version 1.2, supporting `slurp
2329aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik mode' for doing I/O in two big belts with all the image-bashing in core.
233c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project******************************************************************************/
234c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
235c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
2369aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik Color map handling from gif_alloc.c
237c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project******************************************************************************/
238c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
2399aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern ColorMapObject *GifMakeMapObject(int ColorCount,
2409aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                                     const GifColorType *ColorMap);
2419aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern void GifFreeMapObject(ColorMapObject *Object);
2429aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1,
2439aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                                     const ColorMapObject *ColorIn2,
244c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project                                     GifPixelType ColorTransIn2[]);
2459aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern int GifBitSize(int n);
246c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
24735418eae036ff745837b1098ab8d4c606ea577d5Leon Scroggins IIIextern void *
24835418eae036ff745837b1098ab8d4c606ea577d5Leon Scroggins IIIreallocarray(void *optr, size_t nmemb, size_t size);
24935418eae036ff745837b1098ab8d4c606ea577d5Leon Scroggins III
250c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project/******************************************************************************
2519aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik Support for the in-core structures allocation (slurp mode).
2529aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik******************************************************************************/
253c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
2549aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]);
2559aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern int GifAddExtensionBlock(int *ExtensionBlock_Count,
2569aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik				ExtensionBlock **ExtensionBlocks,
2579aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik				int Function,
2589aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik				unsigned int Len, unsigned char ExtData[]);
2599aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern void GifFreeExtensions(int *ExtensionBlock_Count,
2609aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik			      ExtensionBlock **ExtensionBlocks);
2619aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern SavedImage *GifMakeSavedImage(GifFileType *GifFile,
2629aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik                                  const SavedImage *CopyFrom);
2639aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikextern void GifFreeSavedImages(GifFileType *GifFile);
264c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
2659aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/******************************************************************************
2669aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik 5.x functions for GIF89 graphics control blocks
2679aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik******************************************************************************/
268c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
2699aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifExtensionToGCB(const size_t GifExtensionLength,
2709aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik		       const GifByteType *GifExtension,
2719aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik		       GraphicsControlBlock *GCB);
2729aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craiksize_t EGifGCBToExtension(const GraphicsControlBlock *GCB,
2739aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik		       GifByteType *GifExtension);
274c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
2759aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint DGifSavedExtensionToGCB(GifFileType *GifFile,
2769aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik			    int ImageIndex,
2779aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik			    GraphicsControlBlock *GCB);
2789aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craikint EGifGCBToSavedExtension(const GraphicsControlBlock *GCB,
2799aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik			    GifFileType *GifFile,
2809aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik			    int ImageIndex);
281c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project
282e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett/******************************************************************************
283e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett The library's internal utility font
284e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett******************************************************************************/
285e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett
286e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett#define GIF_FONT_WIDTH  8
287e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett#define GIF_FONT_HEIGHT 8
288e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettextern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH];
289e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett
290e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettextern void GifDrawText8x8(SavedImage *Image,
291e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                     const int x, const int y,
292e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                     const char *legend, const int color);
293e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett
294e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettextern void GifDrawBox(SavedImage *Image,
295e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                    const int x, const int y,
296e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                    const int w, const int d, const int color);
297e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett
298e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettextern void GifDrawRectangle(SavedImage *Image,
299e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                   const int x, const int y,
300e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                   const int w, const int d, const int color);
301e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett
302e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarettextern void GifDrawBoxedText8x8(SavedImage *Image,
303e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                          const int x, const int y,
304e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                          const char *legend,
305e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett                          const int border, const int bg, const int fg);
306e189ac98c1d4e339fd0327aae046f908e22fa1bcMatt Sarett
307c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#ifdef __cplusplus
308c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project}
309c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#endif /* __cplusplus */
310c2eacaec90baee57fdbbdbad935d161638894ee7The Android Open Source Project#endif /* _GIF_LIB_H */
3119aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik
3129aef3ea079a57c98a9207f8c3b95a5dc08ee74b5Chris Craik/* end */
313