From 92ad4a18e3d27e4b065ce6cf1c2afcdadbc2936a Mon Sep 17 00:00:00 2001 From: Ziqing Hui Date: Sat, 29 May 2021 08:27:13 +0800 Subject: [PATCH] windowscodecs: Implement DdsFrameEncode_SetPixelFormat. Signed-off-by: Ziqing Hui Signed-off-by: Esme Povirk Signed-off-by: Alexandre Julliard --- dlls/windowscodecs/ddsformat.c | 26 ++++++++++++++++++++++++-- dlls/windowscodecs/tests/ddsformat.c | 7 ++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/dlls/windowscodecs/ddsformat.c b/dlls/windowscodecs/ddsformat.c index eea5235faba..f94f6708c2b 100644 --- a/dlls/windowscodecs/ddsformat.c +++ b/dlls/windowscodecs/ddsformat.c @@ -1651,8 +1651,30 @@ static HRESULT WINAPI DdsFrameEncode_SetResolution(IWICBitmapFrameEncode *iface, static HRESULT WINAPI DdsFrameEncode_SetPixelFormat(IWICBitmapFrameEncode *iface, WICPixelFormatGUID *pixelFormat) { - FIXME("(%p,%s): stub\n", iface, debugstr_guid(pixelFormat)); - return E_NOTIMPL; + DdsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface); + HRESULT hr; + + TRACE("(%p,%s)\n", iface, debugstr_guid(pixelFormat)); + + EnterCriticalSection(&This->parent->lock); + + if (!This->initialized) + { + hr = WINCODEC_ERR_NOTINITIALIZED; + } + else if (This->frame_created) + { + hr = WINCODEC_ERR_WRONGSTATE; + } + else + { + *pixelFormat = GUID_WICPixelFormat32bppBGRA; + hr = S_OK; + } + + LeaveCriticalSection(&This->parent->lock); + + return hr; } static HRESULT WINAPI DdsFrameEncode_SetColorContexts(IWICBitmapFrameEncode *iface, diff --git a/dlls/windowscodecs/tests/ddsformat.c b/dlls/windowscodecs/tests/ddsformat.c index 182031f2d3a..06cd062e962 100644 --- a/dlls/windowscodecs/tests/ddsformat.c +++ b/dlls/windowscodecs/tests/ddsformat.c @@ -1519,7 +1519,6 @@ static void test_dds_encoder_pixel_format(void) IWICBitmapEncoder_CreateNewFrame(encoder, &frame, NULL); hr = IWICBitmapFrameEncode_SetPixelFormat(frame, &format); - todo_wine ok(hr == WINCODEC_ERR_NOTINITIALIZED, "SetPixelFormat got unexpected hr %#x\n", hr); IWICBitmapFrameEncode_Initialize(frame, NULL); @@ -1528,11 +1527,9 @@ static void test_dds_encoder_pixel_format(void) { format = *(test_formats[j]); hr = IWICBitmapFrameEncode_SetPixelFormat(frame, &format); - todo_wine ok(hr == S_OK, "Test %u: SetPixelFormat failed, hr %#x\n", j, hr); - if (hr == S_OK) - ok(IsEqualGUID(&format, &GUID_WICPixelFormat32bppBGRA), - "Test %u: Got unexpected GUID %s\n", j, debugstr_guid(&format)); + ok(IsEqualGUID(&format, &GUID_WICPixelFormat32bppBGRA), + "Test %u: Got unexpected GUID %s\n", j, debugstr_guid(&format)); } IWICBitmapFrameEncode_Release(frame); -- 2.11.4.GIT