81 #define LZ_MAX_CODE 4095 84 #define NO_SUCH_CODE 4098 107 #define READ(_gif,_buf,_len) \ 108 ((GifFilePrivateType*)_gif->Private)->Read(_gif,_buf,_len) 131 for (
i = 1;
i <= 8;
i++)
153 if (ColorCount != (1 <<
BitSize(ColorCount))) {
168 Object->ColorCount = ColorCount;
199 const unsigned char ExtData[]) {
203 if (
New->ExtensionBlocks ==
NULL)
208 (
New->ExtensionBlockCount + 1));
210 if (
New->ExtensionBlocks ==
NULL)
213 ep = &
New->ExtensionBlocks[
New->ExtensionBlockCount++];
236 const unsigned char ExtData[])
240 if (
New->ExtensionBlocks ==
NULL)
243 ep = &
New->ExtensionBlocks[
New->ExtensionBlockCount - 1];
287 sp < GifFile->SavedImages + GifFile->
ImageCount;
sp++) {
288 if (
sp->ImageDesc.ColorMap) {
290 sp->ImageDesc.ColorMap =
NULL;
295 if (
sp->Extensions.ExtensionBlocks)
309 int i, BitsPerPixel, SortFlag;
317 if (
READ(GifFile, Buf, 3) != 3) {
321 SortFlag = (Buf[0] & 0x08) != 0;
322 BitsPerPixel = (Buf[0] & 0x07) + 1;
335 if (
READ(GifFile, Buf, 3) != 3) {
360 if (
READ(GifFile, &Buf, 1) != 1) {
392 int i, BitsPerPixel, SortFlag;
402 if (
READ(GifFile, Buf, 1) != 1) {
405 BitsPerPixel = (Buf[0] & 0x07) + 1;
406 SortFlag = (Buf[0] & 0x20) != 0;
420 if (
READ(GifFile, Buf, 3) != 3) {
447 sp->ImageDesc = GifFile->
Image;
452 if (
sp->ImageDesc.ColorMap ==
NULL) {
458 sp->Extensions.ExtensionBlockCount = 0;
459 sp->Extensions.ExtensionBlocks =
NULL;
485 if ((Private->
PixelCount -= LineLen) > 0xffff0000UL) {
497 WARN(
"GIF is not properly terminated\n");
500 while (Dummy !=
NULL) ;
521 if (
READ(GifFile, &Buf, 1) != 1) {
541 if (
READ(GifFile, &Buf, 1) != 1) {
546 (*Extension)[0] = Buf;
565 if (
READ(GifFile,
c, 2) != 2) {
569 *Word = (((
unsigned int)
c[1]) << 8) +
c[0];
585 if (
READ(GifFile, &Buf, 1) != 1) {
590 *CodeBlock = Private->
Buf;
591 (*CodeBlock)[0] = Buf;
592 if (
READ(GifFile, &((*CodeBlock)[1]), Buf) != Buf) {
615 READ(GifFile, &CodeSize, 1);
616 BitsPerPixel = CodeSize;
620 Private->
ClearCode = (1 << BitsPerPixel);
649 int j, CrntCode, EOFCode, ClearCode, CrntPrefix, LastCode, StackPtr;
657 Stack = Private->
Stack;
664 while (StackPtr != 0 &&
i < LineLen)
665 Line[
i++] = Stack[--StackPtr];
668 while (
i < LineLen) {
672 if (CrntCode == EOFCode) {
676 if (
i != LineLen - 1 || Private->
PixelCount != 0) {
680 }
else if (CrntCode == ClearCode) {
692 if (CrntCode < ClearCode) {
694 Line[
i++] = CrntCode;
706 CrntPrefix = LastCode;
715 CrntPrefix = CrntCode;
724 CrntPrefix > ClearCode && CrntPrefix <=
LZ_MAX_CODE) {
725 Stack[StackPtr++] = Suffix[CrntPrefix];
726 CrntPrefix =
Prefix[CrntPrefix];
732 Stack[StackPtr++] = CrntPrefix;
735 while (StackPtr != 0 &&
i < LineLen)
736 Line[
i++] = Stack[--StackPtr];
794 static const unsigned short CodeMasks[] = {
795 0x0000, 0x0001, 0x0003, 0x0007,
796 0x000f, 0x001f, 0x003f, 0x007f,
797 0x00ff, 0x01ff, 0x03ff, 0x07ff,
846 if (
READ(GifFile, Buf, 1) != 1) {
856 if (
READ(GifFile, &Buf[1], Buf[0]) != Buf[0]) {
863 *NextByte = Buf[Buf[1]++];
891 switch (RecordType) {
897 ImageSize =
sp->ImageDesc.Width *
sp->ImageDesc.Height;
900 if (
sp->RasterBits ==
NULL) {
916 sp->Extensions.Function =
sp->Extensions.ExtensionBlocks[0].Function;
947 while (ExtData !=
NULL) {
1001 if (GifFile ==
NULL) {
1013 GifFile->
Private = (
void*)Private;
1015 Private->
Read = readFunc;
1051 if (GifFile ==
NULL)
int(* InputFunc)(GifFileType *, GifByteType *, int)
static int DGifGetWord(GifFileType *GifFile, GifWord *Word)
static int AppendExtensionBlock(Extensions *New, int Len, const unsigned char ExtData[])
_In_ __drv_aliasesMem PSTRING Prefix
unsigned long CrntShiftDWord
static void * ungif_calloc(size_t num, size_t sz)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
static void * ungif_alloc(size_t sz)
static int DGifGetPrefixChar(const GifPrefixType *Prefix, int Code, int ClearCode)
ColorMapObject * SColorMap
GifByteType Stack[LZ_MAX_CODE]
unsigned char GifPixelType
static int DGifGetRecordType(GifFileType *GifFile, GifRecordType *Type)
static int BitSize(int n)
unsigned int GifPrefixType
static void FreeSavedImages(GifFileType *GifFile)
static void FreeExtension(Extensions *Extensions)
static ColorMapObject * MakeMapObject(int ColorCount, const GifColorType *ColorMap)
static int DGifGetScreenDesc(GifFileType *GifFile)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
int DGifCloseFile(GifFileType *GifFile)
unsigned char GifByteType
#define READ(_gif, _buf, _len)
static LPOVERLAPPED_COMPLETION_ROUTINE Function
GifByteType Suffix[LZ_MAX_CODE+1]
ColorMapObject * ColorMap
static int DGifSetupDecompress(GifFileType *GifFile)
static int DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
static int DGifGetExtension(GifFileType *GifFile, int *ExtCode, GifByteType **Extension)
_In_ LPGUID _In_ PVOID Data
ExtensionBlock * ExtensionBlocks
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static int DGifDecompressInput(GifFileType *GifFile, int *Code)
static int AddExtensionBlock(Extensions *New, int Len, const unsigned char ExtData[])
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static int DGifGetImageDesc(GifFileType *GifFile)
static int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension)
static int DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf, GifByteType *NextByte)
static int DGifGetLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
GifFileType * DGifOpen(void *userData, InputFunc readFunc)
static void ungif_free(void *ptr)
WINE_DEFAULT_DEBUG_CHANNEL(wincodecs)
#define memcpy(s1, s2, n)
#define GRAPHICS_EXT_FUNC_CODE
struct SavedImage * SavedImages
int DGifSlurp(GifFileType *GifFile)
struct GifFilePrivateType GifFilePrivateType
static void FreeMapObject(ColorMapObject *Object)
GifPrefixType Prefix[LZ_MAX_CODE+1]
static void * ungif_realloc(void *ptr, size_t sz)
_Inout_opt_ PUNICODE_STRING Extension
#define HeapFree(x, y, z)
static int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *