Ziqing Hui : windowscodecs/tests: Introduce create_and_init_encoder.
Alexandre Julliard
julliard at winehq.org
Mon May 24 15:59:54 CDT 2021
Module: wine
Branch: master
Commit: 4da05a4f6d0201db37c2a412e7ec43e186a880ca
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4da05a4f6d0201db37c2a412e7ec43e186a880ca
Author: Ziqing Hui <zhui at codeweavers.com>
Date: Mon May 24 10:58:18 2021 +0800
windowscodecs/tests: Introduce create_and_init_encoder.
We can't reuse same encoder object for all images. So we should create
a new encoder object for each test.
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/tests/ddsformat.c | 77 ++++++++++++++++++++++--------------
1 file changed, 47 insertions(+), 30 deletions(-)
diff --git a/dlls/windowscodecs/tests/ddsformat.c b/dlls/windowscodecs/tests/ddsformat.c
index 52828e6bf43..bd7672a558f 100644
--- a/dlls/windowscodecs/tests/ddsformat.c
+++ b/dlls/windowscodecs/tests/ddsformat.c
@@ -546,6 +546,39 @@ static HRESULT init_decoder(IWICBitmapDecoder *decoder, IWICStream *stream, HRES
return hr;
}
+static void release_encoder(IWICBitmapEncoder *encoder, IWICDdsEncoder *dds_encoder, IWICStream *stream)
+{
+ if (dds_encoder) IWICDdsEncoder_Release(dds_encoder);
+ if (stream) IWICStream_Release(stream);
+ if (encoder) IWICBitmapEncoder_Release(encoder);
+}
+
+static HRESULT create_and_init_encoder(BYTE *image_buffer, UINT buffer_size,
+ IWICBitmapEncoder **encoder, IWICDdsEncoder **dds_encoder, IWICStream **stream)
+{
+ HRESULT hr;
+
+ *encoder = create_encoder();
+ if (!*encoder) goto fail;
+
+ *stream = create_stream(image_buffer, buffer_size);
+ if (!*stream) goto fail;
+
+ hr = IWICBitmapEncoder_Initialize(*encoder, (IStream *)*stream, WICBitmapEncoderNoCache);
+ ok(hr == S_OK, "Initialize failed, hr %#x\n", hr);
+ if (hr != S_OK) goto fail;
+
+ hr = IWICBitmapEncoder_QueryInterface(*encoder, &IID_IWICDdsEncoder, (void **)dds_encoder);
+ ok(hr == S_OK, "QueryInterface failed, hr %#x\n", hr);
+ if (hr != S_OK) goto fail;
+
+ return S_OK;
+
+fail:
+ release_encoder(*encoder, *dds_encoder, *stream);
+ return E_FAIL;
+}
+
static BOOL is_compressed(DXGI_FORMAT format)
{
UINT i;
@@ -1310,18 +1343,25 @@ end:
if (encoder) IWICBitmapEncoder_Release(encoder);
}
-static void test_dds_encoder_params(IWICBitmapEncoder *encoder, IWICDdsEncoder *dds_encoder)
+static void test_dds_encoder_params(void)
{
WICDdsParameters params, params_set = { 4, 4, 4, 3, 1, DXGI_FORMAT_BC1_UNORM,
WICDdsTexture3D, WICDdsAlphaModePremultiplied };
+ IWICDdsEncoder *dds_encoder = NULL;
+ IWICBitmapEncoder *encoder = NULL;
+ IWICStream *stream = NULL;
+ BYTE buffer[1024];
HRESULT hr;
+ hr = create_and_init_encoder(buffer, sizeof(buffer), &encoder, &dds_encoder, &stream);
+ if (hr != S_OK) goto end;
+
hr = IWICDdsEncoder_GetParameters(dds_encoder, NULL);
ok(hr == E_INVALIDARG, "GetParameters got unexpected hr %#x\n", hr);
hr = IWICDdsEncoder_GetParameters(dds_encoder, ¶ms);
ok(hr == S_OK, "GetParameters failed, hr %#x\n", hr);
- if (hr != S_OK) return;
+ if (hr != S_OK) goto end;
/* default DDS parameters for encoder */
ok(params.Width == 1, "Got unexpected Width %u\n", params.Width);
@@ -1338,7 +1378,7 @@ static void test_dds_encoder_params(IWICBitmapEncoder *encoder, IWICDdsEncoder *
hr = IWICDdsEncoder_SetParameters(dds_encoder, ¶ms_set);
ok(hr == S_OK, "SetParameters failed, hr %#x\n", hr);
- if (hr != S_OK) return;
+ if (hr != S_OK) goto end;
IWICDdsEncoder_GetParameters(dds_encoder, ¶ms);
@@ -1358,38 +1398,15 @@ static void test_dds_encoder_params(IWICBitmapEncoder *encoder, IWICDdsEncoder *
"Expected Dimension %u, got %#x\n", params_set.Dimension, params.Dimension);
ok(params.AlphaMode == params_set.AlphaMode,
"Expected AlphaMode %u, got %#x\n", params_set.AlphaMode, params.AlphaMode);
+
+end:
+ release_encoder(encoder, dds_encoder, stream);
}
static void test_dds_encoder(void)
{
- IWICDdsEncoder *dds_encoder = NULL;
- IWICBitmapEncoder *encoder = NULL;
- IWICStream *stream = NULL;
- BYTE buffer[1024];
- HRESULT hr;
-
test_dds_encoder_initialize();
-
- encoder = create_encoder();
- if (!encoder) goto end;
-
- stream = create_stream(buffer, sizeof(buffer));
- if (!stream) goto end;
-
- hr = IWICBitmapEncoder_Initialize(encoder, (IStream *)stream, WICBitmapEncoderNoCache);
- ok(hr == S_OK, "Initialize failed, hr %#x\n", hr);
- if (hr != S_OK) goto end;
-
- hr = IWICBitmapEncoder_QueryInterface(encoder, &IID_IWICDdsEncoder, (void **)&dds_encoder);
- ok(hr == S_OK, "QueryInterface failed, hr %#x\n", hr);
- if (hr != S_OK) goto end;
-
- test_dds_encoder_params(encoder, dds_encoder);
-
-end:
- if (dds_encoder) IWICDdsEncoder_Release(dds_encoder);
- if (stream) IWICStream_Release(stream);
- if (encoder) IWICBitmapEncoder_Release(encoder);
+ test_dds_encoder_params();
}
START_TEST(ddsformat)
More information about the wine-cvs
mailing list