25#define NONAMELESSUNION
96 hr = IStream_Read(
stream, &lsd_data,
sizeof(lsd_data), &bytesread);
97 if (
FAILED(
hr) || bytesread !=
sizeof(lsd_data))
return S_OK;
102 for (
i = 0;
i < 9;
i++)
105 PropVariantInit(&
result[
i].
id);
164 &CLSID_WICLSDMetadataReader,
184 hr = IStream_Read(
stream, &imd_data,
sizeof(imd_data), &bytesread);
185 if (
FAILED(
hr) || bytesread !=
sizeof(imd_data))
return S_OK;
190 for (
i = 0;
i < 8;
i++)
193 PropVariantInit(&
result[
i].
id);
245 &CLSID_WICIMDMetadataReader,
258 struct graphic_control_extension
267 BYTE transparent_color_index;
277 hr = IStream_Read(
stream, &gce_data,
sizeof(gce_data), &bytesread);
278 if (
FAILED(
hr) || bytesread !=
sizeof(gce_data))
return S_OK;
283 for (
i = 0;
i < 5;
i++)
286 PropVariantInit(&
result[
i].
id);
293 result[0].value.u.bVal = (gce_data.packed >> 2) & 7;
298 result[1].value.u.boolVal = (gce_data.packed >> 1) & 1;
303 result[2].value.u.boolVal = gce_data.packed & 1;
308 result[3].value.u.uiVal = gce_data.delay;
313 result[4].value.u.bVal = gce_data.transparent_color_index;
323 &CLSID_WICGCEMetadataReader,
336 struct application_extension
338 BYTE extension_introducer;
339 BYTE extension_label;
341 BYTE application[11];
345 ULONG bytesread, data_size,
i;
353 hr = IStream_Read(
stream, &ape_data,
sizeof(ape_data), &bytesread);
354 if (
FAILED(
hr) || bytesread !=
sizeof(ape_data))
return S_OK;
355 if (ape_data.extension_introducer != 0x21 ||
357 ape_data.block_size != 11)
365 hr = IStream_Read(
stream, &subblock_size,
sizeof(subblock_size), &bytesread);
366 if (
FAILED(
hr) || bytesread !=
sizeof(subblock_size))
371 if (!subblock_size)
break;
385 data[data_size] = subblock_size;
386 hr = IStream_Read(
stream,
data + data_size + 1, subblock_size, &bytesread);
387 if (
FAILED(
hr) || bytesread != subblock_size)
392 data_size += subblock_size + 1;
402 for (
i = 0;
i < 2;
i++)
405 PropVariantInit(&
result[
i].
id);
412 result[0].value.u.caub.cElems =
sizeof(ape_data.application);
414 memcpy(
result[0].
value.u.caub.pElems, ape_data.application,
sizeof(ape_data.application));
419 result[1].value.u.caub.cElems = data_size;
430 &CLSID_WICAPEMetadataReader,
445 BYTE extension_introducer;
446 BYTE extension_label;
450 ULONG bytesread, data_size;
458 hr = IStream_Read(
stream, &ext_data,
sizeof(ext_data), &bytesread);
459 if (
FAILED(
hr) || bytesread !=
sizeof(ext_data))
return S_OK;
460 if (ext_data.extension_introducer != 0x21 ||
469 hr = IStream_Read(
stream, &subblock_size,
sizeof(subblock_size), &bytesread);
470 if (
FAILED(
hr) || bytesread !=
sizeof(subblock_size))
475 if (!subblock_size)
break;
489 hr = IStream_Read(
stream,
data + data_size, subblock_size, &bytesread);
490 if (
FAILED(
hr) || bytesread != subblock_size)
495 data_size += subblock_size;
507 PropVariantInit(&
result->schema);
508 PropVariantInit(&
result->id);
509 PropVariantInit(&
result->value);
524 &CLSID_WICGifCommentMetadataReader,
541 if (!hdata)
return NULL;
562 hr = constructor(&IID_IWICMetadataReader, (
void**)&metadata_reader);
565 hr = IWICMetadataReader_QueryInterface(metadata_reader, &IID_IWICPersistStream, (
void **)&persist);
568 IWICMetadataReader_Release(metadata_reader);
576 IWICPersistStream_Release(persist);
578 *
reader = metadata_reader;
634 *
ppv = &
This->IWICBitmapFrameDecode_iface;
636 else if (
IsEqualIID(&IID_IWICMetadataBlockReader, iid))
638 *
ppv = &
This->IWICMetadataBlockReader_iface;
655 TRACE(
"(%p) refcount=%u\n", iface,
ref);
665 TRACE(
"(%p) refcount=%u\n", iface,
ref);
669 IWICBitmapDecoder_Release(&
This->parent->IWICBitmapDecoder_iface);
680 TRACE(
"(%p,%p,%p)\n", iface, puiWidth, puiHeight);
682 *puiWidth =
This->frame->ImageDesc.Width;
683 *puiHeight =
This->frame->ImageDesc.Height;
691 memcpy(pPixelFormat, &GUID_WICPixelFormat8bppIndexed,
sizeof(
GUID));
697 double *pDpiX,
double *pDpiY)
700 const GifWord aspect_word =
This->parent->gif->SAspectRatio;
701 const double aspect = (aspect_word > 0) ? ((aspect_word + 15.0) / 64.0) : 1.0;
702 TRACE(
"(%p,%p,%p)\n", iface, pDpiX, pDpiY);
704 *pDpiX = 96.0 / aspect;
718 TRACE(
"(%p,%p)\n", iface, pIPalette);
720 if (!cm) cm =
This->parent->gif->SColorMap;
729 colors[
i] = 0xff000000|
736 for (
i = 0;
i <
This->frame->Extensions.ExtensionBlockCount; ++
i) {
737 eb =
This->frame->Extensions.ExtensionBlocks +
i;
739 if (eb->
Bytes[3] & 1) {
741 colors[trans] &= 0xffffff;
747 return IWICPalette_InitializeCustom(pIPalette, colors, cm->
ColorCount);
764 rect.Width = srcwidth;
765 rect.Height = srcheight;
770 if (rc->
X < 0 || rc->
Y < 0 || rc->
X+rc->
Width > srcwidth || rc->
Y+rc->
Height > srcheight)
774 if (dststride < rc->
Width)
777 if ((dststride * rc->
Height) > dstbuffersize)
786 src = srcbuffer + srcstride * (
y/8);
788 src = srcbuffer + srcstride * ((srcheight+7)/8 +
y/8);
790 src = srcbuffer + srcstride * ((srcheight+3)/4 +
y/4);
792 src = srcbuffer + srcstride * ((srcheight+1)/2 +
y/2);
806 if (
This->frame->ImageDesc.Interlace)
809 This->frame->ImageDesc.Height,
This->frame->ImageDesc.Width,
810 prc, cbStride, cbBufferSize, pbBuffer);
815 This->frame->ImageDesc.Height,
This->frame->ImageDesc.Width,
816 prc, cbStride, cbBufferSize, pbBuffer);
825 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
827 if (!ppIMetadataQueryReader)
836 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
843 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
865 return IWICBitmapFrameDecode_QueryInterface(&
This->IWICBitmapFrameDecode_iface, iid,
ppv);
871 return IWICBitmapFrameDecode_AddRef(&
This->IWICBitmapFrameDecode_iface);
877 return IWICBitmapFrameDecode_Release(&
This->IWICBitmapFrameDecode_iface);
887 *
guid = GUID_ContainerFormatGif;
900 *
count =
This->frame->Extensions.ExtensionBlockCount + 1;
917 hr = IWICMetadataReader_QueryInterface(metadata_reader, &IID_IWICPersistStream, (
void **)&persist);
920 IWICMetadataReader_Release(metadata_reader);
925 IMD_data.
left =
This->frame->ImageDesc.Left;
926 IMD_data.
top =
This->frame->ImageDesc.Top;
927 IMD_data.
width =
This->frame->ImageDesc.Width;
928 IMD_data.
height =
This->frame->ImageDesc.Height;
931 IMD_data.
packed |=
This->frame->ImageDesc.Interlace ? (1 << 6) : 0;
932 if (
This->frame->ImageDesc.ColorMap)
935 IMD_data.
packed |= 1 << 7;
937 IMD_data.
packed |=
This->frame->ImageDesc.ColorMap->BitsPerPixel - 1;
939 IMD_data.
packed |=
This->frame->ImageDesc.ColorMap->SortFlag ? 0x20 : 0;
946 IWICPersistStream_Release(persist);
948 *
reader = metadata_reader;
956 int i, gce_index = -1, gce_skipped = 0;
965 if (
index >=
This->frame->Extensions.ExtensionBlockCount + 1)
968 for (
i = 0;
i <
This->frame->Extensions.ExtensionBlockCount;
i++)
974 if (
index !=
i + 1 - gce_skipped)
continue;
985 data =
This->frame->Extensions.ExtensionBlocks[
i].Bytes;
986 data_size =
This->frame->Extensions.ExtensionBlocks[
i].ByteCount;
991 data =
This->frame->Extensions.ExtensionBlocks[
i].Bytes;
992 data_size =
This->frame->Extensions.ExtensionBlocks[
i].ByteCount;
1000 This->frame->Extensions.ExtensionBlocks[gce_index].ByteCount - 4,
1007 FIXME(
"(%p,%p): stub\n", iface, enumerator);
1033 *
ppv = &
This->IWICBitmapDecoder_iface;
1035 else if (
IsEqualIID(&IID_IWICMetadataBlockReader, iid))
1037 *
ppv = &
This->IWICMetadataBlockReader_iface;
1054 TRACE(
"(%p) refcount=%u\n", iface,
ref);
1064 TRACE(
"(%p) refcount=%u\n", iface,
ref);
1070 IStream_Release(
This->stream);
1073 This->lock.DebugInfo->Spare[0] = 0;
1106 ERR(
"attempting to read file after initialization\n");
1122 TRACE(
"(%p,%p,%x)\n", iface, pIStream, cacheOptions);
1126 if (
This->initialized ||
This->gif)
1128 WARN(
"already initialized\n");
1135 IStream_Seek(pIStream,
seek, STREAM_SEEK_SET,
NULL);
1156 IStream_Seek(pIStream,
seek, STREAM_SEEK_SET,
NULL);
1157 IStream_Read(pIStream,
This->LSD_data,
sizeof(
This->LSD_data),
NULL);
1159 This->stream = pIStream;
1160 IStream_AddRef(
This->stream);
1170 GUID *pguidContainerFormat)
1172 memcpy(pguidContainerFormat, &GUID_ContainerFormatGif,
sizeof(
GUID));
1179 TRACE(
"(%p,%p)\n", iface, ppIDecoderInfo);
1197 cm =
This->gif->SColorMap;
1202 ERR(
"GIF contains invalid number of colors: %d\n", cm->
ColorCount);
1208 colors[
i] = 0xff000000 |
1218 colors[0] = 0xff000000;
1219 colors[1] = 0xffffffff;
1221 for (
i = 2;
i < 256;
i++)
1222 colors[
i] = 0xff000000;
1228 for (
i = 0;
i <
This->gif->SavedImages[
This->current_frame].Extensions.ExtensionBlockCount;
i++)
1230 eb =
This->gif->SavedImages[
This->current_frame].Extensions.ExtensionBlocks +
i;
1233 if (eb->
Bytes[3] & 1)
1236 colors[trans] &= 0xffffff;
1242 return IWICPalette_InitializeCustom(
palette, colors,
count);
1250 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
1260 TRACE(
"(%p,%p)\n", iface, ppIBitmapSource);
1267 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
1274 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
1286 *pCount =
This->gif ?
This->gif->ImageCount : 0;
1289 TRACE(
"(%p) <-- %d\n", iface, *pCount);
1299 TRACE(
"(%p,%u,%p)\n", iface,
index, ppIBitmapFrame);
1312 IWICBitmapDecoder_AddRef(iface);
1316 *ppIBitmapFrame = &
result->IWICBitmapFrameDecode_iface;
1342 return IWICBitmapDecoder_QueryInterface(&
This->IWICBitmapDecoder_iface, iid,
ppv);
1348 return IWICBitmapDecoder_AddRef(&
This->IWICBitmapDecoder_iface);
1354 return IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
1364 *
guid = GUID_ContainerFormatGif;
1377 *
count =
This->gif->Extensions.ExtensionBlockCount + 1;
1395 for (
i = 0;
i <
This->gif->Extensions.ExtensionBlockCount;
i++)
1399 if (
index !=
i + 1)
continue;
1409 This->gif->Extensions.ExtensionBlocks[
i].ByteCount,
1419 FIXME(
"(%p,%p): stub\n", iface, enumerator);
1452 This->current_frame = 0;
1454 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": GifDecoder.lock");
1456 ret = IWICBitmapDecoder_QueryInterface(&
This->IWICBitmapDecoder_iface, iid,
ppv);
1457 IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
1506 IWICBitmapFrameEncode_AddRef(iface);
1533 IWICBitmapEncoder_Release(&
This->encoder->IWICBitmapEncoder_iface);
1550 if (!
This->initialized)
1574 if (
This->initialized)
1579 if (
This->image_data)
1601 TRACE(
"%p,%f,%f\n", iface, xres, yres);
1605 if (
This->initialized)
1630 if (
This->initialized)
1632 *
format = GUID_WICPixelFormat8bppIndexed;
1660 if (
This->initialized)
1671 FIXME(
"%p,%p: stub\n", iface, thumbnail);
1686 if (
This->initialized &&
This->image_data)
1727 if (
This->initialized)
1729 const GUID *
format = &GUID_WICPixelFormat8bppIndexed;
1743#define LZW_DICT_SIZE (1 << 12)
1782 while (
state->bits_count >= 8)
1784 unsigned char byte = (
unsigned char)
state->bits_buf;
1785 if (
state->user_write_data(
state->user_ptr, &
byte, 1) != 1)
1787 state->bits_buf >>= 8;
1788 state->bits_count -= 8;
1808 while (
state->bits_count >= 8)
1811 if (
state->user_write_data(
state->user_ptr, &
byte, 1) != 1)
1813 state->bits_buf >>= 8;
1814 state->bits_count -= 8;
1817 if (
state->bits_count)
1819 static const char mask[8] = { 0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f };
1822 if (
state->user_write_data(
state->user_ptr, &
byte, 1) != 1)
1826 state->bits_buf = 0;
1827 state->bits_count = 0;
1836 state->code_bits =
state->init_code_bits + 1;
1837 state->next_code = (1 <<
state->init_code_bits) + 2;
1841 state->dict.prefix[
i] = 1 << 12;
1842 state->dict.suffix[
i] = 0;
1848 state->init_code_bits = init_code_bits;
1849 state->clear_code = 1 << init_code_bits;
1851 state->bits_buf = 0;
1852 state->bits_count = 0;
1853 state->user_write_data = user_write_data;
1854 state->user_ptr = user_ptr;
1863 state->dict.prefix[
state->next_code] = prefix;
1864 state->dict.suffix[
state->next_code] = suffix;
1866 if ((
state->next_code & (
state->next_code - 1)) == 0)
1870 return state->next_code;
1880 for (
i = 0;
i <
state->next_code;
i++)
1882 if (
state->dict.prefix[
i] == prefix &&
state->dict.suffix[
i] == suffix)
1891 if (
out->gif_block.len == 255)
1893 if (IStream_Write(
out->out, &
out->gif_block,
sizeof(
out->gif_block),
NULL) !=
S_OK)
1896 out->gif_block.len = 0;
1899 out->gif_block.data[
out->gif_block.len++] =
byte;
1906 unsigned char *
data = user_data;
1922 if (
out->gif_block.len)
1924 if (IStream_Write(
out->out, &
out->gif_block,
out->gif_block.len +
sizeof(
out->gif_block.len),
NULL) !=
S_OK)
1929 out->gif_block.len = 0;
1930 return IStream_Write(
out->out, &
out->gif_block,
sizeof(
out->gif_block.len),
NULL) ==
S_OK;
1951 unsigned char suffix;
1956 out.gif_block.len = 0;
1957 out.out = out_stream;
1960 if (IStream_Write(
out.out, &suffix,
sizeof(suffix),
NULL) !=
S_OK)
2009 TRACE(
"%p\n", iface);
2015 BYTE gif_palette[256][3];
2019 if (!
This->encoder->info_written)
2028 if (
This->encoder->colors)
2034 hr = IStream_Write(
This->encoder->stream, &lsd,
sizeof(lsd),
NULL);
2040 memset(gif_palette, 0,
sizeof(gif_palette));
2041 for (
i = 0;
i <
This->encoder->colors;
i++)
2043 gif_palette[
i][0] = (
This->encoder->palette[
i] >> 16) & 0xff;
2044 gif_palette[
i][1] = (
This->encoder->palette[
i] >> 8) & 0xff;
2045 gif_palette[
i][2] =
This->encoder->palette[
i] & 0xff;
2047 hr = IStream_Write(
This->encoder->stream, gif_palette,
sizeof(gif_palette),
NULL);
2053 This->encoder->info_written =
TRUE;
2058 char image_separator = 0x2c;
2060 hr = IStream_Write(
This->encoder->stream, &image_separator,
sizeof(image_separator),
NULL);
2077 hr = IStream_Write(
This->encoder->stream, &imd,
sizeof(imd),
NULL);
2083 memset(gif_palette, 0,
sizeof(gif_palette));
2084 for (
i = 0;
i <
This->colors;
i++)
2086 gif_palette[
i][0] = (
This->palette[
i] >> 16) & 0xff;
2087 gif_palette[
i][1] = (
This->palette[
i] >> 8) & 0xff;
2088 gif_palette[
i][2] =
This->palette[
i] & 0xff;
2090 hr = IStream_Write(
This->encoder->stream, gif_palette,
sizeof(gif_palette),
NULL);
2111 FIXME(
"%p, %p: stub\n", iface, writer);
2142 IWICBitmapEncoder_AddRef(iface);
2169 if (
This->stream) IStream_Release(
This->stream);
2170 This->lock.DebugInfo->Spare[0] = 0;
2189 if (!
This->initialized)
2208 *
format = GUID_ContainerFormatGif;
2224 hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (
void **)
info);
2225 IWICComponentInfo_Release(comp_info);
2247 if (
This->initialized)
2258 TRACE(
"%p,%p\n", iface, thumbnail);
2279 if (
This->initialized && !
This->committed)
2299 IWICBitmapEncoder_AddRef(iface);
2300 *frame = &
ret->IWICBitmapFrameEncode_iface;
2309 IWICBitmapFrameEncode_Release(*frame);
2331 TRACE(
"%p\n", iface);
2335 if (
This->initialized && !
This->committed)
2337 char gif_trailer = 0x3b;
2341 hr = IStream_Write(
This->stream, &gif_trailer,
sizeof(gif_trailer),
NULL);
2354 FIXME(
"%p,%p: stub\n", iface, writer);
2391 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": GifEncoder.lock");
2398 ret = IWICBitmapEncoder_QueryInterface(&
This->IWICBitmapEncoder_iface, iid,
ppv);
2399 IWICBitmapEncoder_Release(&
This->IWICBitmapEncoder_iface);
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static previewinfo preview
void copy_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slice_pitch, BYTE *dst, UINT dst_row_pitch, UINT dst_slice_pitch, const struct volume *size, const struct pixel_format_desc *format) DECLSPEC_HIDDEN
#define HeapFree(x, y, z)
#define MultiByteToWideChar
static GpStatus get_decoder_info(IStream *stream, const struct image_codec **result)
static const WCHAR gif_extension[]
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
HRESULT CreateComponentInfo(REFCLSID clsid, IWICComponentInfo **ppIInfo)
HRESULT write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, UINT bpp, INT width, INT height)
HRESULT configure_write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, INT width, INT height, double xres, double yres)
HRESULT CreatePropertyBag2(const PROPBAG2 *options, UINT count, IPropertyBag2 **ppPropertyBag2)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLuint GLsizei GLsizei * length
GLuint GLenum GLsizei GLsizei GLint GLint GLboolean packed
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
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
static DWORD block_size(DWORD block)
#define memcpy(s1, s2, n)
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG in_size
#define IsEqualIID(riid1, riid2)
int seek(void *fd, ulong off, int mode)
IWICBitmapDecoder IWICBitmapDecoder_iface
IWICMetadataBlockReader IWICMetadataBlockReader_iface
IWICBitmapEncoder IWICBitmapEncoder_iface
IWICMetadataBlockReader IWICMetadataBlockReader_iface
IWICBitmapFrameDecode IWICBitmapFrameDecode_iface
IWICBitmapFrameEncode IWICBitmapFrameEncode_iface
BYTE background_color_index
short prefix[LZW_DICT_SIZE]
unsigned char suffix[LZW_DICT_SIZE]
int(* user_write_data)(void *user_ptr, void *data, int length)
struct output_stream::@594 gif_block
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define CONTAINING_RECORD(address, type, field)
GifFileType * DGifOpen(void *userData, InputFunc readFunc)
int DGifCloseFile(GifFileType *GifFile)
int DGifSlurp(GifFileType *GifFile)
unsigned char GifByteType
#define COMMENT_EXT_FUNC_CODE
#define APPLICATION_EXT_FUNC_CODE
#define GRAPHICS_EXT_FUNC_CODE
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
WICBitmapEncoderCacheOption
@ WICDecodeMetadataCacheOnDemand
@ WICBitmapDecoderCapabilityCanDecodeSomeImages
@ WICBitmapDecoderCapabilityCanEnumerateMetadata
@ WICBitmapDecoderCapabilityCanDecodeAllImages
static const char * debug_wic_rect(const WICRect *rect)
HRESULT(* class_constructor)(REFIID, void **)
@ WICPersistOptionDefault
#define WINCODEC_ERR_WRONGSTATE
#define WINCODEC_ERR_UNSUPPORTEDOPERATION
#define WINCODEC_ERR_NOTINITIALIZED
#define WINCODEC_ERR_CODECNOTHUMBNAIL
#define WINCODEC_ERR_FRAMEMISSING