Paul Gofman : windowscodecs: Implement CommonEncoderFrame_GetMetadataQueryWriter().

Alexandre Julliard julliard at winehq.org
Thu Jan 28 15:41:40 CST 2021


Module: wine
Branch: master
Commit: 7f88d691ad4824d10fff0fd47b60949ab7447856
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7f88d691ad4824d10fff0fd47b60949ab7447856

Author: Paul Gofman <pgofman at codeweavers.com>
Date:   Wed Jan 27 20:33:50 2021 +0300

windowscodecs: Implement CommonEncoderFrame_GetMetadataQueryWriter().

Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
Signed-off-by: Esme Povirk <esme at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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);




More information about the wine-cvs mailing list