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