[11/11] windowscodecs: Implement GetMetadataFormat. Resend.
Dmitry Timoshkov
dmitry at baikal.ru
Wed Jun 13 04:31:55 CDT 2012
---
dlls/windowscodecs/metadatahandler.c | 11 ++++++++---
dlls/windowscodecs/tests/metadata.c | 31 +++++++++++++++++++++++++------
dlls/windowscodecs/wincodecs_private.h | 1 +
3 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/dlls/windowscodecs/metadatahandler.c b/dlls/windowscodecs/metadatahandler.c
index a65de1b..3a83dad 100644
--- a/dlls/windowscodecs/metadatahandler.c
+++ b/dlls/windowscodecs/metadatahandler.c
@@ -136,10 +136,13 @@ static ULONG WINAPI MetadataHandler_Release(IWICMetadataWriter *iface)
static HRESULT WINAPI MetadataHandler_GetMetadataFormat(IWICMetadataWriter *iface,
GUID *pguidMetadataFormat)
{
+ MetadataHandler *This = impl_from_IWICMetadataWriter(iface);
+
if (!pguidMetadataFormat) return E_INVALIDARG;
- FIXME("(%p,%s): stub\n", iface, debugstr_guid(pguidMetadataFormat));
- return E_NOTIMPL;
+ *pguidMetadataFormat = *This->vtable->metadata_format;
+ TRACE("%p,%s\n", iface, debugstr_guid(pguidMetadataFormat));
+ return S_OK;
}
static HRESULT WINAPI MetadataHandler_GetMetadataHandlerInfo(IWICMetadataWriter *iface,
@@ -333,7 +336,7 @@ static HRESULT MetadataReader_Create(const MetadataHandlerVtbl *vtable, IUnknown
MetadataHandler *This;
HRESULT hr;
- TRACE("%s\n", debugstr_guid(vtable->clsid));
+ TRACE("%s, %s\n", debugstr_guid(vtable->clsid), debugstr_guid(vtable->metadata_format));
*ppv = NULL;
@@ -593,6 +596,7 @@ static HRESULT LoadUnknownMetadata(IStream *input, const GUID *preferred_vendor,
static const MetadataHandlerVtbl UnknownMetadataReader_Vtbl = {
0,
&CLSID_WICUnknownMetadataReader,
+ &GUID_MetadataFormatUnknown,
LoadUnknownMetadata
};
@@ -983,6 +987,7 @@ static HRESULT LoadIfdMetadata(IStream *input, const GUID *preferred_vendor,
static const MetadataHandlerVtbl IfdMetadataReader_Vtbl = {
0,
&CLSID_WICIfdMetadataReader,
+ &GUID_MetadataFormatIfd,
LoadIfdMetadata
};
diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c
index 65174d0..d07aa7b 100644
--- a/dlls/windowscodecs/tests/metadata.c
+++ b/dlls/windowscodecs/tests/metadata.c
@@ -218,14 +218,23 @@ static void test_metadata_unknown(void)
IWICMetadataBlockReader *blockreader;
PROPVARIANT schema, id, value;
ULONG items_returned;
+ GUID format;
hr = CoCreateInstance(&CLSID_WICUnknownMetadataReader, NULL, CLSCTX_INPROC_SERVER,
&IID_IWICMetadataReader, (void**)&reader);
ok(hr == S_OK, "CoCreateInstance failed, hr=%x\n", hr);
if (FAILED(hr)) return;
+ hr = IWICMetadataReader_GetMetadataFormat(reader, &format);
+ ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_MetadataFormatUnknown), "unexpected format %s\n", debugstr_guid(&format));
+
load_stream((IUnknown*)reader, metadata_unknown, sizeof(metadata_unknown));
+ hr = IWICMetadataReader_GetMetadataFormat(reader, &format);
+ ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_MetadataFormatUnknown), "unexpected format %s\n", debugstr_guid(&format));
+
hr = IWICMetadataReader_GetEnumerator(reader, &enumerator);
ok(hr == S_OK, "GetEnumerator failed, hr=%x\n", hr);
@@ -291,8 +300,16 @@ static void test_metadata_tEXt(void)
ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
ok(count == 0, "unexpected count %i\n", count);
+ hr = IWICMetadataReader_GetMetadataFormat(reader, &format);
+ ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_MetadataFormatChunktEXt), "unexpected format %s\n", debugstr_guid(&format));
+
load_stream((IUnknown*)reader, metadata_tEXt, sizeof(metadata_tEXt));
+ hr = IWICMetadataReader_GetMetadataFormat(reader, &format);
+ ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_MetadataFormatChunktEXt), "unexpected format %s\n", debugstr_guid(&format));
+
hr = IWICMetadataReader_GetCount(reader, &count);
ok(hr == S_OK, "GetCount failed, hr=%x\n", hr);
ok(count == 1, "unexpected count %i\n", count);
@@ -444,8 +461,16 @@ static void test_metadata_IFD(void)
ok(hr == S_OK, "GetCount error %#x\n", hr);
ok(count == 0, "unexpected count %u\n", count);
+ hr = IWICMetadataReader_GetMetadataFormat(reader, &format);
+ ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_MetadataFormatIfd), "unexpected format %s\n", debugstr_guid(&format));
+
load_stream((IUnknown*)reader, (const char *)&IFD_data, sizeof(IFD_data));
+ hr = IWICMetadataReader_GetMetadataFormat(reader, &format);
+ ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
+ ok(IsEqualGUID(&format, &GUID_MetadataFormatIfd), "unexpected format %s\n", debugstr_guid(&format));
+
hr = IWICMetadataReader_GetCount(reader, &count);
ok(hr == S_OK, "GetCount error %#x\n", hr);
ok(count == sizeof(td)/sizeof(td[0]), "unexpected count %u\n", count);
@@ -528,12 +553,6 @@ static void test_metadata_IFD(void)
IWICEnumMetadataItem_Release(enumerator);
- hr = IWICMetadataReader_GetMetadataFormat(reader, &format);
-todo_wine
- ok(hr == S_OK, "GetMetadataFormat error %#x\n", hr);
-todo_wine
- ok(IsEqualGUID(&format, &GUID_MetadataFormatIfd), "unexpected format %s\n", debugstr_guid(&format));
-
hr = IWICMetadataReader_GetMetadataFormat(reader, NULL);
ok(hr == E_INVALIDARG, "GetMetadataFormat should fail\n");
diff --git a/dlls/windowscodecs/wincodecs_private.h b/dlls/windowscodecs/wincodecs_private.h
index 92fa7ef..2e78899 100644
--- a/dlls/windowscodecs/wincodecs_private.h
+++ b/dlls/windowscodecs/wincodecs_private.h
@@ -76,6 +76,7 @@ typedef struct _MetadataHandlerVtbl
{
int is_writer;
const CLSID *clsid;
+ const GUID *metadata_format;
HRESULT (*fnLoad)(IStream *stream, const GUID *preferred_vendor,
DWORD persist_options, MetadataItem **items, DWORD *item_count);
HRESULT (*fnSave)(IStream *stream, DWORD persist_options,
--
1.7.10.1
More information about the wine-patches
mailing list