84 hr = IStream_Read(
stream, &lsd_data,
sizeof(lsd_data), &bytesread);
85 if (
FAILED(
hr) || bytesread !=
sizeof(lsd_data))
return S_OK;
90 for (
i = 0;
i < 9;
i++)
152 &CLSID_WICLSDMetadataReader,
172 hr = IStream_Read(
stream, &imd_data,
sizeof(imd_data), &bytesread);
173 if (
FAILED(
hr) || bytesread !=
sizeof(imd_data))
return S_OK;
178 for (
i = 0;
i < 8;
i++)
181 PropVariantInit(&
result[
i].
id);
233 &CLSID_WICIMDMetadataReader,
246 struct graphic_control_extension
255 BYTE transparent_color_index;
265 hr = IStream_Read(
stream, &gce_data,
sizeof(gce_data), &bytesread);
266 if (
FAILED(
hr) || bytesread !=
sizeof(gce_data))
return S_OK;
271 for (
i = 0;
i < 5;
i++)
274 PropVariantInit(&
result[
i].
id);
281 result[0].value.bVal = (gce_data.packed >> 2) & 7;
286 result[1].value.boolVal = (gce_data.packed >> 1) & 1;
291 result[2].value.boolVal = gce_data.packed & 1;
296 result[3].value.uiVal = gce_data.delay;
301 result[4].value.bVal = gce_data.transparent_color_index;
311 &CLSID_WICGCEMetadataReader,
324 struct application_extension
326 BYTE extension_introducer;
327 BYTE extension_label;
329 BYTE application[11];
333 ULONG bytesread, data_size,
i;
341 hr = IStream_Read(
stream, &ape_data,
sizeof(ape_data), &bytesread);
342 if (
FAILED(
hr) || bytesread !=
sizeof(ape_data))
return S_OK;
343 if (ape_data.extension_introducer != 0x21 ||
345 ape_data.block_size != 11)
353 hr = IStream_Read(
stream, &subblock_size,
sizeof(subblock_size), &bytesread);
354 if (
FAILED(
hr) || bytesread !=
sizeof(subblock_size))
359 if (!subblock_size)
break;
373 data[data_size] = subblock_size;
374 hr = IStream_Read(
stream,
data + data_size + 1, subblock_size, &bytesread);
375 if (
FAILED(
hr) || bytesread != subblock_size)
380 data_size += subblock_size + 1;
390 for (
i = 0;
i < 2;
i++)
393 PropVariantInit(&
result[
i].
id);
400 result[0].value.caub.cElems =
sizeof(ape_data.application);
402 memcpy(
result[0].
value.caub.pElems, ape_data.application,
sizeof(ape_data.application));
407 result[1].value.caub.cElems = data_size;
418 &CLSID_WICAPEMetadataReader,
433 BYTE extension_introducer;
434 BYTE extension_label;
438 ULONG bytesread, data_size;
446 hr = IStream_Read(
stream, &ext_data,
sizeof(ext_data), &bytesread);
447 if (
FAILED(
hr) || bytesread !=
sizeof(ext_data))
return S_OK;
448 if (ext_data.extension_introducer != 0x21 ||
457 hr = IStream_Read(
stream, &subblock_size,
sizeof(subblock_size), &bytesread);
458 if (
FAILED(
hr) || bytesread !=
sizeof(subblock_size))
463 if (!subblock_size)
break;
477 hr = IStream_Read(
stream,
data + data_size, subblock_size, &bytesread);
478 if (
FAILED(
hr) || bytesread != subblock_size)
483 data_size += subblock_size;
495 PropVariantInit(&
result->schema);
496 PropVariantInit(&
result->id);
497 PropVariantInit(&
result->value);
512 &CLSID_WICGifCommentMetadataReader,
529 if (!hdata)
return NULL;
550 hr = constructor(&IID_IWICMetadataReader, (
void**)&metadata_reader);
553 hr = IWICMetadataReader_QueryInterface(metadata_reader, &IID_IWICPersistStream, (
void **)&persist);
556 IWICMetadataReader_Release(metadata_reader);
564 IWICPersistStream_Release(persist);
566 *
reader = metadata_reader;
622 *
ppv = &
This->IWICBitmapFrameDecode_iface;
624 else if (
IsEqualIID(&IID_IWICMetadataBlockReader, iid))
626 *
ppv = &
This->IWICMetadataBlockReader_iface;
643 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
653 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
657 IWICBitmapDecoder_Release(&
This->parent->IWICBitmapDecoder_iface);
668 TRACE(
"(%p,%p,%p)\n", iface, puiWidth, puiHeight);
670 *puiWidth =
This->frame->ImageDesc.Width;
671 *puiHeight =
This->frame->ImageDesc.Height;
679 memcpy(pPixelFormat, &GUID_WICPixelFormat8bppIndexed,
sizeof(
GUID));
685 double *pDpiX,
double *pDpiY)
688 const GifWord aspect_word =
This->parent->gif->SAspectRatio;
689 const double aspect = (aspect_word > 0) ? ((aspect_word + 15.0) / 64.0) : 1.0;
690 TRACE(
"(%p,%p,%p)\n", iface, pDpiX, pDpiY);
692 *pDpiX = 96.0 / aspect;
706 colors[
i] = 0xff000000 |
714 colors[0] = 0xff000000;
715 colors[1] = 0xffffffff;
717 colors[
i] = 0xff000000;
728 colors[trans] &= 0xffffff;
742 TRACE(
"(%p,%p)\n", iface, pIPalette);
748 cm =
This->parent->gif->SColorMap;
749 count =
This->parent->gif->SColorTableSize;
754 ERR(
"GIF contains %i colors???\n",
count);
760 return IWICPalette_InitializeCustom(pIPalette, colors,
count);
777 rect.Width = srcwidth;
778 rect.Height = srcheight;
783 if (rc->
X < 0 || rc->
Y < 0 || rc->
X+rc->
Width > srcwidth || rc->
Y+rc->
Height > srcheight)
787 if (dststride < rc->
Width)
790 if ((dststride * rc->
Height) > dstbuffersize)
799 src = srcbuffer + srcstride * (
y/8);
801 src = srcbuffer + srcstride * ((srcheight+7)/8 +
y/8);
803 src = srcbuffer + srcstride * ((srcheight+3)/4 +
y/4);
805 src = srcbuffer + srcstride * ((srcheight+1)/2 +
y/2);
819 if (
This->frame->ImageDesc.Interlace)
822 This->frame->ImageDesc.Height,
This->frame->ImageDesc.Width,
823 prc, cbStride, cbBufferSize, pbBuffer);
828 This->frame->ImageDesc.Height,
This->frame->ImageDesc.Width,
829 prc, cbStride, cbBufferSize, pbBuffer);
838 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
840 if (!ppIMetadataQueryReader)
849 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
856 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
878 return IWICBitmapFrameDecode_QueryInterface(&
This->IWICBitmapFrameDecode_iface, iid,
ppv);
884 return IWICBitmapFrameDecode_AddRef(&
This->IWICBitmapFrameDecode_iface);
890 return IWICBitmapFrameDecode_Release(&
This->IWICBitmapFrameDecode_iface);
900 *
guid = GUID_ContainerFormatGif;
913 *
count =
This->frame->Extensions.ExtensionBlockCount + 1;
930 hr = IWICMetadataReader_QueryInterface(metadata_reader, &IID_IWICPersistStream, (
void **)&persist);
933 IWICMetadataReader_Release(metadata_reader);
938 IMD_data.
left =
This->frame->ImageDesc.Left;
939 IMD_data.
top =
This->frame->ImageDesc.Top;
940 IMD_data.
width =
This->frame->ImageDesc.Width;
941 IMD_data.
height =
This->frame->ImageDesc.Height;
944 IMD_data.
packed |=
This->frame->ImageDesc.Interlace ? (1 << 6) : 0;
945 if (
This->frame->ImageDesc.ColorMap)
948 IMD_data.
packed |= 1 << 7;
950 IMD_data.
packed |=
This->frame->ImageDesc.ColorMap->BitsPerPixel - 1;
952 IMD_data.
packed |=
This->frame->ImageDesc.ColorMap->SortFlag ? 0x20 : 0;
959 IWICPersistStream_Release(persist);
961 *
reader = metadata_reader;
981 if (
index >=
This->frame->Extensions.ExtensionBlockCount + 1)
984 ext =
This->frame->Extensions.ExtensionBlocks +
index - 1;
989 data_size =
ext->ByteCount - 4;
995 data_size =
ext->ByteCount;
1001 data_size =
ext->ByteCount;
1010 FIXME(
"(%p,%p): stub\n", iface, enumerator);
1036 *
ppv = &
This->IWICBitmapDecoder_iface;
1038 else if (
IsEqualIID(&IID_IWICMetadataBlockReader, iid))
1040 *
ppv = &
This->IWICMetadataBlockReader_iface;
1057 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
1067 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
1073 IStream_Release(
This->stream);
1076 This->lock.DebugInfo->Spare[0] = 0;
1109 ERR(
"attempting to read file after initialization\n");
1125 TRACE(
"(%p,%p,%x)\n", iface, pIStream, cacheOptions);
1129 if (
This->initialized ||
This->gif)
1131 WARN(
"already initialized\n");
1138 IStream_Seek(pIStream,
seek, STREAM_SEEK_SET,
NULL);
1159 IStream_Seek(pIStream,
seek, STREAM_SEEK_SET,
NULL);
1160 IStream_Read(pIStream,
This->LSD_data,
sizeof(
This->LSD_data),
NULL);
1162 This->stream = pIStream;
1163 IStream_AddRef(
This->stream);
1173 GUID *pguidContainerFormat)
1175 memcpy(pguidContainerFormat, &GUID_ContainerFormatGif,
sizeof(
GUID));
1182 TRACE(
"(%p,%p)\n", iface, ppIDecoderInfo);
1199 cm =
This->gif->SColorMap;
1204 ERR(
"GIF contains invalid number of colors: %d\n",
count);
1210 return IWICPalette_InitializeCustom(
palette, colors,
count);
1218 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
1228 TRACE(
"(%p,%p)\n", iface, ppIBitmapSource);
1235 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
1242 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
1254 *pCount =
This->gif ?
This->gif->ImageCount : 0;
1257 TRACE(
"(%p) <-- %d\n", iface, *pCount);
1267 TRACE(
"(%p,%u,%p)\n", iface,
index, ppIBitmapFrame);
1280 IWICBitmapDecoder_AddRef(iface);
1284 *ppIBitmapFrame = &
result->IWICBitmapFrameDecode_iface;
1310 return IWICBitmapDecoder_QueryInterface(&
This->IWICBitmapDecoder_iface, iid,
ppv);
1316 return IWICBitmapDecoder_AddRef(&
This->IWICBitmapDecoder_iface);
1322 return IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
1332 *
guid = GUID_ContainerFormatGif;
1345 *
count =
This->gif->Extensions.ExtensionBlockCount + 1;
1363 for (
i = 0;
i <
This->gif->Extensions.ExtensionBlockCount;
i++)
1367 if (
index !=
i + 1)
continue;
1377 This->gif->Extensions.ExtensionBlocks[
i].ByteCount,
1387 FIXME(
"(%p,%p): stub\n", iface, enumerator);
1420 This->current_frame = 0;
1426 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": GifDecoder.lock");
1428 ret = IWICBitmapDecoder_QueryInterface(&
This->IWICBitmapDecoder_iface, iid,
ppv);
1429 IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
1488 else if (
IsEqualIID(&IID_IWICMetadataBlockWriter, iid))
1490 *
ppv = &
encoder->IWICMetadataBlockWriter_iface;
1520 IWICBitmapEncoder_Release(&
This->encoder->IWICBitmapEncoder_iface);
1537 if (!
This->initialized)
1561 if (
This->initialized)
1566 if (
This->image_data)
1588 TRACE(
"%p,%f,%f\n", iface, xres, yres);
1592 if (
This->initialized)
1617 if (
This->initialized)
1619 *
format = GUID_WICPixelFormat8bppIndexed;
1647 if (
This->initialized)
1658 FIXME(
"%p,%p: stub\n", iface, thumbnail);
1673 if (
This->initialized &&
This->image_data)
1714 if (
This->initialized)
1716 const GUID *
format = &GUID_WICPixelFormat8bppIndexed;
1730#define LZW_DICT_SIZE (1 << 12)
1769 while (
state->bits_count >= 8)
1771 unsigned char byte = (
unsigned char)
state->bits_buf;
1772 if (
state->user_write_data(
state->user_ptr, &
byte, 1) != 1)
1774 state->bits_buf >>= 8;
1775 state->bits_count -= 8;
1795 while (
state->bits_count >= 8)
1798 if (
state->user_write_data(
state->user_ptr, &
byte, 1) != 1)
1800 state->bits_buf >>= 8;
1801 state->bits_count -= 8;
1804 if (
state->bits_count)
1806 static const char mask[8] = { 0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f };
1809 if (
state->user_write_data(
state->user_ptr, &
byte, 1) != 1)
1813 state->bits_buf = 0;
1814 state->bits_count = 0;
1823 state->code_bits =
state->init_code_bits + 1;
1824 state->next_code = (1 <<
state->init_code_bits) + 2;
1828 state->dict.prefix[
i] = 1 << 12;
1829 state->dict.suffix[
i] = 0;
1835 state->init_code_bits = init_code_bits;
1836 state->clear_code = 1 << init_code_bits;
1838 state->bits_buf = 0;
1839 state->bits_count = 0;
1841 state->user_ptr = user_ptr;
1851 state->dict.suffix[
state->next_code] = suffix;
1853 if ((
state->next_code & (
state->next_code - 1)) == 0)
1857 return state->next_code;
1867 for (
i = 0;
i <
state->next_code;
i++)
1878 if (
out->gif_block.len == 255)
1880 if (IStream_Write(
out->out, &
out->gif_block,
sizeof(
out->gif_block),
NULL) !=
S_OK)
1883 out->gif_block.len = 0;
1886 out->gif_block.data[
out->gif_block.len++] =
byte;
1893 unsigned char *
data = user_data;
1909 if (
out->gif_block.len)
1911 if (IStream_Write(
out->out, &
out->gif_block,
out->gif_block.len +
sizeof(
out->gif_block.len),
NULL) !=
S_OK)
1916 out->gif_block.len = 0;
1917 return IStream_Write(
out->out, &
out->gif_block,
sizeof(
out->gif_block.len),
NULL) ==
S_OK;
1938 unsigned char suffix;
1943 out.gif_block.len = 0;
1944 out.out = out_stream;
1947 if (IStream_Write(
out.out, &suffix,
sizeof(suffix),
NULL) !=
S_OK)
1996 TRACE(
"%p\n", iface);
2002 BYTE gif_palette[256][3];
2006 if (!
This->encoder->info_written)
2015 if (
This->encoder->colors)
2021 hr = IStream_Write(
This->encoder->stream, &lsd,
sizeof(lsd),
NULL);
2027 memset(gif_palette, 0,
sizeof(gif_palette));
2028 for (
i = 0;
i <
This->encoder->colors;
i++)
2030 gif_palette[
i][0] = (
This->encoder->palette[
i] >> 16) & 0xff;
2031 gif_palette[
i][1] = (
This->encoder->palette[
i] >> 8) & 0xff;
2032 gif_palette[
i][2] =
This->encoder->palette[
i] & 0xff;
2034 hr = IStream_Write(
This->encoder->stream, gif_palette,
sizeof(gif_palette),
NULL);
2040 This->encoder->info_written =
TRUE;
2045 char image_separator = 0x2c;
2047 hr = IStream_Write(
This->encoder->stream, &image_separator,
sizeof(image_separator),
NULL);
2064 hr = IStream_Write(
This->encoder->stream, &imd,
sizeof(imd),
NULL);
2070 memset(gif_palette, 0,
sizeof(gif_palette));
2071 for (
i = 0;
i <
This->colors;
i++)
2073 gif_palette[
i][0] = (
This->palette[
i] >> 16) & 0xff;
2074 gif_palette[
i][1] = (
This->palette[
i] >> 8) & 0xff;
2075 gif_palette[
i][2] =
This->palette[
i] & 0xff;
2077 hr = IStream_Write(
This->encoder->stream, gif_palette,
sizeof(gif_palette),
NULL);
2100 TRACE(
"iface, %p, writer %p.\n", iface, writer);
2138 IWICBitmapEncoder_AddRef(iface);
2165 if (
This->stream) IStream_Release(
This->stream);
2166 This->lock.DebugInfo->Spare[0] = 0;
2185 if (!
This->initialized)
2204 *
format = GUID_ContainerFormatGif;
2220 hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (
void **)
info);
2221 IWICComponentInfo_Release(comp_info);
2243 if (
This->initialized)
2254 TRACE(
"%p,%p\n", iface, thumbnail);
2287 FIXME(
"iface %p, container_format %p stub.\n", iface, container_format);
2294 FIXME(
"iface %p, count %p stub.\n", iface,
count);
2302 FIXME(
"iface %p, index %d, metadata_reader %p stub.\n", iface,
index, metadata_reader);
2309 FIXME(
"iface %p, enum_metadata %p stub.\n", iface, enum_metadata);
2317 FIXME(
"iface %p, block_reader %p stub.\n", iface, block_reader);
2325 FIXME(
"iface %p, index %u, metadata_writer %p stub.\n", iface,
index, metadata_writer);
2332 FIXME(
"iface %p, metadata_writer %p stub.\n", iface, metadata_writer);
2340 FIXME(
"iface %p, index %u, metadata_writer %p stub.\n", iface,
index, metadata_writer);
2347 FIXME(
"iface %p, index %u stub.\n", iface,
index);
2378 if (
This->initialized && !
This->committed)
2400 IWICBitmapEncoder_AddRef(iface);
2401 *frame = &
ret->IWICBitmapFrameEncode_iface;
2410 IWICBitmapFrameEncode_Release(*frame);
2432 TRACE(
"%p\n", iface);
2436 if (
This->initialized && !
This->committed)
2438 char gif_trailer = 0x3b;
2442 hr = IStream_Write(
This->stream, &gif_trailer,
sizeof(gif_trailer),
NULL);
2455 FIXME(
"%p,%p: stub\n", iface, writer);
2496 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": GifEncoder.lock");
2503 ret = IWICBitmapEncoder_QueryInterface(&
This->IWICBitmapEncoder_iface, iid,
ppv);
2504 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
static const WCHAR *const ext[]
static GpStatus get_decoder_info(IStream *stream, const struct image_codec **result)
static const WCHAR gif_extension[]
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
HRESULT WINAPI SHStrDupW(LPCWSTR src, LPWSTR *dest)
HRESULT CreateComponentInfo(REFCLSID clsid, IWICComponentInfo **ppIInfo)
HRESULT CreatePropertyBag2(const PROPBAG2 *options, UINT count, IPropertyBag2 **ppPropertyBag2)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
GLuint GLuint GLsizei count
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
GLint GLint GLint GLint GLint GLint y
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)
LPVOID WINAPI CoTaskMemRealloc(LPVOID pvOld, SIZE_T size)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
static DWORD block_size(DWORD block)
static void user_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
#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)
ExtensionBlock * ExtensionBlocks
IWICBitmapDecoder IWICBitmapDecoder_iface
IWICMetadataBlockReader IWICMetadataBlockReader_iface
IWICBitmapEncoder IWICBitmapEncoder_iface
IWICMetadataBlockReader IWICMetadataBlockReader_iface
IWICBitmapFrameDecode IWICBitmapFrameDecode_iface
IWICBitmapFrameEncode IWICBitmapFrameEncode_iface
IWICMetadataBlockWriter IWICMetadataBlockWriter_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::@624 gif_block
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
Character const *const prefix
#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
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
WICBitmapEncoderCacheOption
@ WICDecodeMetadataCacheOnDemand
@ WICBitmapDecoderCapabilityCanDecodeSomeImages
@ WICBitmapDecoderCapabilityCanEnumerateMetadata
@ WICBitmapDecoderCapabilityCanDecodeAllImages
HRESULT write_source(IWICBitmapFrameEncode *iface, IWICBitmapSource *source, const WICRect *prc, const WICPixelFormatGUID *format, UINT bpp, BOOL need_palette, 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)
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
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO