From 7f88d691ad4824d10fff0fd47b60949ab7447856 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Wed, 27 Jan 2021 20:33:50 +0300 Subject: [PATCH] windowscodecs: Implement CommonEncoderFrame_GetMetadataQueryWriter(). Signed-off-by: Paul Gofman Signed-off-by: Esme Povirk Signed-off-by: Alexandre Julliard --- dlls/windowscodecs/encoder.c | 16 ++++++++++++++-- dlls/windowscodecs/gifformat.c | 13 +++++++++++-- dlls/windowscodecs/tests/metadata.c | 8 +++----- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/dlls/windowscodecs/encoder.c b/dlls/windowscodecs/encoder.c index e72ceb0735c..a213e7d14d0 100644 --- a/dlls/windowscodecs/encoder.c +++ b/dlls/windowscodecs/encoder.c @@ -467,8 +467,20 @@ static HRESULT WINAPI CommonEncoderFrame_Commit(IWICBitmapFrameEncode *iface) static HRESULT WINAPI CommonEncoderFrame_GetMetadataQueryWriter(IWICBitmapFrameEncode *iface, IWICMetadataQueryWriter **ppIMetadataQueryWriter) { - FIXME("(%p, %p): stub\n", iface, ppIMetadataQueryWriter); - return E_NOTIMPL; + CommonEncoderFrame *encoder = impl_from_IWICBitmapFrameEncode(iface); + + TRACE("iface, %p, ppIMetadataQueryWriter %p.\n", iface, ppIMetadataQueryWriter); + + if (!ppIMetadataQueryWriter) + return E_INVALIDARG; + + if (!encoder->initialized) + return WINCODEC_ERR_NOTINITIALIZED; + + if (!(encoder->parent->encoder_info.flags & ENCODER_FLAGS_SUPPORTS_METADATA)) + return WINCODEC_ERR_UNSUPPORTEDOPERATION; + + return MetadataQueryWriter_CreateInstance(&encoder->IWICMetadataBlockWriter_iface, NULL, ppIMetadataQueryWriter); } static const IWICBitmapFrameEncodeVtbl CommonEncoderFrame_Vtbl = { diff --git a/dlls/windowscodecs/gifformat.c b/dlls/windowscodecs/gifformat.c index c807a7ee7db..53aeaec7e8d 100644 --- a/dlls/windowscodecs/gifformat.c +++ b/dlls/windowscodecs/gifformat.c @@ -2117,8 +2117,17 @@ static HRESULT WINAPI GifFrameEncode_Commit(IWICBitmapFrameEncode *iface) static HRESULT WINAPI GifFrameEncode_GetMetadataQueryWriter(IWICBitmapFrameEncode *iface, IWICMetadataQueryWriter **writer) { - FIXME("%p, %p: stub\n", iface, writer); - return E_NOTIMPL; + GifFrameEncode *encode = impl_from_IWICBitmapFrameEncode(iface); + + TRACE("iface, %p, writer %p.\n", iface, writer); + + if (!writer) + return E_INVALIDARG; + + if (!encode->initialized) + return WINCODEC_ERR_NOTINITIALIZED; + + return MetadataQueryWriter_CreateInstance(&encode->IWICMetadataBlockWriter_iface, NULL, writer); } static const IWICBitmapFrameEncodeVtbl GifFrameEncode_Vtbl = diff --git a/dlls/windowscodecs/tests/metadata.c b/dlls/windowscodecs/tests/metadata.c index aaa733380fa..c1339e4bd1d 100644 --- a/dlls/windowscodecs/tests/metadata.c +++ b/dlls/windowscodecs/tests/metadata.c @@ -3106,8 +3106,7 @@ static void test_metadata_writer(void) ok(hr == (tests[i].metadata_supported ? S_OK : E_INVALIDARG), "Got unexpected hr %#x, i %u.\n", hr, i); hr = IWICBitmapFrameEncode_GetMetadataQueryWriter(frameencode, &querywriter2); - todo_wine - ok(hr == (tests[i].succeeds_unitialized ? S_OK : WINCODEC_ERR_NOTINITIALIZED), + todo_wine_if(!i) ok(hr == (tests[i].succeeds_unitialized ? S_OK : WINCODEC_ERR_NOTINITIALIZED), "Got unexpected hr %#x, i %u.\n", hr, i); if (hr == S_OK) IWICMetadataQueryWriter_Release(querywriter2); @@ -3116,7 +3115,7 @@ static void test_metadata_writer(void) ok(hr == S_OK, "Got unexpected hr %#x, i %u.\n", hr, i); hr = IWICBitmapFrameEncode_GetMetadataQueryWriter(frameencode, &querywriter2); - todo_wine ok(hr == (tests[i].metadata_supported ? S_OK : WINCODEC_ERR_UNSUPPORTEDOPERATION), + todo_wine_if(!i) ok(hr == (tests[i].metadata_supported ? S_OK : WINCODEC_ERR_UNSUPPORTEDOPERATION), "Got unexpected hr %#x, i %u.\n", hr, i); if (tests[i].metadata_supported) @@ -3126,8 +3125,7 @@ static void test_metadata_writer(void) if (querywriter) { IWICMetadataQueryWriter_Release(querywriter); - if (querywriter2) - IWICMetadataQueryWriter_Release(querywriter2); + IWICMetadataQueryWriter_Release(querywriter2); IWICMetadataBlockWriter_Release(blockwriter); } IWICBitmapFrameEncode_Release(frameencode);