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;
664 while (StackPtr != 0 &&
i < LineLen)
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)
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 memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
#define HeapFree(x, y, z)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
_Inout_opt_ PUNICODE_STRING Extension
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
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
#define memcpy(s1, s2, n)
ExtensionBlock * ExtensionBlocks
GifByteType Stack[LZ_MAX_CODE]
GifByteType Suffix[LZ_MAX_CODE+1]
GifPrefixType Prefix[LZ_MAX_CODE+1]
unsigned long CrntShiftDWord
struct SavedImage * SavedImages
ColorMapObject * SColorMap
ColorMapObject * ColorMap
static int DGifGetExtension(GifFileType *GifFile, int *ExtCode, GifByteType **Extension)
static void FreeMapObject(ColorMapObject *Object)
static int AppendExtensionBlock(Extensions *New, int Len, const unsigned char ExtData[])
static int DGifGetScreenDesc(GifFileType *GifFile)
static void FreeExtension(Extensions *Extensions)
static int DGifSetupDecompress(GifFileType *GifFile)
static void ungif_free(void *ptr)
static int DGifGetRecordType(GifFileType *GifFile, GifRecordType *Type)
static int DGifGetImageDesc(GifFileType *GifFile)
GifFileType * DGifOpen(void *userData, InputFunc readFunc)
static void * ungif_realloc(void *ptr, size_t sz)
int DGifCloseFile(GifFileType *GifFile)
int DGifSlurp(GifFileType *GifFile)
#define READ(_gif, _buf, _len)
static int DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf, GifByteType *NextByte)
static int DGifDecompressInput(GifFileType *GifFile, int *Code)
static int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock)
static int DGifGetWord(GifFileType *GifFile, GifWord *Word)
static int AddExtensionBlock(Extensions *New, int Len, const unsigned char ExtData[])
static void * ungif_calloc(size_t num, size_t sz)
static int DGifGetPrefixChar(const GifPrefixType *Prefix, int Code, int ClearCode)
static int DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
static void * ungif_alloc(size_t sz)
static void FreeSavedImages(GifFileType *GifFile)
static int DGifGetLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
static ColorMapObject * MakeMapObject(int ColorCount, const GifColorType *ColorMap)
static int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension)
static int BitSize(int n)
unsigned int GifPrefixType
unsigned char GifPixelType
unsigned char GifByteType
#define GRAPHICS_EXT_FUNC_CODE
int(* InputFunc)(GifFileType *, GifByteType *, int)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_In_ __drv_aliasesMem PSTRING Prefix