[4/4] windowscodecs: Add WICIfdMetadataReader registration.

Dmitry Timoshkov dmitry at baikal.ru
Wed Jun 6 23:22:13 CDT 2012


---
 dlls/windowscodecs/regsvr.c                   |   45 +++++++++++++++++++------
 dlls/windowscodecs/tests/metadata.c           |   12 +++++--
 dlls/windowscodecs/windowscodecs_wincodec.idl |    7 ++++
 3 files changed, 52 insertions(+), 12 deletions(-)

diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c
index ae4f133..5f4d3d8 100644
--- a/dlls/windowscodecs/regsvr.c
+++ b/dlls/windowscodecs/regsvr.c
@@ -1290,18 +1290,43 @@ static struct regsvr_converter const converter_list[] = {
     { NULL }			/* list terminator */
 };
 
+static const BYTE no_magic[1] = { 0 };
+static const BYTE no_mask[1] = { 0 };
+
+static const struct metadata_pattern ifd_metadata_pattern[] = {
+    { 0, 1, no_magic, no_mask, 0 },
+    { 0 }
+};
+
+static const struct reader_containers ifd_containers[] = {
+    {
+        &GUID_ContainerFormatTiff,
+        ifd_metadata_pattern
+    },
+    { NULL } /* list terminator */
+};
+
 static struct regsvr_metadatareader const metadatareader_list[] = {
     {   &CLSID_WICUnknownMetadataReader,
-    "The Wine Project",
-    "Unknown Metadata Reader",
-    "1.0.0.0",
-    "1.0.0.0",
-    &GUID_VendorMicrosoft,
-    &GUID_MetadataFormatUnknown,
-    0,
-    0,
-    0,
-    NULL
+        "The Wine Project",
+        "Unknown Metadata Reader",
+        "1.0.0.0",
+        "1.0.0.0",
+        &GUID_VendorMicrosoft,
+        &GUID_MetadataFormatUnknown,
+        0, 0, 0,
+        NULL
+    },
+    {
+        &CLSID_WICIfdMetadataReader,
+        "The Wine Project",
+        "Ifd Reader",
+        "1.0.0.0",
+        "1.0.0.0",
+        &GUID_VendorMicrosoft,
+        &GUID_MetadataFormatIfd,
+        1, 1, 0,
+        ifd_containers
     },
     { NULL }			/* list terminator */
 };
diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c
index 70a3913..3301477 100644
--- a/dlls/windowscodecs/tests/metadata.c
+++ b/dlls/windowscodecs/tests/metadata.c
@@ -354,8 +354,7 @@ static void test_metadata_IFD(void)
 
     hr = CoCreateInstance(&CLSID_WICIfdMetadataReader, NULL, CLSCTX_INPROC_SERVER,
         &IID_IWICMetadataReader, (void**)&reader);
-    todo_wine ok(hr == S_OK, "CoCreateInstance error %#x\n", hr);
-    if (FAILED(hr)) return;
+    ok(hr == S_OK, "CoCreateInstance error %#x\n", hr);
 
     hr = IWICMetadataReader_GetCount(reader, NULL);
     ok(hr == E_INVALIDARG, "GetCount error %#x\n", hr);
@@ -368,6 +367,7 @@ static void test_metadata_IFD(void)
 
     hr = IWICMetadataReader_GetCount(reader, &count);
     ok(hr == S_OK, "GetCount error %#x\n", hr);
+todo_wine
     ok(count == 6, "unexpected count %u\n", count);
 
     hr = IWICMetadataReader_GetEnumerator(reader, NULL);
@@ -400,14 +400,22 @@ 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");
 
     hr = IWICMetadataReader_GetValueByIndex(reader, 0, NULL, NULL, NULL);
+todo_wine
     ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
+    if (FAILED(hr))
+    {
+        IWICMetadataReader_Release(reader);
+        return;
+    }
 
     hr = IWICMetadataReader_GetValueByIndex(reader, count - 1, NULL, NULL, NULL);
     ok(hr == S_OK, "GetValueByIndex error %#x\n", hr);
diff --git a/dlls/windowscodecs/windowscodecs_wincodec.idl b/dlls/windowscodecs/windowscodecs_wincodec.idl
index 56cf112..bc4c994 100644
--- a/dlls/windowscodecs/windowscodecs_wincodec.idl
+++ b/dlls/windowscodecs/windowscodecs_wincodec.idl
@@ -128,3 +128,10 @@ coclass WineTgaDecoder { interface IWICBitmapDecoder; }
     uuid(699745c2-5066-4b82-a8e3-d40478dbec8c)
 ]
 coclass WICUnknownMetadataReader { interface IWICMetadataReader; }
+
+[
+    helpstring("WIC Ifd Metadata Reader"),
+    threading(both),
+    uuid(8f914656-9d0a-4eb2-9019-0bf96d8a9ee6)
+]
+coclass WICIfdMetadataReader { interface IWICIfdMetadataReader; }
-- 
1.7.10.1




More information about the wine-patches mailing list