Nikolay Sivov : wincodecs: Encoder options are optional for CreateNewFrame ().

Alexandre Julliard julliard at winehq.org
Mon Feb 5 16:48:27 CST 2018


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Feb  5 19:59:33 2018 +0300

wincodecs: Encoder options are optional for CreateNewFrame().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/windowscodecs/bmpencode.c       |  7 +++++--
 dlls/windowscodecs/icnsformat.c      |  9 ++++++---
 dlls/windowscodecs/jpegformat.c      | 11 +++++++----
 dlls/windowscodecs/pngformat.c       | 11 +++++++----
 dlls/windowscodecs/tests/converter.c | 18 ++++++++++++++++++
 dlls/windowscodecs/tiffformat.c      |  2 +-
 6 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/dlls/windowscodecs/bmpencode.c b/dlls/windowscodecs/bmpencode.c
index 48a8e27..047154e 100644
--- a/dlls/windowscodecs/bmpencode.c
+++ b/dlls/windowscodecs/bmpencode.c
@@ -508,8 +508,11 @@ static HRESULT WINAPI BmpEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
 
     if (!This->stream) return WINCODEC_ERR_NOTINITIALIZED;
 
-    hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions);
-    if (FAILED(hr)) return hr;
+    if (ppIEncoderOptions)
+    {
+        hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions);
+        if (FAILED(hr)) return hr;
+    }
 
     encode = HeapAlloc(GetProcessHeap(), 0, sizeof(BmpFrameEncode));
     if (!encode)
diff --git a/dlls/windowscodecs/icnsformat.c b/dlls/windowscodecs/icnsformat.c
index 14144f7..aa96404 100644
--- a/dlls/windowscodecs/icnsformat.c
+++ b/dlls/windowscodecs/icnsformat.c
@@ -617,9 +617,12 @@ static HRESULT WINAPI IcnsEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
         goto end;
     }
 
-    hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions);
-    if (FAILED(hr))
-        goto end;
+    if (ppIEncoderOptions)
+    {
+        hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions);
+        if (FAILED(hr))
+            goto end;
+    }
 
     frameEncode = HeapAlloc(GetProcessHeap(), 0, sizeof(IcnsFrameEncode));
     if (frameEncode == NULL)
diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c
index 6617ec7..433a031 100644
--- a/dlls/windowscodecs/jpegformat.c
+++ b/dlls/windowscodecs/jpegformat.c
@@ -1466,11 +1466,14 @@ static HRESULT WINAPI JpegEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
         return WINCODEC_ERR_NOTINITIALIZED;
     }
 
-    hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
-    if (FAILED(hr))
+    if (ppIEncoderOptions)
     {
-        LeaveCriticalSection(&This->lock);
-        return hr;
+        hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
+        if (FAILED(hr))
+        {
+            LeaveCriticalSection(&This->lock);
+            return hr;
+        }
     }
 
     This->frame_count = 1;
diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c
index 117761c..26b5fd5 100644
--- a/dlls/windowscodecs/pngformat.c
+++ b/dlls/windowscodecs/pngformat.c
@@ -2055,11 +2055,14 @@ static HRESULT WINAPI PngEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
         return WINCODEC_ERR_NOTINITIALIZED;
     }
 
-    hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
-    if (FAILED(hr))
+    if (ppIEncoderOptions)
     {
-        LeaveCriticalSection(&This->lock);
-        return hr;
+        hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
+        if (FAILED(hr))
+        {
+            LeaveCriticalSection(&This->lock);
+            return hr;
+        }
     }
 
     This->frame_count = 1;
diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c
index 704ae5d..80423dc 100644
--- a/dlls/windowscodecs/tests/converter.c
+++ b/dlls/windowscodecs/tests/converter.c
@@ -804,6 +804,24 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls
     int i;
 
     hr = CoCreateInstance(clsid_encoder, NULL, CLSCTX_INPROC_SERVER,
+        &IID_IWICBitmapEncoder, (void **)&encoder);
+    ok(SUCCEEDED(hr), "CoCreateInstance failed, hr=%x\n", hr);
+
+    hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
+    ok(SUCCEEDED(hr), "CreateStreamOnHGlobal failed, hr=%x\n", hr);
+
+    hr = IWICBitmapEncoder_Initialize(encoder, stream, WICBitmapEncoderNoCache);
+    ok(SUCCEEDED(hr), "Initialize failed, hr=%x\n", hr);
+
+    /* Encoder options are optional. */
+    hr = IWICBitmapEncoder_CreateNewFrame(encoder, &frameencode, NULL);
+    ok(SUCCEEDED(hr), "Failed to create encode frame, hr %#x.\n", hr);
+
+    IStream_Release(stream);
+    IWICBitmapEncoder_Release(encoder);
+    IWICBitmapFrameEncode_Release(frameencode);
+
+    hr = CoCreateInstance(clsid_encoder, NULL, CLSCTX_INPROC_SERVER,
         &IID_IWICBitmapEncoder, (void**)&encoder);
     ok(SUCCEEDED(hr), "CoCreateInstance failed, hr=%x\n", hr);
     if (SUCCEEDED(hr))
diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c
index f165e18..f125b07 100644
--- a/dlls/windowscodecs/tiffformat.c
+++ b/dlls/windowscodecs/tiffformat.c
@@ -1957,7 +1957,7 @@ static HRESULT WINAPI TiffEncoder_CreateNewFrame(IWICBitmapEncoder *iface,
         hr = E_FAIL;
     }
 
-    if (SUCCEEDED(hr))
+    if (ppIEncoderOptions && SUCCEEDED(hr))
     {
         hr = CreatePropertyBag2(opts, sizeof(opts)/sizeof(opts[0]), ppIEncoderOptions);
         if (SUCCEEDED(hr))




More information about the wine-cvs mailing list