59 *
ppv = &
This->IWICBitmapDecoder_iface;
76 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
86 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
91 IStream_Release(
This->stream);
92 This->lock.DebugInfo->Spare[0] = 0;
124 TRACE(
"(%p,%p,%x)\n", iface, pIStream, cacheOptions);
136 This->cache_options = cacheOptions;
137 This->stream = pIStream;
138 IStream_AddRef(
This->stream);
147 GUID *pguidContainerFormat)
150 memcpy(pguidContainerFormat, &
This->decoder_info.container_format,
sizeof(
GUID));
158 TRACE(
"(%p,%p)\n", iface, ppIDecoderInfo);
184 TRACE(
"(%p,%p)\n", iface, ppIBitmapSource);
188 *ppIBitmapSource =
NULL;
195 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
202 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
206 *ppIThumbnail =
NULL;
217 *pCount =
This->file_info.frame_count;
276 *
ppv = &
This->IWICBitmapFrameDecode_iface;
278 else if (
IsEqualIID(&IID_IWICMetadataBlockReader, iid) &&
281 *
ppv = &
This->IWICMetadataBlockReader_iface;
298 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
308 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
312 IWICBitmapDecoder_Release(&
This->parent->IWICBitmapDecoder_iface);
325 TRACE(
"(%p,%p,%p)\n",
This, puiWidth, puiHeight);
327 if (!puiWidth || !puiHeight)
330 *puiWidth =
This->decoder_frame.width;
331 *puiHeight =
This->decoder_frame.height;
345 *pPixelFormat =
This->decoder_frame.pixel_format;
350 double *pDpiX,
double *pDpiY)
354 TRACE(
"(%p,%p,%p)\n",
This, pDpiX, pDpiY);
356 if (!pDpiX || !pDpiY)
359 *pDpiX =
This->decoder_frame.dpix;
360 *pDpiY =
This->decoder_frame.dpiy;
370 TRACE(
"(%p,%p)\n", iface, pIPalette);
372 if (
This->decoder_frame.num_colors)
374 hr = IWICPalette_InitializeCustom(pIPalette,
This->decoder_frame.palette,
This->decoder_frame.num_colors);
401 rect.Width =
This->decoder_frame.width;
402 rect.Height =
This->decoder_frame.height;
407 if (
prc->X < 0 ||
prc->Y < 0 ||
408 prc->X+
prc->Width >
This->decoder_frame.width ||
409 prc->Y+
prc->Height >
This->decoder_frame.height)
413 bytesperrow = ((
This->decoder_frame.bpp *
prc->Width)+7)/8;
415 if (cbStride < bytesperrow)
418 if ((cbStride * (
prc->Height-1)) + bytesperrow > cbBufferSize)
424 prc, cbStride, cbBufferSize, pbBuffer);
438 TRACE(
"(%p,%p)\n", iface, ppIMetadataQueryReader);
440 if (!ppIMetadataQueryReader)
450 hr = IWICComponentFactory_CreateQueryReaderFromBlockReader(
factory, &
This->IWICMetadataBlockReader_iface, ppIMetadataQueryReader);
451 IWICComponentFactory_Release(
factory);
455 *ppIMetadataQueryReader =
NULL;
469 TRACE(
"(%p,%u,%p,%p)\n", iface, cCount, ppIColorContexts, pcActualCount);
480 *pcActualCount =
This->decoder_frame.num_color_contexts;
482 if (
This->decoder_frame.num_color_contexts && cCount && ppIColorContexts)
484 if (cCount >=
This->decoder_frame.num_color_contexts)
488 for (
i=0;
i<
This->decoder_frame.num_color_contexts;
i++)
494 hr = IWICColorContext_InitializeFromMemory(ppIColorContexts[
i],
profile, profile_len);
517 TRACE(
"(%p,%p)\n", iface, ppIThumbnail);
521 *ppIThumbnail =
NULL;
543 return IWICBitmapFrameDecode_QueryInterface(&
This->IWICBitmapFrameDecode_iface, iid,
ppv);
549 return IWICBitmapFrameDecode_AddRef(&
This->IWICBitmapFrameDecode_iface);
555 return IWICBitmapFrameDecode_Release(&
This->IWICBitmapFrameDecode_iface);
559 GUID *pguidContainerFormat)
563 *pguidContainerFormat =
This->parent->decoder_info.block_format;
571 if (
This->metadata_initialized)
576 if (!
This->metadata_initialized)
594 TRACE(
"%p,%p\n", iface, pcCount);
600 *pcCount =
This->metadata_count;
613 TRACE(
"%p,%d,%p\n", iface, nIndex, ppIMetadataReader);
615 if (!ppIMetadataReader)
634 offset.QuadPart =
This->metadata_blocks[nIndex].offset;
636 hr = IWICStream_InitializeFromIStream(
stream,
This->parent->stream);
645 offset.QuadPart =
This->metadata_blocks[nIndex].offset;
646 length.QuadPart =
This->metadata_blocks[nIndex].length;
648 hr = IWICStream_InitializeFromIStreamRegion(
stream,
This->parent->stream,
659 &IID_IWICMetadataReader, (
void**)&
reader);
664 hr = IWICMetadataReader_QueryInterface(
reader, &IID_IWICPersistStream, (
void**)&persist);
671 IWICPersistStream_Release(persist);
675 *ppIMetadataReader =
reader;
677 IWICMetadataReader_Release(
reader);
682 hr = IWICComponentFactory_CreateMetadataReaderFromContainer(
factory,
683 &
This->parent->decoder_info.block_format,
NULL,
688 IWICStream_Release(
stream);
694 *ppIMetadataReader =
NULL;
702 FIXME(
"%p,%p\n", iface, ppIEnumMetadata);
723 TRACE(
"(%p,%u,%p)\n", iface,
index, ppIBitmapFrame);
748 result->metadata_count = 0;
764 TRACE(
"-> %ux%u, %u-bit pixelformat=%s res=%f,%f colors=%lu contexts=%lu\n",
765 result->decoder_frame.width,
result->decoder_frame.height,
768 result->decoder_frame.num_colors,
result->decoder_frame.num_color_contexts);
769 IWICBitmapDecoder_AddRef(&
This->IWICBitmapDecoder_iface);
770 *ppIBitmapFrame = &
result->IWICBitmapFrameDecode_iface;
774 *ppIBitmapFrame =
NULL;
805 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": CommonDecoder.lock");
807 hr = IWICBitmapDecoder_QueryInterface(&
This->IWICBitmapDecoder_iface, iid,
ppv);
808 IWICBitmapDecoder_Release(&
This->IWICBitmapDecoder_iface);
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HRESULT create_instance(const CLSID *clsid, const IID *iid, void **ppv)
static HRESULT CommonDecoderFrame_InitializeMetadata(CommonDecoderFrame *This)
static ULONG WINAPI CommonDecoder_AddRef(IWICBitmapDecoder *iface)
static ULONG WINAPI CommonDecoderFrame_Block_AddRef(IWICMetadataBlockReader *iface)
static HRESULT WINAPI CommonDecoderFrame_Block_GetCount(IWICMetadataBlockReader *iface, UINT *pcCount)
static HRESULT WINAPI CommonDecoderFrame_Block_GetEnumerator(IWICMetadataBlockReader *iface, IEnumUnknown **ppIEnumMetadata)
static HRESULT WINAPI CommonDecoderFrame_Block_GetReaderByIndex(IWICMetadataBlockReader *iface, UINT nIndex, IWICMetadataReader **ppIMetadataReader)
static CommonDecoderFrame * impl_from_IWICMetadataBlockReader(IWICMetadataBlockReader *iface)
static HRESULT WINAPI CommonDecoderFrame_GetThumbnail(IWICBitmapFrameDecode *iface, IWICBitmapSource **ppIThumbnail)
static CommonDecoder * impl_from_IWICBitmapDecoder(IWICBitmapDecoder *iface)
static HRESULT WINAPI CommonDecoder_GetColorContexts(IWICBitmapDecoder *iface, UINT cCount, IWICColorContext **ppIColorContexts, UINT *pcActualCount)
static HRESULT WINAPI CommonDecoderFrame_GetMetadataQueryReader(IWICBitmapFrameDecode *iface, IWICMetadataQueryReader **ppIMetadataQueryReader)
static HRESULT WINAPI CommonDecoder_GetFrameCount(IWICBitmapDecoder *iface, UINT *pCount)
static HRESULT WINAPI CommonDecoderFrame_QueryInterface(IWICBitmapFrameDecode *iface, REFIID iid, void **ppv)
HRESULT CommonDecoder_CreateInstance(struct decoder *decoder, const struct decoder_info *decoder_info, REFIID iid, void **ppv)
static CommonDecoderFrame * impl_from_IWICBitmapFrameDecode(IWICBitmapFrameDecode *iface)
static ULONG WINAPI CommonDecoderFrame_Block_Release(IWICMetadataBlockReader *iface)
static HRESULT WINAPI CommonDecoderFrame_GetPixelFormat(IWICBitmapFrameDecode *iface, WICPixelFormatGUID *pPixelFormat)
static HRESULT WINAPI CommonDecoder_QueryCapability(IWICBitmapDecoder *iface, IStream *stream, DWORD *capability)
static HRESULT WINAPI CommonDecoderFrame_CopyPalette(IWICBitmapFrameDecode *iface, IWICPalette *pIPalette)
static HRESULT WINAPI CommonDecoder_GetDecoderInfo(IWICBitmapDecoder *iface, IWICBitmapDecoderInfo **ppIDecoderInfo)
static HRESULT WINAPI CommonDecoderFrame_GetResolution(IWICBitmapFrameDecode *iface, double *pDpiX, double *pDpiY)
static ULONG WINAPI CommonDecoder_Release(IWICBitmapDecoder *iface)
static HRESULT WINAPI CommonDecoder_QueryInterface(IWICBitmapDecoder *iface, REFIID iid, void **ppv)
static HRESULT WINAPI CommonDecoder_GetThumbnail(IWICBitmapDecoder *iface, IWICBitmapSource **ppIThumbnail)
static HRESULT WINAPI CommonDecoderFrame_GetSize(IWICBitmapFrameDecode *iface, UINT *puiWidth, UINT *puiHeight)
static HRESULT WINAPI CommonDecoderFrame_GetColorContexts(IWICBitmapFrameDecode *iface, UINT cCount, IWICColorContext **ppIColorContexts, UINT *pcActualCount)
static HRESULT WINAPI CommonDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface, IWICMetadataQueryReader **reader)
static ULONG WINAPI CommonDecoderFrame_AddRef(IWICBitmapFrameDecode *iface)
static const IWICBitmapFrameDecodeVtbl CommonDecoderFrameVtbl
static ULONG WINAPI CommonDecoderFrame_Release(IWICBitmapFrameDecode *iface)
static HRESULT WINAPI CommonDecoder_GetContainerFormat(IWICBitmapDecoder *iface, GUID *pguidContainerFormat)
static HRESULT WINAPI CommonDecoder_GetFrame(IWICBitmapDecoder *iface, UINT index, IWICBitmapFrameDecode **ppIBitmapFrame)
static HRESULT WINAPI CommonDecoderFrame_Block_QueryInterface(IWICMetadataBlockReader *iface, REFIID iid, void **ppv)
static HRESULT WINAPI CommonDecoder_Initialize(IWICBitmapDecoder *iface, IStream *pIStream, WICDecodeOptions cacheOptions)
static HRESULT WINAPI CommonDecoderFrame_CopyPixels(IWICBitmapFrameDecode *iface, const WICRect *prc, UINT cbStride, UINT cbBufferSize, BYTE *pbBuffer)
static HRESULT WINAPI CommonDecoderFrame_Block_GetContainerFormat(IWICMetadataBlockReader *iface, GUID *pguidContainerFormat)
static HRESULT WINAPI CommonDecoder_CopyPalette(IWICBitmapDecoder *iface, IWICPalette *palette)
static HRESULT WINAPI CommonDecoder_GetPreview(IWICBitmapDecoder *iface, IWICBitmapSource **ppIBitmapSource)
static const IWICMetadataBlockReaderVtbl CommonDecoderFrame_BlockVtbl
static const IWICBitmapDecoderVtbl CommonDecoder_Vtbl
static GpStatus get_decoder_info(IStream *stream, const struct image_codec **result)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
GLuint GLsizei GLsizei * length
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
#define memcpy(s1, s2, n)
#define IsEqualIID(riid1, riid2)
static __inline const char * wine_dbgstr_guid(const GUID *id)
IWICBitmapFrameDecode IWICBitmapFrameDecode_iface
IWICMetadataBlockReader IWICMetadataBlockReader_iface
BOOL metadata_initialized
struct decoder_block * metadata_blocks
WICDecodeOptions cache_options
IWICBitmapDecoder IWICBitmapDecoder_iface
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define CONTAINING_RECORD(address, type, field)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
@ WICDecodeMetadataCacheOnDemand
@ WICDecodeMetadataCacheOnLoad
@ WICBitmapDecoderCapabilityCanEnumerateMetadata
HRESULT CDECL decoder_get_color_context(struct decoder *decoder, UINT frame, UINT num, BYTE **data, DWORD *datasize)
HRESULT CDECL decoder_get_frame_info(struct decoder *decoder, UINT frame, struct decoder_frame *info)
HRESULT CDECL decoder_initialize(struct decoder *decoder, IStream *stream, struct decoder_stat *st)
HRESULT CDECL decoder_copy_pixels(struct decoder *decoder, UINT frame, const WICRect *prc, UINT stride, UINT buffersize, BYTE *buffer)
HRESULT CDECL decoder_get_metadata_blocks(struct decoder *decoder, UINT frame, UINT *count, struct decoder_block **blocks)
void CDECL decoder_destroy(struct decoder *decoder)
static const char * debug_wic_rect(const WICRect *rect)
#define DECODER_FLAGS_UNSUPPORTED_COLOR_CONTEXT
#define DECODER_BLOCK_READER_CLSID
#define DECODER_BLOCK_OPTION_MASK
#define DECODER_BLOCK_FULL_STREAM
#define DECODER_FLAGS_CAPABILITY_MASK
#define WINCODEC_ERR_WRONGSTATE
#define WINCODEC_ERR_UNSUPPORTEDOPERATION
#define WINCODEC_ERR_PALETTEUNAVAILABLE
#define WINCODEC_ERR_CODECNOTHUMBNAIL
#define WINCODEC_ERR_FRAMEMISSING
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO