66 for (
i=0;
i<
This->item_count;
i++)
91 (
IsEqualIID(&IID_IWICMetadataWriter, iid) &&
This->vtable->is_writer))
93 *
ppv = &
This->IWICMetadataWriter_iface;
99 *
ppv = &
This->IWICPersistStream_iface;
101 else if (
IsEqualIID(&IID_IWICStreamProvider, iid))
103 *
ppv = &
This->IWICStreamProvider_iface;
120 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
130 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
135 This->lock.DebugInfo->Spare[0] = 0;
150 TRACE(
"%p,%p\n", iface, ppIHandler);
155 hr = IWICComponentInfo_QueryInterface(component_info, &IID_IWICMetadataHandlerInfo,
156 (
void **)ppIHandler);
158 IWICComponentInfo_Release(component_info);
163 GUID *pguidMetadataFormat)
168 TRACE(
"%p,%p\n", iface, pguidMetadataFormat);
175 hr = IWICMetadataHandlerInfo_GetMetadataFormat(metadata_info, pguidMetadataFormat);
176 IWICMetadataHandlerInfo_Release(metadata_info);
186 TRACE(
"%p,%p\n", iface, pcCount);
190 *pcCount =
This->item_count;
224 const PROPVARIANT *
schema,
const PROPVARIANT *
id, PROPVARIANT *
value)
236 for (
i = 0;
i <
This->item_count;
i++)
257 TRACE(
"(%p,%p)\n", iface, ppIEnumMetadata);
262 const PROPVARIANT *pvarSchema,
const PROPVARIANT *pvarId,
const PROPVARIANT *pvarValue)
264 FIXME(
"(%p,%p,%p,%p): stub\n", iface, pvarSchema, pvarId, pvarValue);
269 UINT nIndex,
const PROPVARIANT *pvarSchema,
const PROPVARIANT *pvarId,
const PROPVARIANT *pvarValue)
271 FIXME(
"(%p,%u,%p,%p,%p): stub\n", iface, nIndex, pvarSchema, pvarId, pvarValue);
276 const PROPVARIANT *pvarSchema,
const PROPVARIANT *pvarId)
278 FIXME(
"(%p,%p,%p): stub\n", iface, pvarSchema, pvarId);
285 FIXME(
"(%p,%u): stub\n", iface, nIndex);
309 return IWICMetadataWriter_QueryInterface(&
This->IWICMetadataWriter_iface, iid,
ppv);
315 return IWICMetadataWriter_AddRef(&
This->IWICMetadataWriter_iface);
321 return IWICMetadataWriter_Release(&
This->IWICMetadataWriter_iface);
327 FIXME(
"(%p,%p): stub\n", iface, pClassID);
333 FIXME(
"(%p): stub\n", iface);
341 TRACE(
"(%p,%p)\n", iface, pStm);
348 FIXME(
"(%p,%p,%i): stub\n", iface, pStm, fClearDirty);
355 FIXME(
"(%p,%p): stub\n", iface, pcbSize);
373 hr =
This->vtable->fnLoad(
stream, pguidPreferredVendor, dwPersistOptions,
374 &new_items, &item_count);
380 This->items = new_items;
381 This->item_count = item_count;
392 FIXME(
"(%p,%p,%lx,%i): stub\n", iface, pIStream, dwPersistOptions, fClearDirty);
412 return IWICMetadataWriter_QueryInterface(&
handler->IWICMetadataWriter_iface, iid,
ppv);
418 return IWICMetadataWriter_AddRef(&
handler->IWICMetadataWriter_iface);
424 return IWICMetadataWriter_Release(&
handler->IWICMetadataWriter_iface);
450 FIXME(
"%p stub\n", iface);
484 This->item_count = 0;
491 This->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": MetadataHandler.lock");
493 hr = IWICMetadataWriter_QueryInterface(&
This->IWICMetadataWriter_iface, iid,
ppv);
495 IWICMetadataWriter_Release(&
This->IWICMetadataWriter_iface);
523 *
ppv = &
This->IWICEnumMetadataItem_iface;
540 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
550 TRACE(
"(%p) refcount=%lu\n", iface,
ref);
554 IWICMetadataWriter_Release(&
This->parent->IWICMetadataWriter_iface);
562 ULONG celt, PROPVARIANT *rgeltSchema, PROPVARIANT *rgeltId,
563 PROPVARIANT *rgeltValue,
ULONG *pceltFetched)
571 TRACE(
"(%p,%li)\n", iface, celt);
574 pceltFetched = &fetched;
578 if (
This->index >=
This->parent->item_count)
585 new_index =
min(
This->parent->item_count,
This->index + celt);
586 *pceltFetched = new_index -
This->index;
605 This->index = new_index;
672 *ppIEnumMetadataItem =
NULL;
677 IWICMetadataWriter_AddRef(&
parent->IWICMetadataWriter_iface);
684 *ppIEnumMetadataItem = &
This->IWICEnumMetadataItem_iface;
723 PropVariantInit(&
result[0].
id);
727 result[0].value.blob.cbSize = bytesread;
738 &CLSID_WICUnknownMetadataReader,
747#define SWAP_USHORT(x) do { if (!native_byte_order) (x) = RtlUshortByteSwap(x); } while(0)
748#define SWAP_ULONG(x) do { if (!native_byte_order) (x) = RtlUlongByteSwap(x); } while(0)
749#define SWAP_ULONGLONG(x) do { if (!native_byte_order) (x) = RtlUlonglongByteSwap(x); } while(0)
763#define IFD_RATIONAL 5
765#define IFD_UNDEFINED 7
768#define IFD_SRATIONAL 10
775 static const int tag2vt[] =
943 FIXME(
"IFD field type %d, count 0\n",
type);
956 hr = IStream_Read(
input, &ull,
sizeof(ull), &bytesread);
957 if (bytesread !=
sizeof(ull))
hr =
E_FAIL;
960 item->value.uhVal.QuadPart = ull;
1010 const char *
data = (
const char *)&
entry->value;
1035 FIXME(
"IFD field type %d, count 0\n",
type);
1047 const char *
data = (
const char *)&
entry->value;
1068 FIXME(
"loading field of type %d, count %lu is not implemented\n",
type,
count);
1086#ifdef WORDS_BIGENDIAN
1091 native_byte_order =
FALSE;
1111 for (
i = 0;
i < 4096;
i++)
1113 ULONG next_ifd_offset;
1117 hr = IStream_Read(
input, &next_ifd_offset,
sizeof(next_ifd_offset), &bytesread);
1118 if (bytesread !=
sizeof(next_ifd_offset))
hr =
E_FAIL;
1122 if (!next_ifd_offset)
break;
1124 pos.QuadPart = next_ifd_offset;
1128 hr = IStream_Read(
input, &next_ifd_count,
sizeof(next_ifd_count), &bytesread);
1129 if (bytesread !=
sizeof(next_ifd_count))
hr =
E_FAIL;
1134 pos.QuadPart = next_ifd_count *
sizeof(*entry);
1166 *item_count =
count;
1173 &CLSID_WICIfdMetadataReader,
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
UINT(* handler)(MSIPACKAGE *)
HRESULT WINAPI PropVariantClear(PROPVARIANT *pvar)
HRESULT WINAPI PropVariantCopy(PROPVARIANT *pvarDest, const PROPVARIANT *pvarSrc)
INT WINAPI PropVariantCompareEx(REFPROPVARIANT propvar1, REFPROPVARIANT propvar2, PROPVAR_COMPARE_UNIT unit, PROPVAR_COMPARE_FLAGS flags)
HRESULT CreateComponentInfo(REFCLSID clsid, IWICComponentInfo **ppIInfo)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLenum GLenum input
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
VOID WINAPI CoTaskMemFree(LPVOID ptr)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define memcpy(s1, s2, n)
const GUID IID_IPersistStream
#define IsEqualIID(riid1, riid2)
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)
@ WICPersistOptionBigEndian
@ WICPersistOptionDefault
@ WICPersistOptionLittleEndian
#define WINCODEC_ERR_BADMETADATAHEADER
#define WINCODEC_ERR_PROPERTYNOTFOUND
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO