From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/windowscodecs/clsfactory.c | 1 + dlls/windowscodecs/pngformat.c | 13 +++++++++++++ dlls/windowscodecs/regsvr.c | 9 +++++++++ dlls/windowscodecs/tests/metadata.c | 7 ------- dlls/windowscodecs/wincodecs_private.h | 1 + dlls/windowscodecs/windowscodecs_wincodec.idl | 7 +++++++ 6 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/dlls/windowscodecs/clsfactory.c b/dlls/windowscodecs/clsfactory.c index e6c106d888f..e7cde87ce71 100644 --- a/dlls/windowscodecs/clsfactory.c +++ b/dlls/windowscodecs/clsfactory.c @@ -77,6 +77,7 @@ static const classinfo wic_classes[] = { {&CLSID_WICPngHistMetadataReader, PngHistReader_CreateInstance}, {&CLSID_WICPngTextMetadataReader, PngTextReader_CreateInstance}, {&CLSID_WICPngTimeMetadataReader, PngTimeReader_CreateInstance}, + {&CLSID_WICPngTimeMetadataWriter, PngTimeWriter_CreateInstance}, {&CLSID_WICLSDMetadataReader, LSDReader_CreateInstance}, {&CLSID_WICIMDMetadataReader, IMDReader_CreateInstance}, {&CLSID_WICGCEMetadataReader, GCEReader_CreateInstance}, diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c index 47d3d08cafd..77bfbdc4866 100644 --- a/dlls/windowscodecs/pngformat.c +++ b/dlls/windowscodecs/pngformat.c @@ -506,6 +506,19 @@ HRESULT PngTimeReader_CreateInstance(REFIID iid, void** ppv) return MetadataReader_Create(&TimeReader_Vtbl, iid, ppv); }
+static const MetadataHandlerVtbl TimeWriter_Vtbl = +{ + METADATAHANDLER_FIXED_ITEMS | METADATAHANDLER_IS_WRITER, + &CLSID_WICPngTimeMetadataWriter, + LoadTimeMetadata, + CreateTimeHandler, +}; + +HRESULT PngTimeWriter_CreateInstance(REFIID iid, void** ppv) +{ + return MetadataReader_Create(&TimeWriter_Vtbl, iid, ppv); +} + static HRESULT create_bkgd_item(const PROPVARIANT *value, MetadataItem **ret) { MetadataItem *item; diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c index f93c65f1d3f..71c9d3b736c 100644 --- a/dlls/windowscodecs/regsvr.c +++ b/dlls/windowscodecs/regsvr.c @@ -2122,6 +2122,15 @@ static struct regsvr_metadatawriter const metadatawriters_list[] = &GUID_VendorMicrosoft, &GUID_MetadataFormatChunkbKGD, }, + { + &CLSID_WICPngTimeMetadataWriter, + "The Wine Project", + "Png tIME Metadata Writer", + "1.0.0.0", + "1.0.0.0", + &GUID_VendorMicrosoft, + &GUID_MetadataFormatChunktIME, + }, { NULL } /* list terminator */ };
diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index 44f83e387ea..d051c187d3d 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -1652,17 +1652,13 @@ static void test_metadata_tIME(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IEnumString_Next(enum_string, 1, &str, NULL); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(!wcscmp(str, L"/tIME"), "Unexpected query %s.\n", wine_dbgstr_w(str)); CoTaskMemFree(str); IEnumString_Release(enum_string);
PropVariantInit(&value); hr = IWICMetadataQueryReader_GetMetadataByName(query_reader, L"/tIME", &value); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -if (hr == S_OK) -{ ok(value.vt == VT_UNKNOWN, "Unexpected value type %d.\n", value.vt); hr = IUnknown_QueryInterface(value.punkVal, &IID_IWICMetadataQueryReader, (void **)&query_reader2); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -1697,16 +1693,13 @@ if (hr == S_OK) PropVariantClear(&value);
IWICMetadataQueryReader_Release(query_reader2); -} IWICMetadataQueryReader_Release(query_reader);
IWICMetadataReader_Release(reader);
hr = CoCreateInstance(&CLSID_WICPngTimeMetadataWriter, NULL, CLSCTX_INPROC_SERVER, &IID_IWICMetadataWriter, (void **)&writer); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - if (FAILED(hr)) return;
check_interface(writer, &IID_IWICMetadataWriter, TRUE); check_interface(writer, &IID_IWICMetadataReader, TRUE); diff --git a/dlls/windowscodecs/wincodecs_private.h b/dlls/windowscodecs/wincodecs_private.h index a156e926997..2608b72b35c 100644 --- a/dlls/windowscodecs/wincodecs_private.h +++ b/dlls/windowscodecs/wincodecs_private.h @@ -266,6 +266,7 @@ extern HRESULT PngGamaReader_CreateInstance(REFIID iid, void** ppv); extern HRESULT PngHistReader_CreateInstance(REFIID iid, void** ppv); extern HRESULT PngTextReader_CreateInstance(REFIID iid, void** ppv); extern HRESULT PngTimeReader_CreateInstance(REFIID iid, void** ppv); +extern HRESULT PngTimeWriter_CreateInstance(REFIID iid, void** ppv); extern HRESULT LSDReader_CreateInstance(REFIID iid, void **ppv); extern HRESULT IMDReader_CreateInstance(REFIID iid, void **ppv); extern HRESULT GCEReader_CreateInstance(REFIID iid, void **ppv); diff --git a/dlls/windowscodecs/windowscodecs_wincodec.idl b/dlls/windowscodecs/windowscodecs_wincodec.idl index b788a716844..624a7f8610d 100644 --- a/dlls/windowscodecs/windowscodecs_wincodec.idl +++ b/dlls/windowscodecs/windowscodecs_wincodec.idl @@ -245,6 +245,13 @@ coclass WICPngTextMetadataReader { interface IWICMetadataReader; } ] coclass WICPngTimeMetadataReader { interface IWICMetadataReader; }
+[ + helpstring("WIC Png tIME Metadata Writer"), + threading(both), + uuid(1ab78400-b5a3-4d91-8ace-33fcd1499be6) +] +coclass WICPngTimeMetadataWriter { interface IWICMetadataWriter; } + [ helpstring("WIC Png bKGD Metadata Reader"), threading(both),