Module: wine Branch: master Commit: 4da05a4f6d0201db37c2a412e7ec43e186a880ca URL: https://source.winehq.org/git/wine.git/?a=commit;h=4da05a4f6d0201db37c2a412e...
Author: Ziqing Hui zhui@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@codeweavers.com Signed-off-by: Esme Povirk esme@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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)