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