Ziqing Hui : windowscodecs: Implement DdsEncoder_Initialize.

Alexandre Julliard julliard at winehq.org
Mon May 3 16:37:05 CDT 2021


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

Author: Ziqing Hui <zhui at codeweavers.com>
Date:   Sat May  1 11:14:50 2021 +0800

windowscodecs: Implement DdsEncoder_Initialize.

Signed-off-by: Ziqing Hui <zhui at codeweavers.com>
Signed-off-by: Esme Povirk <esme at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/windowscodecs/ddsformat.c       | 31 ++++++++++++++++++++++++++++---
 dlls/windowscodecs/tests/ddsformat.c |  4 ----
 2 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/dlls/windowscodecs/ddsformat.c b/dlls/windowscodecs/ddsformat.c
index ef6571842dd..e8a4f0e5c28 100644
--- a/dlls/windowscodecs/ddsformat.c
+++ b/dlls/windowscodecs/ddsformat.c
@@ -1754,10 +1754,35 @@ static ULONG WINAPI DdsEncoder_Release(IWICBitmapEncoder *iface)
 }
 
 static HRESULT WINAPI DdsEncoder_Initialize(IWICBitmapEncoder *iface,
-                                               IStream *pIStream, WICBitmapEncoderCacheOption cacheOption)
+                                            IStream *stream, WICBitmapEncoderCacheOption cacheOption)
 {
-    FIXME("(%p,%p,%u): stub\n", iface, pIStream, cacheOption);
-    return E_NOTIMPL;
+    DdsEncoder *This = impl_from_IWICBitmapEncoder(iface);
+    HRESULT hr;
+
+    TRACE("(%p,%p,%u)\n", iface, stream, cacheOption);
+
+    if (cacheOption != WICBitmapEncoderNoCache)
+        FIXME("Cache option %#x is not supported.\n", cacheOption);
+
+    if (!stream) return E_INVALIDARG;
+
+    EnterCriticalSection(&This->lock);
+
+    if (This->stream)
+    {
+        hr = WINCODEC_ERR_WRONGSTATE;
+        goto end;
+    }
+
+    This->stream = stream;
+    IStream_AddRef(stream);
+
+    hr = S_OK;
+
+end:
+    LeaveCriticalSection(&This->lock);
+
+    return hr;
 }
 
 static HRESULT WINAPI DdsEncoder_GetContainerFormat(IWICBitmapEncoder *iface, GUID *format)
diff --git a/dlls/windowscodecs/tests/ddsformat.c b/dlls/windowscodecs/tests/ddsformat.c
index a5f1d6754a9..16adbb92726 100644
--- a/dlls/windowscodecs/tests/ddsformat.c
+++ b/dlls/windowscodecs/tests/ddsformat.c
@@ -1287,11 +1287,9 @@ static void test_dds_encoder_initialize(void)
     if (!encoder) goto end;
 
     hr = IWICBitmapEncoder_Initialize(encoder, NULL, WICBitmapEncoderNoCache);
-    todo_wine
     ok(hr == E_INVALIDARG, "Initialize got unexpected hr %#x\n", hr);
 
     hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
-    todo_wine
     ok(hr == S_OK, "Initialize failed, hr %#x\n", hr);
 
     IWICBitmapEncoder_Release(encoder);
@@ -1302,11 +1300,9 @@ static void test_dds_encoder_initialize(void)
     if (!encoder) goto end;
 
     hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
-    todo_wine
     ok(hr == S_OK, "Initialize failed, hr %#x\n", hr);
 
     hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
-    todo_wine
     ok(hr == WINCODEC_ERR_WRONGSTATE, "Initialize got unexpected hr %#x\n", hr);
 
 end:




More information about the wine-cvs mailing list