From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/windowscodecs/clsfactory.c | 1 + dlls/windowscodecs/metadatahandler.c | 12 ++++++++++++ dlls/windowscodecs/regsvr.c | 18 ++++++++++++++++++ dlls/windowscodecs/tests/metadata.c | 4 ++-- dlls/windowscodecs/wincodecs_private.h | 1 + dlls/windowscodecs/windowscodecs_wincodec.idl | 7 +++++++ 6 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/dlls/windowscodecs/clsfactory.c b/dlls/windowscodecs/clsfactory.c index 87b77c9c089..bbc21ce154b 100644 --- a/dlls/windowscodecs/clsfactory.c +++ b/dlls/windowscodecs/clsfactory.c @@ -63,6 +63,7 @@ static const classinfo wic_classes[] = { {&CLSID_WineTgaDecoder, TgaDecoder_CreateInstance}, {&CLSID_WICUnknownMetadataReader, UnknownMetadataReader_CreateInstance}, {&CLSID_WICIfdMetadataReader, IfdMetadataReader_CreateInstance}, + {&CLSID_WICGpsMetadataReader, GpsMetadataReader_CreateInstance}, {&CLSID_WICPngChrmMetadataReader, PngChrmReader_CreateInstance}, {&CLSID_WICPngGamaMetadataReader, PngGamaReader_CreateInstance}, {&CLSID_WICPngHistMetadataReader, PngHistReader_CreateInstance}, diff --git a/dlls/windowscodecs/metadatahandler.c b/dlls/windowscodecs/metadatahandler.c index 334f7c5f0c4..2f4fa70b0c3 100644 --- a/dlls/windowscodecs/metadatahandler.c +++ b/dlls/windowscodecs/metadatahandler.c @@ -1215,3 +1215,15 @@ HRESULT IfdMetadataReader_CreateInstance(REFIID iid, void **ppv) { return MetadataReader_Create(&IfdMetadataReader_Vtbl, iid, ppv); } + +static const MetadataHandlerVtbl GpsMetadataReader_Vtbl = +{ + 0, + &CLSID_WICGpsMetadataReader, + LoadIfdMetadata +}; + +HRESULT GpsMetadataReader_CreateInstance(REFIID iid, void **ppv) +{ + return MetadataReader_Create(&GpsMetadataReader_Vtbl, iid, ppv); +} diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c index c74fcecb3a2..b86e0d42396 100644 --- a/dlls/windowscodecs/regsvr.c +++ b/dlls/windowscodecs/regsvr.c @@ -1575,6 +1575,14 @@ static const struct reader_containers ifd_containers[] = { { NULL } /* list terminator */ };
+static const struct reader_containers gps_containers[] = { + { + &GUID_MetadataFormatIfd, + ifd_metadata_pattern + }, + { NULL } /* list terminator */ +}; + static const BYTE tEXt[] = "tEXt";
static const struct metadata_pattern pngtext_metadata_pattern[] = { @@ -1745,6 +1753,16 @@ static struct regsvr_metadatareader const metadatareader_list[] = { 1, 1, 0, ifd_containers }, + { &CLSID_WICGpsMetadataReader, + "The Wine Project", + "Gps Reader", + "1.0.0.0", + "1.0.0.0", + &GUID_VendorMicrosoft, + &GUID_MetadataFormatGps, + 1, 1, 0, + gps_containers + }, { &CLSID_WICPngChrmMetadataReader, "The Wine Project", "Chunk cHRM Reader", diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index 809da3bc9f3..902b4359585 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -1490,8 +1490,7 @@ static void test_metadata_Gps(void)
hr = CoCreateInstance(&CLSID_WICGpsMetadataReader, NULL, CLSCTX_INPROC_SERVER, &IID_IWICMetadataReader, (void **)&reader); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - if (FAILED(hr)) return; + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
check_interface(reader, &IID_IWICMetadataReader, TRUE); check_interface(reader, &IID_IPersist, TRUE); @@ -1518,6 +1517,7 @@ static void test_metadata_Gps(void)
hr = CoCreateInstance(&CLSID_WICGpsMetadataWriter, NULL, CLSCTX_INPROC_SERVER, &IID_IWICMetadataWriter, (void **)&writer); + todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); if (FAILED(hr)) return;
diff --git a/dlls/windowscodecs/wincodecs_private.h b/dlls/windowscodecs/wincodecs_private.h index 9da717fc345..e4a56b5ec93 100644 --- a/dlls/windowscodecs/wincodecs_private.h +++ b/dlls/windowscodecs/wincodecs_private.h @@ -217,6 +217,7 @@ extern HRESULT MetadataReader_Create(const MetadataHandlerVtbl *vtable, REFIID i
extern HRESULT UnknownMetadataReader_CreateInstance(REFIID iid, void** ppv); extern HRESULT IfdMetadataReader_CreateInstance(REFIID iid, void **ppv); +extern HRESULT GpsMetadataReader_CreateInstance(REFIID iid, void **ppv); extern HRESULT PngChrmReader_CreateInstance(REFIID iid, void** ppv); extern HRESULT PngGamaReader_CreateInstance(REFIID iid, void** ppv); extern HRESULT PngHistReader_CreateInstance(REFIID iid, void** ppv); diff --git a/dlls/windowscodecs/windowscodecs_wincodec.idl b/dlls/windowscodecs/windowscodecs_wincodec.idl index f47684890c1..2ffc883fc2e 100644 --- a/dlls/windowscodecs/windowscodecs_wincodec.idl +++ b/dlls/windowscodecs/windowscodecs_wincodec.idl @@ -160,6 +160,13 @@ coclass WICUnknownMetadataReader { interface IWICMetadataReader; } ] coclass WICIfdMetadataReader { interface IWICMetadataReader; }
+[ + helpstring("WIC Gps Metadata Reader"), + threading(both), + uuid(3697790b-223b-484e-9925-c4869218f17a) +] +coclass WICGpsMetadataReader { interface IWICMetadataReader; } + [ helpstring("WIC Png cHRM Metadata Reader"), threading(both),