diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 8e2c8941..98f590af 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "cda846b8cbc39c07ce360a6660a1c8b2e2aca24b" + echo "5cc5b102c1b0a66aa63b66f43f2da9a1a9d15ab6" } # Show version information @@ -326,7 +326,6 @@ patch_enable_all () enable_windowscodecs_IMILBitmapSource="$1" enable_windowscodecs_IWICPalette_InitializeFromBitmap="$1" enable_windowscodecs_JPEG_Decoder="$1" - enable_windowscodecs_Palette_Images="$1" enable_windowscodecs_TIFF_Support="$1" enable_wine_inf_Directory_ContextMenuHandlers="$1" enable_wine_inf_Dummy_CA_Certificate="$1" @@ -1132,9 +1131,6 @@ patch_enable () windowscodecs-JPEG_Decoder) enable_windowscodecs_JPEG_Decoder="$2" ;; - windowscodecs-Palette_Images) - enable_windowscodecs_Palette_Images="$2" - ;; windowscodecs-TIFF_Support) enable_windowscodecs_TIFF_Support="$2" ;; @@ -1820,13 +1816,6 @@ if test "$enable_windowscodecs_TIFF_Support" -eq 1; then enable_windowscodecs_IWICPalette_InitializeFromBitmap=1 fi -if test "$enable_windowscodecs_GIF_Encoder" -eq 1; then - if test "$enable_windowscodecs_Palette_Images" -gt 1; then - abort "Patchset windowscodecs-Palette_Images disabled, but windowscodecs-GIF_Encoder depends on that." - fi - enable_windowscodecs_Palette_Images=1 -fi - if test "$enable_uxtheme_GTK_Theming" -eq 1; then if test "$enable_ntdll_DllRedirects" -gt 1; then abort "Patchset ntdll-DllRedirects disabled, but uxtheme-GTK_Theming depends on that." @@ -5802,16 +5791,14 @@ fi # | * [#45963] - Add SetupDiInstallDeviceInterfaces/SetupDiRegisterCoDeviceInstallers stubs # | # | Modified files: -# | * dlls/setupapi/devinst.c, dlls/setupapi/setupapi.spec, dlls/setupapi/tests/devinst.c +# | * dlls/setupapi/devinst.c, dlls/setupapi/setupapi.spec # | if test "$enable_setupapi_SetupDiGetDeviceInterfaceDetail" -eq 1; then patch_apply setupapi-SetupDiGetDeviceInterfaceDetail/0001-setupapi-Add-SetupDiInstallDeviceInterfaces.patch patch_apply setupapi-SetupDiGetDeviceInterfaceDetail/0002-setupapi-Add-SetupDiRegisterCoDeviceInstallers-stub.patch - patch_apply setupapi-SetupDiGetDeviceInterfaceDetail/0003-setupapi-SetupDiGetDeviceInterfaceDetail-should-fill.patch ( printf '%s\n' '+ { "Alistair Leslie-Hughes", "setupapi: Add SetupDiInstallDeviceInterfaces.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "setupapi: Add SetupDiRegisterCoDeviceInstallers stub.", 1 },'; - printf '%s\n' '+ { "Michael Müller", "setupapi: SetupDiGetDeviceInterfaceDetail should fill out DeviceInfoData even if the buffer for DeviceInterfaceData is too small.", 1 },'; ) >> "$patchlist" fi @@ -6553,40 +6540,15 @@ if test "$enable_virtdisk_OpenVirtualDisk" -eq 1; then ) >> "$patchlist" fi -# Patchset windowscodecs-Palette_Images -# | -# | Modified files: -# | * dlls/windowscodecs/bmpencode.c, dlls/windowscodecs/info.c, dlls/windowscodecs/regsvr.c, -# | dlls/windowscodecs/tests/converter.c, dlls/windowscodecs/tiffformat.c -# | -if test "$enable_windowscodecs_Palette_Images" -eq 1; then - patch_apply windowscodecs-Palette_Images/0012-windowscodecs-tests-Add-tests-for-encoding-2bpp-4bpp.patch - patch_apply windowscodecs-Palette_Images/0014-windowscodecs-Add-support-for-palette-image-formats-.patch - patch_apply windowscodecs-Palette_Images/0017-windowscodecs-Add-support-for-palette-image-formats-.patch - ( - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs/tests: Add tests for encoding 2bpp/4bpp images with a palette.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Add support for palette image formats to TIFF encoder.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Add support for palette image formats to BMP encoder.", 1 },'; - ) >> "$patchlist" -fi - # Patchset windowscodecs-GIF_Encoder # | -# | This patchset has the following (direct or indirect) dependencies: -# | * windowscodecs-Palette_Images -# | # | Modified files: -# | * dlls/gdiplus/tests/image.c, dlls/windowscodecs/bmpencode.c, dlls/windowscodecs/clsfactory.c, -# | dlls/windowscodecs/converter.c, dlls/windowscodecs/gifformat.c, dlls/windowscodecs/info.c, -# | dlls/windowscodecs/jpegformat.c, dlls/windowscodecs/pngformat.c, dlls/windowscodecs/regsvr.c, +# | * dlls/gdiplus/tests/image.c, dlls/windowscodecs/clsfactory.c, dlls/windowscodecs/converter.c, +# | dlls/windowscodecs/gifformat.c, dlls/windowscodecs/info.c, dlls/windowscodecs/pngformat.c, dlls/windowscodecs/regsvr.c, # | dlls/windowscodecs/tests/converter.c, dlls/windowscodecs/tiffformat.c, dlls/windowscodecs/wincodecs_private.h, # | dlls/windowscodecs/windowscodecs_wincodec.idl # | if test "$enable_windowscodecs_GIF_Encoder" -eq 1; then - patch_apply windowscodecs-GIF_Encoder/0001-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch - patch_apply windowscodecs-GIF_Encoder/0002-windowscodecs-Implement-IWICBitmapEncoderInfo-GetFil.patch - patch_apply windowscodecs-GIF_Encoder/0004-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch - patch_apply windowscodecs-GIF_Encoder/0006-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch patch_apply windowscodecs-GIF_Encoder/0007-windowscodecs-tests-Add-IWICBitmapEncoderInfo-test.patch patch_apply windowscodecs-GIF_Encoder/0008-windowscodecs-Add-initial-implementation-of-the-GIF-.patch patch_apply windowscodecs-GIF_Encoder/0010-windowscodecs-Initialize-empty-property-bag-in-GIF-e.patch @@ -6595,23 +6557,15 @@ if test "$enable_windowscodecs_GIF_Encoder" -eq 1; then patch_apply windowscodecs-GIF_Encoder/0014-windowscodecs-Fix-the-buffer-size-check-in-the-TIFF-.patch patch_apply windowscodecs-GIF_Encoder/0015-windowscodecs-Add-support-for-converting-to-8bppInde.patch patch_apply windowscodecs-GIF_Encoder/0016-windowscodecs-WICConvertBitmapSource-should-ask-IWIC.patch - patch_apply windowscodecs-GIF_Encoder/0017-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch - patch_apply windowscodecs-GIF_Encoder/0018-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch patch_apply windowscodecs-GIF_Encoder/0019-windowscodecs-Improve-stub-for-IWICBitmapDecoder-Get.patch patch_apply windowscodecs-GIF_Encoder/0020-windowscodecs-Add-registration-of-the-GIF-encoder.patch patch_apply windowscodecs-GIF_Encoder/0021-windowscodecs-Fix-IWICBitmapDecoder-CopyPalette-for-.patch patch_apply windowscodecs-GIF_Encoder/0022-windowscodecs-Better-follow-the-GIF-spec-and-don-t-s.patch patch_apply windowscodecs-GIF_Encoder/0023-windowscodecs-Fix-behaviour-of-format-converter-for-.patch - patch_apply windowscodecs-GIF_Encoder/0024-windowscodecs-tests-Add-a-bunch-of-new-tests-for-ind.patch patch_apply windowscodecs-GIF_Encoder/0025-windowscodecs-tests-Add-some-tests-for-converting-24.patch patch_apply windowscodecs-GIF_Encoder/0026-windowscodecs-tests-Add-the-tests-for-GIF-encoder-an.patch - patch_apply windowscodecs-GIF_Encoder/0027-windowscodecs-tests-Add-a-missing-check-for-IWICBitm.patch patch_apply windowscodecs-GIF_Encoder/0028-windowscodecs-Correctly-indicate-that-the-global-inf.patch ( - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in BMP encoder.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Implement IWICBitmapEncoderInfo::GetFileExtensions.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in JPEG encoder.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in TIFF encoder.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "windowscodecs/tests: Add IWICBitmapEncoderInfo test.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Add initial implementation of the GIF encoder.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Initialize empty property bag in GIF encoder'\''s CreateNewFrame implementation.", 1 },'; @@ -6620,17 +6574,13 @@ if test "$enable_windowscodecs_GIF_Encoder" -eq 1; then printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Fix the buffer size check in the TIFF decoder'\''s IWICBitmapFrameDecode::CopyPixels implementation.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Add support for converting to 8bppIndexed format to IWICFormatConverter.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: WICConvertBitmapSource should ask IWICFormatConverter::Initialize to use an optimized palette.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the JPEG encoder.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the PNG encoder.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Improve stub for IWICBitmapDecoder::GetMetadataQueryReader in the PNG decoder.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Add registration of the GIF encoder.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Fix IWICBitmapDecoder::CopyPalette for a not initialized case in the GIF decoder.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Better follow the GIF spec and don'\''t specify the local color table size if there is no local palette.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Fix behaviour of format converter for indexed formats when NULL or empty palette has been provided.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs/tests: Add a bunch of new tests for indexed format conversions.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs/tests: Add some tests for converting 24bppBGR to 8bppIndexed format.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs/tests: Add the tests for GIF encoder and decoder.", 1 },'; - printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs/tests: Add a missing check for IWICBitmapFrameDecode::GetPixelFormat return value.", 1 },'; printf '%s\n' '+ { "Dmitry Timoshkov", "windowscodecs: Correctly indicate that the global info was written even without the global palette.", 1 },'; ) >> "$patchlist" fi @@ -6660,7 +6610,7 @@ fi # Patchset windowscodecs-TIFF_Support # | # | This patchset has the following (direct or indirect) dependencies: -# | * windowscodecs-Palette_Images, windowscodecs-GIF_Encoder, windowscodecs-IWICPalette_InitializeFromBitmap +# | * windowscodecs-GIF_Encoder, windowscodecs-IWICPalette_InitializeFromBitmap # | # | Modified files: # | * dlls/gdiplus/image.c, dlls/gdiplus/tests/image.c, dlls/windowscodecs/metadatahandler.c, dlls/windowscodecs/regsvr.c, @@ -6706,8 +6656,7 @@ fi # Patchset windowscodecs-32bppPRGBA # | # | This patchset has the following (direct or indirect) dependencies: -# | * windowscodecs-Palette_Images, windowscodecs-GIF_Encoder, windowscodecs-IWICPalette_InitializeFromBitmap, windowscodecs- -# | TIFF_Support +# | * windowscodecs-GIF_Encoder, windowscodecs-IWICPalette_InitializeFromBitmap, windowscodecs-TIFF_Support # | # | Modified files: # | * dlls/windowscodecs/converter.c, dlls/windowscodecs/info.c, dlls/windowscodecs/regsvr.c, diff --git a/patches/setupapi-SetupDiGetDeviceInterfaceDetail/0003-setupapi-SetupDiGetDeviceInterfaceDetail-should-fill.patch b/patches/setupapi-SetupDiGetDeviceInterfaceDetail/0003-setupapi-SetupDiGetDeviceInterfaceDetail-should-fill.patch deleted file mode 100644 index 52457bf2..00000000 --- a/patches/setupapi-SetupDiGetDeviceInterfaceDetail/0003-setupapi-SetupDiGetDeviceInterfaceDetail-should-fill.patch +++ /dev/null @@ -1,78 +0,0 @@ -From b0160bd38c99d74d4f9edee766e1247856b443ca Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michael=20M=C3=BCller?= -Date: Fri, 19 Aug 2016 00:47:08 +0200 -Subject: [PATCH] setupapi: SetupDiGetDeviceInterfaceDetail should fill out - DeviceInfoData even if the buffer for DeviceInterfaceData is too small. - ---- - dlls/setupapi/devinst.c | 14 ++++++++------ - dlls/setupapi/tests/devinst.c | 7 +++++++ - 2 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c -index fa4036b..42cf5dd 100644 ---- a/dlls/setupapi/devinst.c -+++ b/dlls/setupapi/devinst.c -@@ -2819,9 +2819,6 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO devinfo, SP_DEVICE_INTERFA - else - DeviceInterfaceDetailData->DevicePath[0] = '\0'; - -- if (device_data && device_data->cbSize == sizeof(SP_DEVINFO_DATA)) -- copy_device_data(device_data, iface->device); -- - ret = TRUE; - } - else -@@ -2830,6 +2827,10 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO devinfo, SP_DEVICE_INTERFA - *RequiredSize = bytesNeeded; - SetLastError(ERROR_INSUFFICIENT_BUFFER); - } -+ -+ if (device_data && device_data->cbSize == sizeof(SP_DEVINFO_DATA)) -+ copy_device_data(device_data, iface->device); -+ - return ret; - } - -@@ -2874,9 +2875,6 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO devinfo, SP_DEVICE_INTERFA - else - DeviceInterfaceDetailData->DevicePath[0] = '\0'; - -- if (device_data && device_data->cbSize == sizeof(SP_DEVINFO_DATA)) -- copy_device_data(device_data, iface->device); -- - ret = TRUE; - } - else -@@ -2885,6 +2883,10 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO devinfo, SP_DEVICE_INTERFA - *RequiredSize = bytesNeeded; - SetLastError(ERROR_INSUFFICIENT_BUFFER); - } -+ -+ if (device_data && device_data->cbSize == sizeof(SP_DEVINFO_DATA)) -+ copy_device_data(device_data, iface->device); -+ - return ret; - } - -diff --git a/dlls/setupapi/tests/devinst.c b/dlls/setupapi/tests/devinst.c -index 38be0a7..f523ef4 100644 ---- a/dlls/setupapi/tests/devinst.c -+++ b/dlls/setupapi/tests/devinst.c -@@ -725,6 +725,13 @@ static void test_device_iface_detail(void) - ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Got unexpected error %#x.\n", GetLastError()); - ok(size == expectedsize, "Got unexpected size %d.\n", size); - -+ memset(&device, 0, sizeof(device)); -+ device.cbSize = sizeof(device); -+ ret = SetupDiGetDeviceInterfaceDetailW(set, &iface, NULL, 0, &size, &device); -+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, -+ "Expected ERROR_INSUFFICIENT_BUFFER, got error code: %d\n", GetLastError()); -+ ok(device.DevInst, "Expected DevInst to be set\n"); -+ - heap_free(detail); - SetupDiDestroyDeviceInfoList(set); - } --- -1.9.1 - diff --git a/patches/windowscodecs-32bppPRGBA/0002-windowscodecs-Fix-32bppRGB-to-32bppRGBA-conversion.patch b/patches/windowscodecs-32bppPRGBA/0002-windowscodecs-Fix-32bppRGB-to-32bppRGBA-conversion.patch index d464cfcb..437024af 100644 --- a/patches/windowscodecs-32bppPRGBA/0002-windowscodecs-Fix-32bppRGB-to-32bppRGBA-conversion.patch +++ b/patches/windowscodecs-32bppPRGBA/0002-windowscodecs-Fix-32bppRGB-to-32bppRGBA-conversion.patch @@ -1,15 +1,15 @@ -From ff6282f297e67822ee0def394a677a4fdc0fa609 Mon Sep 17 00:00:00 2001 +From 39d690bf0ea117214e76419876188c7277ae1749 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Thu, 26 Jan 2017 19:01:21 +0800 -Subject: windowscodecs: Fix 32bppRGB to 32bppRGBA conversion. +Subject: [PATCH] windowscodecs: Fix 32bppRGB to 32bppRGBA conversion. --- dlls/windowscodecs/converter.c | 2 ++ - dlls/windowscodecs/tests/converter.c | 45 +++++++++++++++++++++++++++++++++++- - 2 files changed, 46 insertions(+), 1 deletion(-) + dlls/windowscodecs/tests/converter.c | 43 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 45 insertions(+) diff --git a/dlls/windowscodecs/converter.c b/dlls/windowscodecs/converter.c -index 519860d9065..1378c85bc2d 100644 +index 47de603..d23c262 100644 --- a/dlls/windowscodecs/converter.c +++ b/dlls/windowscodecs/converter.c @@ -868,7 +868,9 @@ static HRESULT copypixels_to_32bppRGBA(struct FormatConverter *This, const WICRe @@ -23,10 +23,10 @@ index 519860d9065..1378c85bc2d 100644 return IWICBitmapSource_CopyPixels(This->source, prc, cbStride, cbBufferSize, pbBuffer); return S_OK; diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index 1cafe90c734..17724d9ed01 100644 +index 5480584..77db7e8 100644 --- a/dlls/windowscodecs/tests/converter.c +++ b/dlls/windowscodecs/tests/converter.c -@@ -291,6 +291,21 @@ static BOOL compare_bits(const struct bitmap_data *expect, UINT buffersize, cons +@@ -258,6 +258,21 @@ static BOOL compare_bits(const struct bitmap_data *expect, UINT buffersize, cons if (!equal && expect->alt_data) equal = compare_bits(expect->alt_data, buffersize, converted_bits); @@ -48,21 +48,20 @@ index 1cafe90c734..17724d9ed01 100644 return equal; } -@@ -438,6 +453,10 @@ static const BYTE bits_32bppBGR[] = { - 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80}; +@@ -353,12 +368,34 @@ static const BYTE bits_32bppBGR[] = { + 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80}; static const struct bitmap_data testdata_32bppBGR = { - &GUID_WICPixelFormat32bppBGR, 32, bits_32bppBGR, 32, 2, 96.0, 96.0}; + &GUID_WICPixelFormat32bppBGR, 32, bits_32bppBGR, 4, 2, 96.0, 96.0}; +static const struct bitmap_data testdata_32bppBGRA80 = { + &GUID_WICPixelFormat32bppBGRA, 32, bits_32bppBGR, 32, 2, 96.0, 96.0}; +static const struct bitmap_data testdata_32bppRGBA80 = { + &GUID_WICPixelFormat32bppRGBA, 32, bits_32bppBGR, 32, 2, 96.0, 96.0}; static const BYTE bits_32bppBGRA[] = { - 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, -@@ -450,6 +469,24 @@ static const BYTE bits_32bppBGRA[] = { - 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255}; + 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, + 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255}; static const struct bitmap_data testdata_32bppBGRA = { - &GUID_WICPixelFormat32bppBGRA, 32, bits_32bppBGRA, 32, 2, 96.0, 96.0}; + &GUID_WICPixelFormat32bppBGRA, 32, bits_32bppBGRA, 4, 2, 96.0, 96.0}; +static const struct bitmap_data testdata_32bppRGBA = { + &GUID_WICPixelFormat32bppRGBA, 32, bits_32bppBGRA, 32, 2, 96.0, 96.0}; +static const struct bitmap_data testdata_32bppRGB = { @@ -84,16 +83,7 @@ index 1cafe90c734..17724d9ed01 100644 /* XP and 2003 use linear color conversion, later versions use sRGB gamma */ static const float bits_32bppGrayFloat_xp[] = { -@@ -515,7 +552,7 @@ static void test_conversion(const struct bitmap_data *src, const struct bitmap_d - hr = WICConvertBitmapSource(dst->format, &src_obj->IWICBitmapSource_iface, &dst_bitmap); - todo_wine_if (todo) - ok(hr == S_OK || -- broken(hr == E_INVALIDARG) /* XP */, "WICConvertBitmapSource(%s) failed, hr=%x\n", name, hr); -+ broken(hr == E_INVALIDARG || hr == WINCODEC_ERR_COMPONENTNOTFOUND) /* XP */, "WICConvertBitmapSource(%s) failed, hr=%x\n", name, hr); - - if (hr == S_OK) - { -@@ -1752,6 +1789,12 @@ START_TEST(converter) +@@ -1684,6 +1721,12 @@ START_TEST(converter) test_conversion(&testdata_32bppBGRA, &testdata_32bppBGR, "BGRA -> BGR", FALSE); test_conversion(&testdata_32bppBGR, &testdata_32bppBGRA, "BGR -> BGRA", FALSE); test_conversion(&testdata_32bppBGRA, &testdata_32bppBGRA, "BGRA -> BGRA", FALSE); @@ -107,5 +97,5 @@ index 1cafe90c734..17724d9ed01 100644 test_conversion(&testdata_24bppBGR, &testdata_24bppBGR, "24bppBGR -> 24bppBGR", FALSE); test_conversion(&testdata_24bppBGR, &testdata_24bppRGB, "24bppBGR -> 24bppRGB", FALSE); -- -2.11.0 +1.9.1 diff --git a/patches/windowscodecs-GIF_Encoder/0001-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch b/patches/windowscodecs-GIF_Encoder/0001-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch deleted file mode 100644 index c50950f5..00000000 --- a/patches/windowscodecs-GIF_Encoder/0001-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch +++ /dev/null @@ -1,44 +0,0 @@ -From c79b0e20ed84142dd3652d4f1e08abc8b13a9f8b Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Sun, 16 Oct 2016 21:06:32 +0800 -Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in BMP - encoder. - ---- - dlls/windowscodecs/bmpencode.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/dlls/windowscodecs/bmpencode.c b/dlls/windowscodecs/bmpencode.c -index 3dce8bb..8bb5c10 100644 ---- a/dlls/windowscodecs/bmpencode.c -+++ b/dlls/windowscodecs/bmpencode.c -@@ -451,11 +451,22 @@ static HRESULT WINAPI BmpEncoder_GetContainerFormat(IWICBitmapEncoder *iface, - return S_OK; - } - --static HRESULT WINAPI BmpEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, -- IWICBitmapEncoderInfo **ppIEncoderInfo) -+static HRESULT WINAPI BmpEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info) - { -- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo); -- return E_NOTIMPL; -+ IWICComponentInfo *comp_info; -+ HRESULT hr; -+ -+ TRACE("%p,%p\n", iface, info); -+ -+ if (!info) return E_INVALIDARG; -+ -+ hr = CreateComponentInfo(&CLSID_WICBmpEncoder, &comp_info); -+ if (hr == S_OK) -+ { -+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info); -+ IWICComponentInfo_Release(comp_info); -+ } -+ return hr; - } - - static HRESULT WINAPI BmpEncoder_SetColorContexts(IWICBitmapEncoder *iface, --- -2.9.0 - diff --git a/patches/windowscodecs-GIF_Encoder/0002-windowscodecs-Implement-IWICBitmapEncoderInfo-GetFil.patch b/patches/windowscodecs-GIF_Encoder/0002-windowscodecs-Implement-IWICBitmapEncoderInfo-GetFil.patch deleted file mode 100644 index 19ee502a..00000000 --- a/patches/windowscodecs-GIF_Encoder/0002-windowscodecs-Implement-IWICBitmapEncoderInfo-GetFil.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 1977ebd81ff7f7023daf00ae7eecee1c8f2e7260 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Sun, 16 Oct 2016 17:30:39 +0800 -Subject: windowscodecs: Implement IWICBitmapEncoderInfo::GetFileExtensions. - ---- - dlls/windowscodecs/info.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/dlls/windowscodecs/info.c b/dlls/windowscodecs/info.c -index 84b80bc..1a93491 100644 ---- a/dlls/windowscodecs/info.c -+++ b/dlls/windowscodecs/info.c -@@ -868,8 +868,12 @@ static HRESULT WINAPI BitmapEncoderInfo_GetMimeTypes(IWICBitmapEncoderInfo *ifac - static HRESULT WINAPI BitmapEncoderInfo_GetFileExtensions(IWICBitmapEncoderInfo *iface, - UINT cchFileExtensions, WCHAR *wzFileExtensions, UINT *pcchActual) - { -- FIXME("(%p,%u,%p,%p): stub\n", iface, cchFileExtensions, wzFileExtensions, pcchActual); -- return E_NOTIMPL; -+ BitmapEncoderInfo *This = impl_from_IWICBitmapEncoderInfo(iface); -+ -+ TRACE("(%p,%u,%p,%p)\n", iface, cchFileExtensions, wzFileExtensions, pcchActual); -+ -+ return ComponentInfo_GetStringValue(This->classkey, fileextensions_valuename, -+ cchFileExtensions, wzFileExtensions, pcchActual); - } - - static HRESULT WINAPI BitmapEncoderInfo_DoesSupportAnimation(IWICBitmapEncoderInfo *iface, --- -2.9.0 - diff --git a/patches/windowscodecs-GIF_Encoder/0004-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch b/patches/windowscodecs-GIF_Encoder/0004-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch deleted file mode 100644 index 28abcf6d..00000000 --- a/patches/windowscodecs-GIF_Encoder/0004-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 5dcb81fa70edefd525cad861d7cac7706db47871 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Sun, 16 Oct 2016 17:34:21 +0800 -Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in JPEG - encoder. - ---- - dlls/windowscodecs/jpegformat.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c -index 451d725eb8..a060d569f8 100644 ---- a/dlls/windowscodecs/jpegformat.c -+++ b/dlls/windowscodecs/jpegformat.c -@@ -1392,11 +1392,22 @@ static HRESULT WINAPI JpegEncoder_GetContainerFormat(IWICBitmapEncoder *iface, G - return S_OK; - } - --static HRESULT WINAPI JpegEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, -- IWICBitmapEncoderInfo **ppIEncoderInfo) -+static HRESULT WINAPI JpegEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info) - { -- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo); -- return E_NOTIMPL; -+ IWICComponentInfo *comp_info; -+ HRESULT hr; -+ -+ TRACE("%p,%p\n", iface, info); -+ -+ if (!info) return E_INVALIDARG; -+ -+ hr = CreateComponentInfo(&CLSID_WICJpegEncoder, &comp_info); -+ if (hr == S_OK) -+ { -+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info); -+ IWICComponentInfo_Release(comp_info); -+ } -+ return hr; - } - - static HRESULT WINAPI JpegEncoder_SetColorContexts(IWICBitmapEncoder *iface, --- -2.14.1 - diff --git a/patches/windowscodecs-GIF_Encoder/0006-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch b/patches/windowscodecs-GIF_Encoder/0006-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch deleted file mode 100644 index 0e385e3e..00000000 --- a/patches/windowscodecs-GIF_Encoder/0006-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch +++ /dev/null @@ -1,44 +0,0 @@ -From ac87acc7cb36198ed28d092b0278ea17ff6006b7 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Sun, 16 Oct 2016 17:38:39 +0800 -Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in TIFF - encoder. - ---- - dlls/windowscodecs/tiffformat.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c -index 1dacd87..4946e4d 100644 ---- a/dlls/windowscodecs/tiffformat.c -+++ b/dlls/windowscodecs/tiffformat.c -@@ -1873,11 +1873,22 @@ static HRESULT WINAPI TiffEncoder_GetContainerFormat(IWICBitmapEncoder *iface, - return S_OK; - } - --static HRESULT WINAPI TiffEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, -- IWICBitmapEncoderInfo **ppIEncoderInfo) -+static HRESULT WINAPI TiffEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info) - { -- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo); -- return E_NOTIMPL; -+ IWICComponentInfo *comp_info; -+ HRESULT hr; -+ -+ TRACE("%p,%p\n", iface, info); -+ -+ if (!info) return E_INVALIDARG; -+ -+ hr = CreateComponentInfo(&CLSID_WICTiffEncoder, &comp_info); -+ if (hr == S_OK) -+ { -+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info); -+ IWICComponentInfo_Release(comp_info); -+ } -+ return hr; - } - - static HRESULT WINAPI TiffEncoder_SetColorContexts(IWICBitmapEncoder *iface, --- -2.9.0 - diff --git a/patches/windowscodecs-GIF_Encoder/0017-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch b/patches/windowscodecs-GIF_Encoder/0017-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch deleted file mode 100644 index 5ad16de0..00000000 --- a/patches/windowscodecs-GIF_Encoder/0017-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch +++ /dev/null @@ -1,35 +0,0 @@ -From e2d172c5ac68abd6205c2cb63e2a58597e64ec8c Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Fri, 21 Oct 2016 14:32:25 +0800 -Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the - JPEG encoder. - ---- - dlls/windowscodecs/jpegformat.c | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/dlls/windowscodecs/jpegformat.c b/dlls/windowscodecs/jpegformat.c -index 45bb88f..2b1be0a 100644 ---- a/dlls/windowscodecs/jpegformat.c -+++ b/dlls/windowscodecs/jpegformat.c -@@ -416,10 +416,14 @@ static HRESULT WINAPI JpegDecoder_CopyPalette(IWICBitmapDecoder *iface, - } - - static HRESULT WINAPI JpegDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface, -- IWICMetadataQueryReader **ppIMetadataQueryReader) -+ IWICMetadataQueryReader **reader) - { -- FIXME("(%p,%p): stub\n", iface, ppIMetadataQueryReader); -- return E_NOTIMPL; -+ FIXME("(%p,%p): stub\n", iface, reader); -+ -+ if (!reader) return E_INVALIDARG; -+ -+ *reader = NULL; -+ return WINCODEC_ERR_UNSUPPORTEDOPERATION; - } - - static HRESULT WINAPI JpegDecoder_GetPreview(IWICBitmapDecoder *iface, --- -2.9.0 - diff --git a/patches/windowscodecs-GIF_Encoder/0018-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch b/patches/windowscodecs-GIF_Encoder/0018-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch deleted file mode 100644 index b7ebb7fd..00000000 --- a/patches/windowscodecs-GIF_Encoder/0018-windowscodecs-Implement-IWICBitmapEncoder-GetEncoder.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 00ebc80c47100fe08c13f685ecd5b75fd94c6f13 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Fri, 21 Oct 2016 14:36:21 +0800 -Subject: windowscodecs: Implement IWICBitmapEncoder::GetEncoderInfo in the PNG - encoder. - ---- - dlls/windowscodecs/pngformat.c | 19 +++++++++++++++---- - 1 file changed, 15 insertions(+), 4 deletions(-) - -diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c -index c0e5a59cf9..786d8360e0 100644 ---- a/dlls/windowscodecs/pngformat.c -+++ b/dlls/windowscodecs/pngformat.c -@@ -1979,11 +1979,22 @@ static HRESULT WINAPI PngEncoder_GetContainerFormat(IWICBitmapEncoder *iface, GU - return S_OK; - } - --static HRESULT WINAPI PngEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, -- IWICBitmapEncoderInfo **ppIEncoderInfo) -+static HRESULT WINAPI PngEncoder_GetEncoderInfo(IWICBitmapEncoder *iface, IWICBitmapEncoderInfo **info) - { -- FIXME("(%p,%p): stub\n", iface, ppIEncoderInfo); -- return E_NOTIMPL; -+ IWICComponentInfo *comp_info; -+ HRESULT hr; -+ -+ TRACE("%p,%p\n", iface, info); -+ -+ if (!info) return E_INVALIDARG; -+ -+ hr = CreateComponentInfo(&CLSID_WICPngEncoder, &comp_info); -+ if (hr == S_OK) -+ { -+ hr = IWICComponentInfo_QueryInterface(comp_info, &IID_IWICBitmapEncoderInfo, (void **)info); -+ IWICComponentInfo_Release(comp_info); -+ } -+ return hr; - } - - static HRESULT WINAPI PngEncoder_SetColorContexts(IWICBitmapEncoder *iface, --- -2.14.1 - diff --git a/patches/windowscodecs-GIF_Encoder/0024-windowscodecs-tests-Add-a-bunch-of-new-tests-for-ind.patch b/patches/windowscodecs-GIF_Encoder/0024-windowscodecs-tests-Add-a-bunch-of-new-tests-for-ind.patch deleted file mode 100644 index 16ed86e5..00000000 --- a/patches/windowscodecs-GIF_Encoder/0024-windowscodecs-tests-Add-a-bunch-of-new-tests-for-ind.patch +++ /dev/null @@ -1,581 +0,0 @@ -From 63254aa83cdb09ad7b0a56a6da1f0d8c7465733e Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Thu, 27 Oct 2016 15:10:09 +0800 -Subject: windowscodecs/tests: Add a bunch of new tests for indexed format - conversions. - ---- - dlls/windowscodecs/tests/converter.c | 285 +++++++++++++++++++++++++---------- - 1 file changed, 209 insertions(+), 76 deletions(-) - -diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index feeca5b..e6d21ac 100644 ---- a/dlls/windowscodecs/tests/converter.c -+++ b/dlls/windowscodecs/tests/converter.c -@@ -115,9 +115,30 @@ static HRESULT WINAPI BitmapTestSrc_GetResolution(IWICBitmapSource *iface, - } - - static HRESULT WINAPI BitmapTestSrc_CopyPalette(IWICBitmapSource *iface, -- IWICPalette *pIPalette) -+ IWICPalette *palette) - { -- return E_NOTIMPL; -+ BitmapTestSrc *This = impl_from_IWICBitmapSource(iface); -+ -+ if (IsEqualGUID(This->data->format, &GUID_WICPixelFormat1bppIndexed) || -+ IsEqualGUID(This->data->format, &GUID_WICPixelFormat2bppIndexed) || -+ IsEqualGUID(This->data->format, &GUID_WICPixelFormat4bppIndexed) || -+ IsEqualGUID(This->data->format, &GUID_WICPixelFormat8bppIndexed)) -+ { -+ WICColor colors[8]; -+ -+ colors[0] = 0xff0000ff; -+ colors[1] = 0xff00ff00; -+ colors[2] = 0xffff0000; -+ colors[3] = 0xff000000; -+ colors[4] = 0xffffff00; -+ colors[5] = 0xffff00ff; -+ colors[6] = 0xff00ffff; -+ colors[7] = 0xffffffff; -+ return IWICPalette_InitializeCustom(palette, colors, 8); -+ } -+ -+ /* unique error marker */ -+ return 0xdeadbeef; - } - - static HRESULT WINAPI BitmapTestSrc_CopyPixels(IWICBitmapSource *iface, -@@ -249,6 +270,21 @@ static BOOL compare_bits(const struct bitmap_data *expect, UINT buffersize, cons - break; - } - } -+ else if (IsEqualGUID(expect->format, &GUID_WICPixelFormat2bppIndexed) || -+ IsEqualGUID(expect->format, &GUID_WICPixelFormat4bppIndexed) || -+ IsEqualGUID(expect->format, &GUID_WICPixelFormat8bppIndexed)) -+ { -+ UINT i; -+ const BYTE *a=(const BYTE*)expect->bits, *b=(const BYTE*)converted_bits; -+ equal=TRUE; -+ -+ for (i=0; ibits, converted_bits, buffersize) == 0); - -@@ -258,7 +294,19 @@ static BOOL compare_bits(const struct bitmap_data *expect, UINT buffersize, cons - return equal; - } - --static void compare_bitmap_data(const struct bitmap_data *expect, IWICBitmapSource *source, const char *name) -+static BOOL is_indexed_format(const GUID *format) -+{ -+ if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed) || -+ IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed) || -+ IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed) || -+ IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) -+ return TRUE; -+ -+ return FALSE; -+} -+ -+static void compare_bitmap_data(const struct bitmap_data *src, const struct bitmap_data *expect, -+ IWICBitmapSource *source, const char *name) - { - BYTE *converted_bits; - UINT width, height; -@@ -291,15 +339,24 @@ static void compare_bitmap_data(const struct bitmap_data *expect, IWICBitmapSour - buffersize = stride * expect->height; - - converted_bits = HeapAlloc(GetProcessHeap(), 0, buffersize); -+ memset(converted_bits, 0xaa, buffersize); - hr = IWICBitmapSource_CopyPixels(source, &prc, stride, buffersize, converted_bits); - ok(SUCCEEDED(hr), "CopyPixels(%s) failed, hr=%x\n", name, hr); -- ok(compare_bits(expect, buffersize, converted_bits), "unexpected pixel data (%s)\n", name); -+ -+ /* The result of conversion of color to indexed formats depends on -+ * optimized palette generation implementation. We either need to -+ * assign our own palette, or just skip the comparison. -+ */ -+ if (!(!is_indexed_format(src->format) && is_indexed_format(expect->format))) -+ ok(compare_bits(expect, buffersize, converted_bits), "unexpected pixel data (%s)\n", name); - - /* Test with NULL rectangle - should copy the whole bitmap */ - memset(converted_bits, 0xaa, buffersize); - hr = IWICBitmapSource_CopyPixels(source, NULL, stride, buffersize, converted_bits); - ok(SUCCEEDED(hr), "CopyPixels(%s,rc=NULL) failed, hr=%x\n", name, hr); -- ok(compare_bits(expect, buffersize, converted_bits), "unexpected pixel data (%s)\n", name); -+ /* see comment above */ -+ if (!(!is_indexed_format(src->format) && is_indexed_format(expect->format))) -+ ok(compare_bits(expect, buffersize, converted_bits), "unexpected pixel data (%s)\n", name); - - HeapFree(GetProcessHeap(), 0, converted_bits); - } -@@ -315,78 +372,137 @@ static const struct bitmap_data testdata_1bppIndexed = { - - /* some encoders (like BMP) require data to be 4-bytes aligned */ - static const BYTE bits_2bpp[] = { -- 0x55,0x55,0x55,0x55, -- 0xaa,0xaa,0xaa,0xaa}; -+ 0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, -+ 0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24}; - static const struct bitmap_data testdata_2bppIndexed = { -- &GUID_WICPixelFormat2bppIndexed, 2, bits_2bpp, 16, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat2bppIndexed, 2, bits_2bpp, 32, 2, 96.0, 96.0}; - - /* some encoders (like BMP) require data to be 4-bytes aligned */ - static const BYTE bits_4bpp[] = { -- 0x55,0x55,0x55,0x55, -- 0xaa,0xaa,0xaa,0xaa}; -+ 0x01,0x23,0x01,0x23,0x01,0x23,0x01,0x23,0x01,0x23,0x01,0x23,0x01,0x23,0x01,0x23, -+ 0x45,0x67,0x45,0x67,0x45,0x67,0x45,0x67,0x45,0x67,0x45,0x67,0x45,0x67,0x45,0x67}; -+ - static const struct bitmap_data testdata_4bppIndexed = { -- &GUID_WICPixelFormat4bppIndexed, 4, bits_4bpp, 8, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat4bppIndexed, 4, bits_4bpp, 32, 2, 96.0, 96.0}; -+ -+static const BYTE bits_8bpp_BW[] = { -+ 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, -+ 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}; -+static const struct bitmap_data testdata_8bppIndexed_BW = { -+ &GUID_WICPixelFormat8bppIndexed, 8, bits_8bpp_BW, 32, 2, 96.0, 96.0}; -+ -+static const BYTE bits_8bpp_4colors[] = { -+ 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, -+ 3,2,1,3,3,2,1,3,3,2,1,3,3,2,1,3,3,2,1,3,3,2,1,3,3,2,1,3,3,2,1,3}; -+static const struct bitmap_data testdata_8bppIndexed_4colors = { -+ &GUID_WICPixelFormat8bppIndexed, 8, bits_8bpp_4colors, 32, 2, 96.0, 96.0}; - - static const BYTE bits_8bpp[] = { -- 0,1,2,3, -- 4,5,6,7}; -+ 0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3, -+ 4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7}; - static const struct bitmap_data testdata_8bppIndexed = { -- &GUID_WICPixelFormat8bppIndexed, 8, bits_8bpp, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat8bppIndexed, 8, bits_8bpp, 32, 2, 96.0, 96.0}; - - static const BYTE bits_24bppBGR[] = { -- 255,0,0, 0,255,0, 0,0,255, 0,0,0, -- 0,255,255, 255,0,255, 255,255,0, 255,255,255}; -+ 255,0,0, 0,255,0, 0,0,255, 0,0,0, 255,0,0, 0,255,0, 0,0,255, 0,0,0, -+ 255,0,0, 0,255,0, 0,0,255, 0,0,0, 255,0,0, 0,255,0, 0,0,255, 0,0,0, -+ 255,0,0, 0,255,0, 0,0,255, 0,0,0, 255,0,0, 0,255,0, 0,0,255, 0,0,0, -+ 255,0,0, 0,255,0, 0,0,255, 0,0,0, 255,0,0, 0,255,0, 0,0,255, 0,0,0, -+ 0,255,255, 255,0,255, 255,255,0, 255,255,255, 0,255,255, 255,0,255, 255,255,0, 255,255,255, -+ 0,255,255, 255,0,255, 255,255,0, 255,255,255, 0,255,255, 255,0,255, 255,255,0, 255,255,255, -+ 0,255,255, 255,0,255, 255,255,0, 255,255,255, 0,255,255, 255,0,255, 255,255,0, 255,255,255, -+ 0,255,255, 255,0,255, 255,255,0, 255,255,255, 0,255,255, 255,0,255, 255,255,0, 255,255,255}; - static const struct bitmap_data testdata_24bppBGR = { -- &GUID_WICPixelFormat24bppBGR, 24, bits_24bppBGR, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat24bppBGR, 24, bits_24bppBGR, 32, 2, 96.0, 96.0}; - - static const BYTE bits_24bppRGB[] = { -- 0,0,255, 0,255,0, 255,0,0, 0,0,0, -- 255,255,0, 255,0,255, 0,255,255, 255,255,255}; -+ 0,0,255, 0,255,0, 255,0,0, 0,0,0, 0,0,255, 0,255,0, 255,0,0, 0,0,0, -+ 0,0,255, 0,255,0, 255,0,0, 0,0,0, 0,0,255, 0,255,0, 255,0,0, 0,0,0, -+ 0,0,255, 0,255,0, 255,0,0, 0,0,0, 0,0,255, 0,255,0, 255,0,0, 0,0,0, -+ 0,0,255, 0,255,0, 255,0,0, 0,0,0, 0,0,255, 0,255,0, 255,0,0, 0,0,0, -+ 255,255,0, 255,0,255, 0,255,255, 255,255,255, 255,255,0, 255,0,255, 0,255,255, 255,255,255, -+ 255,255,0, 255,0,255, 0,255,255, 255,255,255, 255,255,0, 255,0,255, 0,255,255, 255,255,255, -+ 255,255,0, 255,0,255, 0,255,255, 255,255,255, 255,255,0, 255,0,255, 0,255,255, 255,255,255, -+ 255,255,0, 255,0,255, 0,255,255, 255,255,255, 255,255,0, 255,0,255, 0,255,255, 255,255,255 }; - static const struct bitmap_data testdata_24bppRGB = { -- &GUID_WICPixelFormat24bppRGB, 24, bits_24bppRGB, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat24bppRGB, 24, bits_24bppRGB, 32, 2, 96.0, 96.0}; - - static const BYTE bits_32bppBGR[] = { -- 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, -- 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80}; -+ 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, -+ 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, -+ 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, -+ 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, 255,0,0,80, 0,255,0,80, 0,0,255,80, 0,0,0,80, -+ 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, -+ 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, -+ 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, -+ 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80, 0,255,255,80, 255,0,255,80, 255,255,0,80, 255,255,255,80}; - static const struct bitmap_data testdata_32bppBGR = { -- &GUID_WICPixelFormat32bppBGR, 32, bits_32bppBGR, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat32bppBGR, 32, bits_32bppBGR, 32, 2, 96.0, 96.0}; - - static const BYTE bits_32bppBGRA[] = { -- 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, -- 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255}; -+ 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, -+ 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, -+ 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, -+ 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, 255,0,0,255, 0,255,0,255, 0,0,255,255, 0,0,0,255, -+ 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, -+ 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, -+ 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, -+ 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255, 0,255,255,255, 255,0,255,255, 255,255,0,255, 255,255,255,255}; - static const struct bitmap_data testdata_32bppBGRA = { -- &GUID_WICPixelFormat32bppBGRA, 32, bits_32bppBGRA, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat32bppBGRA, 32, bits_32bppBGRA, 32, 2, 96.0, 96.0}; - - /* XP and 2003 use linear color conversion, later versions use sRGB gamma */ - static const float bits_32bppGrayFloat_xp[] = { -- 0.114000f,0.587000f,0.299000f,0.000000f, -- 0.886000f,0.413000f,0.701000f,1.000000f}; -+ 0.114000f,0.587000f,0.299000f,0.000000f,0.114000f,0.587000f,0.299000f,0.000000f, -+ 0.114000f,0.587000f,0.299000f,0.000000f,0.114000f,0.587000f,0.299000f,0.000000f, -+ 0.114000f,0.587000f,0.299000f,0.000000f,0.114000f,0.587000f,0.299000f,0.000000f, -+ 0.114000f,0.587000f,0.299000f,0.000000f,0.114000f,0.587000f,0.299000f,0.000000f, -+ 0.886000f,0.413000f,0.701000f,1.000000f,0.886000f,0.413000f,0.701000f,1.000000f, -+ 0.886000f,0.413000f,0.701000f,1.000000f,0.886000f,0.413000f,0.701000f,1.000000f, -+ 0.886000f,0.413000f,0.701000f,1.000000f,0.886000f,0.413000f,0.701000f,1.000000f, -+ 0.886000f,0.413000f,0.701000f,1.000000f,0.886000f,0.413000f,0.701000f,1.000000f}; - static const struct bitmap_data testdata_32bppGrayFloat_xp = { -- &GUID_WICPixelFormat32bppGrayFloat, 32, (const BYTE *)bits_32bppGrayFloat_xp, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat32bppGrayFloat, 32, (const BYTE *)bits_32bppGrayFloat_xp, 32, 2, 96.0, 96.0}; - - static const float bits_32bppGrayFloat[] = { -- 0.072200f,0.715200f,0.212600f,0.000000f, -- 0.927800f,0.284800f,0.787400f,1.000000f}; -+ 0.072200f,0.715200f,0.212600f,0.000000f,0.072200f,0.715200f,0.212600f,0.000000f, -+ 0.072200f,0.715200f,0.212600f,0.000000f,0.072200f,0.715200f,0.212600f,0.000000f, -+ 0.072200f,0.715200f,0.212600f,0.000000f,0.072200f,0.715200f,0.212600f,0.000000f, -+ 0.072200f,0.715200f,0.212600f,0.000000f,0.072200f,0.715200f,0.212600f,0.000000f, -+ 0.927800f,0.284800f,0.787400f,1.000000f,0.927800f,0.284800f,0.787400f,1.000000f, -+ 0.927800f,0.284800f,0.787400f,1.000000f,0.927800f,0.284800f,0.787400f,1.000000f, -+ 0.927800f,0.284800f,0.787400f,1.000000f,0.927800f,0.284800f,0.787400f,1.000000f, -+ 0.927800f,0.284800f,0.787400f,1.000000f,0.927800f,0.284800f,0.787400f,1.000000f}; - static const struct bitmap_data testdata_32bppGrayFloat = { -- &GUID_WICPixelFormat32bppGrayFloat, 32, (const BYTE *)bits_32bppGrayFloat, 4, 2, 96.0, 96.0, &testdata_32bppGrayFloat_xp}; -+ &GUID_WICPixelFormat32bppGrayFloat, 32, (const BYTE *)bits_32bppGrayFloat, 32, 2, 96.0, 96.0, &testdata_32bppGrayFloat_xp}; - - static const BYTE bits_8bppGray_xp[] = { -- 29,150,76,0, -- 226,105,179,255}; -+ 29,150,76,0,29,150,76,0,29,150,76,0,29,150,76,0, -+ 29,150,76,0,29,150,76,0,29,150,76,0,29,150,76,0, -+ 226,105,179,255,226,105,179,255,226,105,179,255,226,105,179,255, -+ 226,105,179,255,226,105,179,255,226,105,179,255,226,105,179,255}; - static const struct bitmap_data testdata_8bppGray_xp = { -- &GUID_WICPixelFormat8bppGray, 8, bits_8bppGray_xp, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat8bppGray, 8, bits_8bppGray_xp, 32, 2, 96.0, 96.0}; - - static const BYTE bits_8bppGray[] = { -- 76,220,127,0, -- 247,145,230,255}; -+ 76,220,127,0,76,220,127,0,76,220,127,0,76,220,127,0, -+ 76,220,127,0,76,220,127,0,76,220,127,0,76,220,127,0, -+ 247,145,230,255,247,145,230,255,247,145,230,255,247,145,230,255, -+ 247,145,230,255,247,145,230,255,247,145,230,255,247,145,230,255}; - static const struct bitmap_data testdata_8bppGray = { -- &GUID_WICPixelFormat8bppGray, 8, bits_8bppGray, 4, 2, 96.0, 96.0, &testdata_8bppGray_xp}; -+ &GUID_WICPixelFormat8bppGray, 8, bits_8bppGray, 32, 2, 96.0, 96.0, &testdata_8bppGray_xp}; - - static const BYTE bits_24bppBGR_gray[] = { -- 76,76,76, 220,220,220, 127,127,127, 0,0,0, -- 247,247,247, 145,145,145, 230,230,230, 255,255,255}; -+ 76,76,76, 220,220,220, 127,127,127, 0,0,0, 76,76,76, 220,220,220, 127,127,127, 0,0,0, -+ 76,76,76, 220,220,220, 127,127,127, 0,0,0, 76,76,76, 220,220,220, 127,127,127, 0,0,0, -+ 76,76,76, 220,220,220, 127,127,127, 0,0,0, 76,76,76, 220,220,220, 127,127,127, 0,0,0, -+ 76,76,76, 220,220,220, 127,127,127, 0,0,0, 76,76,76, 220,220,220, 127,127,127, 0,0,0, -+ 247,247,247, 145,145,145, 230,230,230, 255,255,255, 247,247,247, 145,145,145, 230,230,230, 255,255,255, -+ 247,247,247, 145,145,145, 230,230,230, 255,255,255, 247,247,247, 145,145,145, 230,230,230, 255,255,255, -+ 247,247,247, 145,145,145, 230,230,230, 255,255,255, 247,247,247, 145,145,145, 230,230,230, 255,255,255, -+ 247,247,247, 145,145,145, 230,230,230, 255,255,255, 247,247,247, 145,145,145, 230,230,230, 255,255,255}; - static const struct bitmap_data testdata_24bppBGR_gray = { -- &GUID_WICPixelFormat24bppBGR, 24, bits_24bppBGR_gray, 4, 2, 96.0, 96.0}; -+ &GUID_WICPixelFormat24bppBGR, 24, bits_24bppBGR_gray, 32, 2, 96.0, 96.0}; - - static void test_conversion(const struct bitmap_data *src, const struct bitmap_data *dst, const char *name, BOOL todo) - { -@@ -398,11 +514,12 @@ static void test_conversion(const struct bitmap_data *src, const struct bitmap_d - - hr = WICConvertBitmapSource(dst->format, &src_obj->IWICBitmapSource_iface, &dst_bitmap); - todo_wine_if (todo) -- ok(SUCCEEDED(hr), "WICConvertBitmapSource(%s) failed, hr=%x\n", name, hr); -+ ok(hr == S_OK || -+ broken(hr == E_INVALIDARG) /* XP */, "WICConvertBitmapSource(%s) failed, hr=%x\n", name, hr); - -- if (SUCCEEDED(hr)) -+ if (hr == S_OK) - { -- compare_bitmap_data(dst, dst_bitmap, name); -+ compare_bitmap_data(src, dst, dst_bitmap, name); - - IWICBitmapSource_Release(dst_bitmap); - } -@@ -450,7 +567,7 @@ static void test_default_converter(void) - ok(SUCCEEDED(hr), "Initialize returned %x\n", hr); - - if (SUCCEEDED(hr)) -- compare_bitmap_data(&testdata_32bppBGR, (IWICBitmapSource*)converter, "default converter"); -+ compare_bitmap_data(&testdata_32bppBGRA, &testdata_32bppBGR, (IWICBitmapSource*)converter, "default converter"); - - IWICFormatConverter_Release(converter); - } -@@ -706,7 +823,7 @@ static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) - { -- ok(width == 16, "wrong width %u\n", width); -+ ok(width == 32, "wrong width %u\n", width); - ok(height == 2, "wrong height %u\n", height); - - ok(bps == 2, "wrong bps %d\n", bps); -@@ -716,7 +833,7 @@ static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) - { -- ok(width == 8, "wrong width %u\n", width); -+ ok(width == 32, "wrong width %u\n", width); - ok(height == 2, "wrong height %u\n", height); - - ok(bps == 4, "wrong bps %d\n", bps); -@@ -726,7 +843,7 @@ static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) - { -- ok(width == 4, "wrong width %u\n", width); -+ ok(width == 32, "wrong width %u\n", width); - ok(height == 2, "wrong height %u\n", height); - - ok(bps == 8, "wrong bps %d\n", bps); -@@ -736,7 +853,7 @@ static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat24bppBGR)) - { -- ok(width == 4, "wrong width %u\n", width); -+ ok(width == 32, "wrong width %u\n", width); - ok(height == 2, "wrong height %u\n", height); - - ok(bps == 3, "wrong bps %d\n", bps); -@@ -754,7 +871,6 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - BITMAPFILEHEADER bfh; - BITMAPV5HEADER bih; - -- memset(&bfh, 0, sizeof(bfh)); - hr = IStream_Read(stream, &bfh, sizeof(bfh), NULL); - ok(hr == S_OK, "IStream_Read error %#x\n", hr); - -@@ -762,13 +878,12 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - ok(bfh.bfReserved1 == 0, "wrong bfReserved1 %02x\n", bfh.bfReserved1); - ok(bfh.bfReserved2 == 0, "wrong bfReserved2 %02x\n", bfh.bfReserved2); - -- memset(&bih, 0, sizeof(bih)); - hr = IStream_Read(stream, &bih, sizeof(bih), NULL); - ok(hr == S_OK, "IStream_Read error %#x\n", hr); - - if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed)) - { -- ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %08x\n", bfh.bfOffBits); - - ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); -@@ -780,9 +895,9 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) - { -- ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %08x\n", bfh.bfOffBits); - -- ok(bih.bV5Width == 16, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - - ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -@@ -792,9 +907,9 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) - { -- ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %08x\n", bfh.bfOffBits); - -- ok(bih.bV5Width == 8, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - - ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -@@ -804,9 +919,9 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) - { -- ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %08x\n", bfh.bfOffBits); - -- ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - - ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -@@ -816,9 +931,9 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat32bppBGR)) - { -- ok(bfh.bfOffBits == 0x0036, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ ok(bfh.bfOffBits == 0x0036, "wrong bfOffBits %08x\n", bfh.bfOffBits); - -- ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - - ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -@@ -886,7 +1001,7 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) - { -- ok(be_uint(png.width) == 16, "wrong width %u\n", be_uint(png.width)); -+ ok(be_uint(png.width) == 32, "wrong width %u\n", be_uint(png.width)); - ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height)); - - ok(png.bit_depth == 2, "wrong bit_depth %d\n", png.bit_depth); -@@ -897,7 +1012,7 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) - { -- ok(be_uint(png.width) == 8, "wrong width %u\n", be_uint(png.width)); -+ ok(be_uint(png.width) == 32, "wrong width %u\n", be_uint(png.width)); - ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height)); - - ok(png.bit_depth == 4, "wrong bit_depth %d\n", png.bit_depth); -@@ -908,7 +1023,7 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) - { -- ok(be_uint(png.width) == 4, "wrong width %u\n", be_uint(png.width)); -+ ok(be_uint(png.width) == 32, "wrong width %u\n", be_uint(png.width)); - ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height)); - - ok(png.bit_depth == 8, "wrong bit_depth %d\n", png.bit_depth); -@@ -919,7 +1034,7 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat24bppBGR)) - { -- ok(be_uint(png.width) == 4, "wrong width %u\n", be_uint(png.width)); -+ ok(be_uint(png.width) == 32, "wrong width %u\n", be_uint(png.width)); - ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height)); - - ok(png.bit_depth == 8, "wrong bit_depth %d\n", png.bit_depth); -@@ -1054,8 +1169,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - hr = IWICBitmapFrameEncode_SetPixelFormat(frameencode, &pixelformat); - ok(SUCCEEDED(hr), "SetPixelFormat failed, hr=%x\n", hr); - ok(IsEqualGUID(&pixelformat, dsts[i]->format) || -- broken(IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)) || -- broken(IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)), -+ broken(IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)) || -+ broken(IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)), - "SetPixelFormat changed the format to %s (%s)\n", wine_dbgstr_guid(&pixelformat), name); - - hr = IWICBitmapFrameEncode_SetSize(frameencode, srcs[i]->width, srcs[i]->height); -@@ -1088,8 +1203,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - ok(SUCCEEDED(hr), "WriteSource(%dx%d) failed, hr=%x (%s)\n", rc->Width, rc->Height, hr, name); - else - ok(hr == S_OK || -- broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2) || -- broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2) || -+ broken(hr == E_INVALIDARG && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2) /* XP */ || -+ broken(hr == E_INVALIDARG && IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2) /* XP */ || - broken(hr == E_INVALIDARG && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && IsEqualGUID(srcs[i]->format, &GUID_WICPixelFormatBlackWhite)) /* XP */, - "WriteSource(NULL) failed, hr=%x (%s)\n", hr, name); - } -@@ -1114,7 +1229,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - hr = IWICBitmapEncoder_Commit(encoder); - ok(SUCCEEDED(hr), "Commit failed, hr=%x\n", hr); - -- check_bitmap_format(stream, clsid_encoder, dsts[0]->format); -+ if (IsEqualGUID(&pixelformat, dsts[0]->format)) -+ check_bitmap_format(stream, clsid_encoder, dsts[0]->format); - } - - if (SUCCEEDED(hr)) -@@ -1149,7 +1265,9 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - - if (SUCCEEDED(hr)) - { -- compare_bitmap_data(dsts[i], (IWICBitmapSource*)framedecode, name); -+ hr = IWICBitmapFrameDecode_GetPixelFormat(framedecode, &pixelformat); -+ if (IsEqualGUID(&pixelformat, dsts[i]->format)) -+ compare_bitmap_data(srcs[i], dsts[i], (IWICBitmapSource*)framedecode, name); - - hr = IWICBitmapFrameDecode_CopyPalette(framedecode, frame_palette); - if (winetest_debug > 1) -@@ -1197,8 +1315,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - else if (IsEqualGUID(clsid_decoder, &CLSID_WICBmpDecoder) || - IsEqualGUID(clsid_decoder, &CLSID_WICTiffDecoder)) - { -- if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormatBlackWhite) || -- IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat8bppIndexed)) -+ if (IsEqualGUID(&pixelformat, &GUID_WICPixelFormatBlackWhite) || -+ IsEqualGUID(&pixelformat, &GUID_WICPixelFormat8bppIndexed)) - { - ok(count == 256, "expected 256, got %u (%s)\n", count, name); - -@@ -1209,7 +1327,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name); - ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name); - } -- else if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat2bppIndexed)) -+ else if (IsEqualGUID(&pixelformat, &GUID_WICPixelFormat2bppIndexed)) - { - ok(count == 4, "expected 4, got %u (%s)\n", count, name); - -@@ -1218,7 +1336,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - ok(colors[2] == 0xff333333, "got %08x (%s)\n", colors[2], name); - ok(colors[3] == 0xff444444, "got %08x (%s)\n", colors[3], name); - } -- else if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat4bppIndexed)) -+ else if (IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)) - { - ok(count == 16, "expected 16, got %u (%s)\n", count, name); - -@@ -1308,7 +1426,7 @@ static void test_encoder_rects(void) - - rc.X = 0; - rc.Y = 0; -- rc.Width = 4; -+ rc.Width = 32; - rc.Height = 2; - - test_multi_encoder(srcs, &CLSID_WICTiffEncoder, dsts, &CLSID_WICTiffDecoder, &rc, NULL, "test_encoder_rects full", NULL); -@@ -1319,7 +1437,7 @@ static void test_encoder_rects(void) - rc.Width = -1; - test_multi_encoder(srcs, &CLSID_WICTiffEncoder, dsts, &CLSID_WICTiffDecoder, &rc, NULL, "test_encoder_rects width=-1", NULL); - -- rc.Width = 4; -+ rc.Width = 32; - rc.Height = 0; - test_multi_encoder(srcs, &CLSID_WICTiffEncoder, dsts, &CLSID_WICTiffDecoder, &rc, NULL, "test_encoder_rects height=0", NULL); - -@@ -1351,6 +1469,16 @@ START_TEST(converter) - &IID_IWICImagingFactory, (void **)&factory); - ok(hr == S_OK, "failed to create factory: %#x\n", hr); - -+ test_conversion(&testdata_24bppRGB, &testdata_1bppIndexed, "24bppRGB -> 1bppIndexed", TRUE); -+ test_conversion(&testdata_24bppRGB, &testdata_2bppIndexed, "24bppRGB -> 2bppIndexed", TRUE); -+ test_conversion(&testdata_24bppRGB, &testdata_4bppIndexed, "24bppRGB -> 4bppIndexed", TRUE); -+ test_conversion(&testdata_24bppRGB, &testdata_8bppIndexed, "24bppRGB -> 8bppIndexed", FALSE); -+ -+ test_conversion(&testdata_BlackWhite, &testdata_8bppIndexed_BW, "BlackWhite -> 8bppIndexed", TRUE); -+ test_conversion(&testdata_1bppIndexed, &testdata_8bppIndexed_BW, "1bppIndexed -> 8bppIndexed", TRUE); -+ test_conversion(&testdata_2bppIndexed, &testdata_8bppIndexed_4colors, "2bppIndexed -> 8bppIndexed", TRUE); -+ test_conversion(&testdata_4bppIndexed, &testdata_8bppIndexed, "4bppIndexed -> 8bppIndexed", TRUE); -+ - test_conversion(&testdata_32bppBGRA, &testdata_32bppBGR, "BGRA -> BGR", FALSE); - test_conversion(&testdata_32bppBGR, &testdata_32bppBGRA, "BGR -> BGRA", FALSE); - test_conversion(&testdata_32bppBGRA, &testdata_32bppBGRA, "BGRA -> BGRA", FALSE); -@@ -1388,6 +1516,11 @@ START_TEST(converter) - &testdata_8bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 8bppIndexed"); - test_encoder(&testdata_24bppBGR, &CLSID_WICPngEncoder, - &testdata_24bppBGR, &CLSID_WICPngDecoder, "PNG encoder 24bppBGR"); -+if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in Wine */ -+{ -+ test_encoder(&testdata_32bppBGR, &CLSID_WICPngEncoder, -+ &testdata_24bppBGR, &CLSID_WICPngDecoder, "PNG encoder 32bppBGR"); -+} - - test_encoder(&testdata_BlackWhite, &CLSID_WICBmpEncoder, - &testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder BlackWhite"); --- -2.9.0 - diff --git a/patches/windowscodecs-GIF_Encoder/0025-windowscodecs-tests-Add-some-tests-for-converting-24.patch b/patches/windowscodecs-GIF_Encoder/0025-windowscodecs-tests-Add-some-tests-for-converting-24.patch index e9e5de71..027d449c 100644 --- a/patches/windowscodecs-GIF_Encoder/0025-windowscodecs-tests-Add-some-tests-for-converting-24.patch +++ b/patches/windowscodecs-GIF_Encoder/0025-windowscodecs-tests-Add-some-tests-for-converting-24.patch @@ -1,18 +1,18 @@ -From cf2301cafab21d7a67cf7a3b3a11db0ed17d0042 Mon Sep 17 00:00:00 2001 +From e27b9d2889f424ecffabc57e449e995fab80274f Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Thu, 27 Oct 2016 15:13:24 +0800 -Subject: windowscodecs/tests: Add some tests for converting 24bppBGR to - 8bppIndexed format. +Subject: [PATCH] windowscodecs/tests: Add some tests for converting + 24bppBGR to 8bppIndexed format. --- - dlls/windowscodecs/tests/converter.c | 159 +++++++++++++++++++++++++++++++++++ - 1 file changed, 159 insertions(+) + dlls/windowscodecs/tests/converter.c | 158 +++++++++++++++++++++++++++++++++++ + 1 file changed, 158 insertions(+) diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index e6d21ac..b8ed4d4 100644 +index 4eea13b..089926b 100644 --- a/dlls/windowscodecs/tests/converter.c +++ b/dlls/windowscodecs/tests/converter.c -@@ -1459,6 +1459,163 @@ static const struct setting png_interlace_settings[] = { +@@ -1468,6 +1468,163 @@ static const struct setting png_interlace_settings[] = { {NULL} }; @@ -176,15 +176,14 @@ index e6d21ac..b8ed4d4 100644 START_TEST(converter) { HRESULT hr; -@@ -1469,6 +1626,8 @@ START_TEST(converter) - &IID_IWICImagingFactory, (void **)&factory); - ok(hr == S_OK, "failed to create factory: %#x\n", hr); +@@ -1502,6 +1659,7 @@ START_TEST(converter) + test_invalid_conversion(); + test_default_converter(); + test_converter_8bppIndexed(); -+ - test_conversion(&testdata_24bppRGB, &testdata_1bppIndexed, "24bppRGB -> 1bppIndexed", TRUE); - test_conversion(&testdata_24bppRGB, &testdata_2bppIndexed, "24bppRGB -> 2bppIndexed", TRUE); - test_conversion(&testdata_24bppRGB, &testdata_4bppIndexed, "24bppRGB -> 4bppIndexed", TRUE); + + test_encoder(&testdata_BlackWhite, &CLSID_WICPngEncoder, + &testdata_BlackWhite, &CLSID_WICPngDecoder, "PNG encoder BlackWhite"); -- -2.9.0 +1.9.1 diff --git a/patches/windowscodecs-GIF_Encoder/0026-windowscodecs-tests-Add-the-tests-for-GIF-encoder-an.patch b/patches/windowscodecs-GIF_Encoder/0026-windowscodecs-tests-Add-the-tests-for-GIF-encoder-an.patch index f3ca3755..0b28d979 100644 --- a/patches/windowscodecs-GIF_Encoder/0026-windowscodecs-tests-Add-the-tests-for-GIF-encoder-an.patch +++ b/patches/windowscodecs-GIF_Encoder/0026-windowscodecs-tests-Add-the-tests-for-GIF-encoder-an.patch @@ -1,17 +1,18 @@ -From e90eb83510bd3edbdc8ca8984cb9d0643b652fa1 Mon Sep 17 00:00:00 2001 +From d9cd3ba23fa27fcffbe3d5dff9754c0520b3f92e Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Thu, 27 Oct 2016 15:17:19 +0800 -Subject: windowscodecs/tests: Add the tests for GIF encoder and decoder. +Subject: [PATCH] windowscodecs/tests: Add the tests for GIF encoder and + decoder. --- dlls/windowscodecs/tests/converter.c | 59 +++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index b8ed4d4..430c0ed 100644 +index 089926b..5480584 100644 --- a/dlls/windowscodecs/tests/converter.c +++ b/dlls/windowscodecs/tests/converter.c -@@ -1047,6 +1047,40 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) +@@ -956,6 +956,40 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) ok(0, "unknown PNG pixel format %s\n", wine_dbgstr_guid(format)); } @@ -52,7 +53,7 @@ index b8ed4d4..430c0ed 100644 static void check_bitmap_format(IStream *stream, const CLSID *encoder, const WICPixelFormatGUID *format) { HRESULT hr; -@@ -1062,6 +1096,8 @@ static void check_bitmap_format(IStream *stream, const CLSID *encoder, const WIC +@@ -971,6 +1005,8 @@ static void check_bitmap_format(IStream *stream, const CLSID *encoder, const WIC check_bmp_format(stream, format); else if (IsEqualGUID(encoder, &CLSID_WICTiffEncoder)) check_tiff_format(stream, format); @@ -61,7 +62,7 @@ index b8ed4d4..430c0ed 100644 else ok(0, "unknown encoder %s\n", wine_dbgstr_guid(encoder)); -@@ -1094,7 +1130,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls +@@ -1089,7 +1125,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls hr = CoCreateInstance(clsid_encoder, NULL, CLSCTX_INPROC_SERVER, &IID_IWICBitmapEncoder, (void**)&encoder); @@ -70,7 +71,7 @@ index b8ed4d4..430c0ed 100644 if (SUCCEEDED(hr)) { hglobal = GlobalAlloc(GMEM_MOVEABLE, 0); -@@ -1119,7 +1155,10 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls +@@ -1116,7 +1152,10 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls if (palette) { hr = IWICBitmapEncoder_SetPalette(encoder, palette); @@ -82,7 +83,7 @@ index b8ed4d4..430c0ed 100644 hr = S_OK; } -@@ -1248,13 +1287,19 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls +@@ -1268,13 +1307,19 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls ok(hr == S_OK, "CreatePalette error %#x\n", hr); hr = IWICBitmapDecoder_CopyPalette(decoder, frame_palette); @@ -104,7 +105,7 @@ index b8ed4d4..430c0ed 100644 hr = S_OK; i=0; -@@ -1313,7 +1358,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls +@@ -1331,7 +1376,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls } } else if (IsEqualGUID(clsid_decoder, &CLSID_WICBmpDecoder) || @@ -112,11 +113,11 @@ index b8ed4d4..430c0ed 100644 + IsEqualGUID(clsid_decoder, &CLSID_WICTiffDecoder) || + IsEqualGUID(clsid_decoder, &CLSID_WICGifDecoder)) { - if (IsEqualGUID(&pixelformat, &GUID_WICPixelFormatBlackWhite) || - IsEqualGUID(&pixelformat, &GUID_WICPixelFormat8bppIndexed)) -@@ -1663,6 +1709,9 @@ START_TEST(converter) - test_invalid_conversion(); + if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormatBlackWhite) || + IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat8bppIndexed)) +@@ -1661,6 +1707,9 @@ START_TEST(converter) test_default_converter(); + test_converter_8bppIndexed(); + test_encoder(&testdata_8bppIndexed, &CLSID_WICGifEncoder, + &testdata_8bppIndexed, &CLSID_WICGifDecoder, "GIF encoder 8bppIndexed"); @@ -125,5 +126,5 @@ index b8ed4d4..430c0ed 100644 &testdata_BlackWhite, &CLSID_WICPngDecoder, "PNG encoder BlackWhite"); test_encoder(&testdata_1bppIndexed, &CLSID_WICPngEncoder, -- -2.9.0 +1.9.1 diff --git a/patches/windowscodecs-GIF_Encoder/0027-windowscodecs-tests-Add-a-missing-check-for-IWICBitm.patch b/patches/windowscodecs-GIF_Encoder/0027-windowscodecs-tests-Add-a-missing-check-for-IWICBitm.patch deleted file mode 100644 index 7df83d87..00000000 --- a/patches/windowscodecs-GIF_Encoder/0027-windowscodecs-tests-Add-a-missing-check-for-IWICBitm.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 18eb6add9eac40d84a809d75d340600e44cc1dae Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Sun, 6 Nov 2016 16:25:12 +0800 -Subject: windowscodecs/tests: Add a missing check for - IWICBitmapFrameDecode::GetPixelFormat return value. - ---- - dlls/windowscodecs/tests/converter.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index 430c0ed..6d782f3 100644 ---- a/dlls/windowscodecs/tests/converter.c -+++ b/dlls/windowscodecs/tests/converter.c -@@ -1311,6 +1311,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - if (SUCCEEDED(hr)) - { - hr = IWICBitmapFrameDecode_GetPixelFormat(framedecode, &pixelformat); -+ ok(hr == S_OK, "GetPixelFormat) failed, hr=%x (%s)\n", hr, name); - if (IsEqualGUID(&pixelformat, dsts[i]->format)) - compare_bitmap_data(srcs[i], dsts[i], (IWICBitmapSource*)framedecode, name); - --- -2.9.0 - diff --git a/patches/windowscodecs-GIF_Encoder/0028-windowscodecs-Correctly-indicate-that-the-global-inf.patch b/patches/windowscodecs-GIF_Encoder/0028-windowscodecs-Correctly-indicate-that-the-global-inf.patch index 15a79fb1..41ca38bb 100644 --- a/patches/windowscodecs-GIF_Encoder/0028-windowscodecs-Correctly-indicate-that-the-global-inf.patch +++ b/patches/windowscodecs-GIF_Encoder/0028-windowscodecs-Correctly-indicate-that-the-global-inf.patch @@ -1,18 +1,18 @@ -From 5855243712899817e834f024878f4f5e82f824e5 Mon Sep 17 00:00:00 2001 +From ae0320150d2baec0415219ef3991431eb2ccc7af Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Sun, 6 Nov 2016 16:28:12 +0800 -Subject: windowscodecs: Correctly indicate that the global info was written - even without the global palette. +Subject: [PATCH] windowscodecs: Correctly indicate that the global info + was written even without the global palette. --- dlls/windowscodecs/gifformat.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/windowscodecs/gifformat.c b/dlls/windowscodecs/gifformat.c -index 9d0ae6b..efeddb0 100644 +index 58144ca..6851296 100644 --- a/dlls/windowscodecs/gifformat.c +++ b/dlls/windowscodecs/gifformat.c -@@ -2047,11 +2047,12 @@ static HRESULT WINAPI GifFrameEncode_Commit(IWICBitmapFrameEncode *iface) +@@ -2041,11 +2041,12 @@ static HRESULT WINAPI GifFrameEncode_Commit(IWICBitmapFrameEncode *iface) gif_palette[i][2] = This->encoder->palette[i] & 0xff; } hr = IStream_Write(This->encoder->stream, gif_palette, sizeof(gif_palette), NULL); @@ -28,5 +28,5 @@ index 9d0ae6b..efeddb0 100644 if (hr == S_OK) -- -2.9.0 +1.9.1 diff --git a/patches/windowscodecs-GIF_Encoder/definition b/patches/windowscodecs-GIF_Encoder/definition index 9362f9cd..1eb8618b 100644 --- a/patches/windowscodecs-GIF_Encoder/definition +++ b/patches/windowscodecs-GIF_Encoder/definition @@ -1,2 +1 @@ Fixes: Add initial implementation of GIF encoder to windowscodecs -Depends: windowscodecs-Palette_Images diff --git a/patches/windowscodecs-Palette_Images/0012-windowscodecs-tests-Add-tests-for-encoding-2bpp-4bpp.patch b/patches/windowscodecs-Palette_Images/0012-windowscodecs-tests-Add-tests-for-encoding-2bpp-4bpp.patch deleted file mode 100644 index bdf3be2e..00000000 --- a/patches/windowscodecs-Palette_Images/0012-windowscodecs-tests-Add-tests-for-encoding-2bpp-4bpp.patch +++ /dev/null @@ -1,459 +0,0 @@ -From 6ef5ce21d7fbbdcf85d6666838a4149502c49785 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Thu, 22 Sep 2016 19:15:33 +0800 -Subject: windowscodecs/tests: Add tests for encoding 2bpp/4bpp - images with a palette. - ---- - dlls/windowscodecs/tests/converter.c | 337 +++++++++++++++++++++++++++++------ - 1 file changed, 283 insertions(+), 54 deletions(-) - -diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index 5f9f1d88a3..9b8193d52c 100644 ---- a/dlls/windowscodecs/tests/converter.c -+++ b/dlls/windowscodecs/tests/converter.c -@@ -316,6 +316,20 @@ static const struct bitmap_data testdata_BlackWhite = { - static const struct bitmap_data testdata_1bppIndexed = { - &GUID_WICPixelFormat1bppIndexed, 1, bits_1bpp, 32, 2, 96.0, 96.0}; - -+/* some encoders (like BMP) require data to be 4-bytes aligned */ -+static const BYTE bits_2bpp[] = { -+ 0x55,0x55,0x55,0x55, -+ 0xaa,0xaa,0xaa,0xaa}; -+static const struct bitmap_data testdata_2bppIndexed = { -+ &GUID_WICPixelFormat2bppIndexed, 2, bits_2bpp, 16, 2, 96.0, 96.0}; -+ -+/* some encoders (like BMP) require data to be 4-bytes aligned */ -+static const BYTE bits_4bpp[] = { -+ 0x55,0x55,0x55,0x55, -+ 0xaa,0xaa,0xaa,0xaa}; -+static const struct bitmap_data testdata_4bppIndexed = { -+ &GUID_WICPixelFormat4bppIndexed, 4, bits_4bpp, 8, 2, 96.0, 96.0}; -+ - static const BYTE bits_8bpp[] = { - 0,1,2,3, - 4,5,6,7}; -@@ -632,64 +646,224 @@ static void test_encoder_properties(const CLSID* clsid_encoder, IPropertyBag2 *o - } - } - --static void check_bmp_format(IStream *stream, const struct bitmap_data *data) -+static void load_stream(IUnknown *reader, IStream *stream) -+{ -+ HRESULT hr; -+ IWICPersistStream *persist; -+#ifdef WORDS_BIGENDIAN -+ DWORD persist_options = WICPersistOptionBigEndian; -+#else -+ DWORD persist_options = WICPersistOptionLittleEndian; -+#endif -+ -+ hr = IUnknown_QueryInterface(reader, &IID_IWICPersistStream, (void **)&persist); -+ ok(hr == S_OK, "QueryInterface failed, hr=%x\n", hr); -+ -+ hr = IWICPersistStream_LoadEx(persist, stream, NULL, persist_options); -+ ok(hr == S_OK, "LoadEx failed, hr=%x\n", hr); -+ -+ IWICPersistStream_Release(persist); -+} -+ -+static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format) - { -- BITMAPFILEHEADER bfh; -- BITMAPINFOHEADER bih; - HRESULT hr; -- ULONG len; -+ IWICMetadataReader *reader; -+ PROPVARIANT id, value; -+ struct -+ { -+ USHORT byte_order; -+ USHORT version; -+ ULONG dir_offset; -+ } tiff; -+ LARGE_INTEGER pos; -+ UINT count, i; -+ int width, height, bps, photo, samples, colormap; -+ struct -+ { -+ int id, *value; -+ } tag[] = -+ { -+ { 0x100, &width }, { 0x101, &height }, { 0x102, &bps }, -+ { 0x106, &photo }, { 0x115, &samples }, { 0x140, &colormap } -+ }; -+ -+ memset(&tiff, 0, sizeof(tiff)); -+ hr = IStream_Read(stream, &tiff, sizeof(tiff), NULL); -+ ok(hr == S_OK, "IStream_Read error %#x\n", hr); -+ ok(tiff.byte_order == MAKEWORD('I','I') || tiff.byte_order == MAKEWORD('M','M'), -+ "wrong TIFF byte order mark %02x\n", tiff.byte_order); -+ ok(tiff.version == 42, "wrong TIFF version %u\n", tiff.version); -+ -+ pos.QuadPart = tiff.dir_offset; -+ hr = IStream_Seek(stream, pos, SEEK_SET, NULL); -+ ok(hr == S_OK, "IStream_Seek error %#x\n", hr); -+ -+ hr = CoCreateInstance(&CLSID_WICIfdMetadataReader, NULL, CLSCTX_INPROC_SERVER, -+ &IID_IWICMetadataReader, (void **)&reader); -+ ok(hr == S_OK, "CoCreateInstance error %#x\n", hr); -+ -+ load_stream((IUnknown *)reader, stream); - -- hr = IStream_Read(stream, &bfh, sizeof(bfh), &len); -- ok(hr == S_OK, "Failed to read file header, hr %#x.\n", hr); -+ hr = IWICMetadataReader_GetCount(reader, &count); -+ ok(hr == S_OK, "GetCount error %#x\n", hr); -+ ok(count != 0, "wrong count %u\n", count); - -- hr = IStream_Read(stream, &bih, sizeof(bih), &len); -- ok(hr == S_OK, "Failed to read file header, hr %#x.\n", hr); -+ for (i = 0; i < sizeof(tag)/sizeof(tag[0]); i++) -+ { -+ PropVariantInit(&id); -+ PropVariantInit(&value); -+ -+ id.vt = VT_UI2; -+ U(id).uiVal = tag[i].id; -+ hr = IWICMetadataReader_GetValue(reader, NULL, &id, &value); -+ ok(hr == S_OK || (tag[i].id == 0x140 && hr == WINCODEC_ERR_PROPERTYNOTFOUND), -+ "GetValue(%04x) error %#x\n", tag[i].id, hr); -+ if (hr == S_OK) -+ { -+ ok(value.vt == VT_UI2 || value.vt == VT_UI4 || value.vt == (VT_UI2 | VT_VECTOR), "wrong vt: %d\n", value.vt); -+ tag[i].value[0] = U(value).uiVal; -+ } -+ else -+ tag[i].value[0] = -1; -+ } - -- ok(bfh.bfType == 0x4d42, "Unexpected header type, %#x.\n", bfh.bfType); -- ok(bfh.bfSize != 0, "Unexpected bitmap size %d.\n", bfh.bfSize); -- ok(bfh.bfReserved1 == 0, "Unexpected bfReserved1 field.\n"); -- ok(bfh.bfReserved2 == 0, "Unexpected bfReserved2 field.\n"); -+ IWICMetadataReader_Release(reader); - -- if (IsEqualGUID(data->format, &GUID_WICPixelFormat1bppIndexed) -- || IsEqualGUID(data->format, &GUID_WICPixelFormat8bppIndexed)) -+ if (IsEqualGUID(format, &GUID_WICPixelFormatBlackWhite)) - { -- /* TODO: test with actual palette size */ -- ok(bfh.bfOffBits > sizeof(bfh) + sizeof(bih), "Unexpected data offset %d, format %s.\n", -- bfh.bfOffBits, wine_dbgstr_guid(data->format)); -+ ok(width == 32, "wrong width %u\n", width); -+ ok(height == 2, "wrong height %u\n", height); -+ -+ ok(bps == 1, "wrong bps %d\n", bps); -+ ok(photo == 1, "wrong photometric %d\n", photo); -+ ok(samples == 1, "wrong samples %d\n", samples); -+ ok(colormap == -1, "wrong colormap %d\n", colormap); - } -- else -- ok(bfh.bfOffBits == sizeof(bfh) + sizeof(bih), "Unexpected data offset %d, format %s.\n", -- bfh.bfOffBits, wine_dbgstr_guid(data->format)); -- -- ok(bih.biSize == sizeof(bih), "Unexpected header size %d.\n", bih.biSize); -- ok(bih.biWidth == data->width, "Unexpected bitmap width %d.\n", bih.biWidth); -- ok(bih.biHeight == data->height, "Unexpected bitmap height %d.\n", bih.biHeight); -- ok(bih.biPlanes == 1, "Unexpected planes count %d.\n", bih.biPlanes); -- -- if (IsEqualGUID(data->format, &GUID_WICPixelFormat1bppIndexed)) -- ok(bih.biBitCount == 1, "Unexpected bit count %u, format %s.\n", bih.biBitCount, -- wine_dbgstr_guid(data->format)); -- else if (IsEqualGUID(data->format, &GUID_WICPixelFormat8bppIndexed)) -- ok(bih.biBitCount == 8, "Unexpected bit count %u, format %s.\n", bih.biBitCount, -- wine_dbgstr_guid(data->format)); -- else if (IsEqualGUID(data->format, &GUID_WICPixelFormat32bppBGR)) -- ok(bih.biBitCount == 32, "Unexpected bit count %u, format %s.\n", bih.biBitCount, -- wine_dbgstr_guid(data->format)); -- -- ok(bih.biCompression == BI_RGB, "Unexpected compression mode %u.\n", bih.biCompression); --todo_wine -- ok(bih.biSizeImage == 0, "Unexpected image size %d.\n", bih.biSizeImage); -- ok(bih.biXPelsPerMeter == 3780 || broken(bih.biXPelsPerMeter == 0) /* XP */, "Unexpected horz resolution %d.\n", -- bih.biXPelsPerMeter); -- ok(bih.biYPelsPerMeter == 3780 || broken(bih.biYPelsPerMeter == 0) /* XP */, "Unexpected vert resolution %d.\n", -- bih.biYPelsPerMeter); -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed)) -+ { -+ ok(width == 32, "wrong width %u\n", width); -+ ok(height == 2, "wrong height %u\n", height); -+ -+ ok(bps == 1, "wrong bps %d\n", bps); -+ ok(photo == 3, "wrong photometric %d\n", photo); -+ ok(samples == 1, "wrong samples %d\n", samples); -+ ok(colormap == 6, "wrong colormap %d\n", colormap); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) -+ { -+ ok(width == 32, "wrong width %u\n", width); -+ ok(height == 2, "wrong height %u\n", height); -+ -+ ok(bps == 1, "wrong bps %d\n", bps); -+ ok(photo == 3, "wrong photometric %d\n", photo); -+ ok(samples == 1, "wrong samples %d\n", samples); -+ ok(colormap == 6, "wrong colormap %d\n", colormap); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) -+ { -+ ok(width == 8, "wrong width %u\n", width); -+ ok(height == 2, "wrong height %u\n", height); - -- /* FIXME: test actual data */ -+ ok(bps == 4, "wrong bps %d\n", bps); -+ ok(photo == 3, "wrong photometric %d\n", photo); -+ ok(samples == 1, "wrong samples %d\n", samples); -+ ok(colormap == 48, "wrong colormap %d\n", colormap); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) -+ { -+ ok(width == 4, "wrong width %u\n", width); -+ ok(height == 2, "wrong height %u\n", height); -+ -+ ok(bps == 8, "wrong bps %d\n", bps); -+ ok(photo == 3, "wrong photometric %d\n", photo); -+ ok(samples == 1, "wrong samples %d\n", samples); -+ ok(colormap == 768, "wrong colormap %d\n", colormap); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat24bppBGR)) -+ { -+ ok(width == 4, "wrong width %u\n", width); -+ ok(height == 2, "wrong height %u\n", height); -+ -+ ok(bps == 3, "wrong bps %d\n", bps); -+ ok(photo == 2, "wrong photometric %d\n", photo); -+ ok(samples == 3, "wrong samples %d\n", samples); -+ ok(colormap == -1, "wrong colormap %d\n", colormap); -+ } -+ else -+ ok(0, "unknown TIFF pixel format %s\n", wine_dbgstr_guid(format)); - } - --static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format) -+static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - { -- /* FIXME */ -+ HRESULT hr; -+ BITMAPFILEHEADER bfh; -+ BITMAPV5HEADER bih; -+ -+ memset(&bfh, 0, sizeof(bfh)); -+ hr = IStream_Read(stream, &bfh, sizeof(bfh), NULL); -+ ok(hr == S_OK, "IStream_Read error %#x\n", hr); -+ -+ ok(bfh.bfType == 0x4d42, "wrong BMP signature %02x\n", bfh.bfType); -+ ok(bfh.bfReserved1 == 0, "wrong bfReserved1 %02x\n", bfh.bfReserved1); -+ ok(bfh.bfReserved2 == 0, "wrong bfReserved2 %02x\n", bfh.bfReserved2); -+ -+ memset(&bih, 0, sizeof(bih)); -+ hr = IStream_Read(stream, &bih, sizeof(bih), NULL); -+ ok(hr == S_OK, "IStream_Read error %#x\n", hr); -+ -+ if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed)) -+ { -+ ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); -+ -+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -+ ok(bih.bV5BitCount == 1, "wrong BitCount %d\n", bih.bV5BitCount); -+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed); -+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) -+ { -+ ok(bih.bV5Width == 16, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); -+ -+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -+ ok(bih.bV5BitCount == 2, "wrong BitCount %d\n", bih.bV5BitCount); -+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed); -+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) -+ { -+ ok(bih.bV5Width == 8, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); -+ -+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -+ ok(bih.bV5BitCount == 4, "wrong BitCount %d\n", bih.bV5BitCount); -+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed); -+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) -+ { -+ ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); -+ -+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -+ ok(bih.bV5BitCount == 8, "wrong BitCount %d\n", bih.bV5BitCount); -+ ok(bih.bV5ClrUsed == 256, "wrong ClrUsed %d\n", bih.bV5ClrUsed); -+ ok(bih.bV5ClrImportant == 256, "wrong ClrImportant %d\n", bih.bV5ClrImportant); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat32bppBGR)) -+ { -+ ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width); -+ ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); -+ -+ ok(bih.bV5Planes == 1, "wrong Planes %d\n", bih.bV5Planes); -+ ok(bih.bV5BitCount == 32, "wrong BitCount %d\n", bih.bV5BitCount); -+ ok(bih.bV5ClrUsed == 0, "wrong ClrUsed %d\n", bih.bV5ClrUsed); -+ ok(bih.bV5ClrImportant == 0, "wrong ClrImportant %d\n", bih.bV5ClrImportant); -+ } -+ else -+ ok(0, "unknown BMP pixel format %s\n", wine_dbgstr_guid(format)); - } - - static unsigned be_uint(unsigned val) -@@ -746,6 +920,28 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) - ok(png.filter == 0, "wrong filter %d\n", png.filter); - ok(png.interlace == 0, "wrong interlace %d\n", png.interlace); - } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) -+ { -+ ok(be_uint(png.width) == 16, "wrong width %u\n", be_uint(png.width)); -+ ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height)); -+ -+ ok(png.bit_depth == 2, "wrong bit_depth %d\n", png.bit_depth); -+ ok(png.color_type == 3, "wrong color_type %d\n", png.color_type); -+ ok(png.compression == 0, "wrong compression %d\n", png.compression); -+ ok(png.filter == 0, "wrong filter %d\n", png.filter); -+ ok(png.interlace == 0, "wrong interlace %d\n", png.interlace); -+ } -+ else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) -+ { -+ ok(be_uint(png.width) == 8, "wrong width %u\n", be_uint(png.width)); -+ ok(be_uint(png.height) == 2, "wrong height %u\n", be_uint(png.height)); -+ -+ ok(png.bit_depth == 4, "wrong bit_depth %d\n", png.bit_depth); -+ ok(png.color_type == 3, "wrong color_type %d\n", png.color_type); -+ ok(png.compression == 0, "wrong compression %d\n", png.compression); -+ ok(png.filter == 0, "wrong filter %d\n", png.filter); -+ ok(png.interlace == 0, "wrong interlace %d\n", png.interlace); -+ } - else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) - { - ok(be_uint(png.width) == 4, "wrong width %u\n", be_uint(png.width)); -@@ -772,7 +968,7 @@ static void check_png_format(IStream *stream, const WICPixelFormatGUID *format) - ok(0, "unknown PNG pixel format %s\n", wine_dbgstr_guid(format)); - } - --static void check_bitmap_format(IStream *stream, const CLSID *encoder, const struct bitmap_data *dst) -+static void check_bitmap_format(IStream *stream, const CLSID *encoder, const WICPixelFormatGUID *format) - { - HRESULT hr; - LARGE_INTEGER pos; -@@ -782,11 +978,11 @@ static void check_bitmap_format(IStream *stream, const CLSID *encoder, const str - ok(hr == S_OK, "IStream_Seek error %#x\n", hr); - - if (IsEqualGUID(encoder, &CLSID_WICPngEncoder)) -- check_png_format(stream, dst->format); -+ check_png_format(stream, format); - else if (IsEqualGUID(encoder, &CLSID_WICBmpEncoder)) -- check_bmp_format(stream, dst); -+ check_bmp_format(stream, format); - else if (IsEqualGUID(encoder, &CLSID_WICTiffEncoder)) -- check_tiff_format(stream, dst->format); -+ check_tiff_format(stream, format); - else - ok(0, "unknown encoder %s\n", wine_dbgstr_guid(encoder)); - -@@ -991,6 +1187,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - ok(SUCCEEDED(hr), "WriteSource(%dx%d) failed, hr=%x (%s)\n", rc->Width, rc->Height, hr, name); - else - ok(hr == S_OK || -+ broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2) || -+ broken(hr == E_NOTIMPL && IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2) || - broken(hr == E_INVALIDARG && IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && IsEqualGUID(srcs[i]->format, &GUID_WICPixelFormatBlackWhite)) /* XP */, - "WriteSource(NULL) failed, hr=%x (%s)\n", hr, name); - } -@@ -1022,7 +1220,7 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - hr = IWICBitmapEncoder_Commit(encoder); - ok(SUCCEEDED(hr), "Commit failed, hr=%x\n", hr); - -- check_bitmap_format(stream, clsid_encoder, dsts[0]); -+ check_bitmap_format(stream, clsid_encoder, dsts[0]->format); - } - - if (SUCCEEDED(hr)) -@@ -1082,7 +1280,12 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - ok(ret == count, "expected %u, got %u\n", count, ret); - if (IsEqualGUID(clsid_decoder, &CLSID_WICPngDecoder)) - { -- ok(count == 256 || count == 2 /* newer libpng versions */, "expected 256, got %u (%s)\n", count, name); -+ /* Newer libpng versions don't accept larger palettes than the declared -+ * bit depth, so we need to generate the palette of the correct length. -+ */ -+ ok(count == 256 || (dsts[i]->bpp == 1 && count == 2) || -+ (dsts[i]->bpp == 2 && count == 4) || (dsts[i]->bpp == 4 && count == 16), -+ "expected 256, got %u (%s)\n", count, name); - - ok(colors[0] == 0x11111111, "got %08x (%s)\n", colors[0], name); - ok(colors[1] == 0x22222222, "got %08x (%s)\n", colors[1], name); -@@ -1090,8 +1293,11 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - { - ok(colors[2] == 0x33333333, "got %08x (%s)\n", colors[2], name); - ok(colors[3] == 0x44444444, "got %08x (%s)\n", colors[3], name); -- ok(colors[4] == 0x55555555, "got %08x (%s)\n", colors[4], name); -- ok(colors[5] == 0, "got %08x (%s)\n", colors[5], name); -+ if (count > 4) -+ { -+ ok(colors[4] == 0x55555555, "got %08x (%s)\n", colors[4], name); -+ ok(colors[5] == 0, "got %08x (%s)\n", colors[5], name); -+ } - } - } - else if (IsEqualGUID(clsid_decoder, &CLSID_WICBmpDecoder) || -@@ -1109,6 +1315,17 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name); - ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name); - } -+ else if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat4bppIndexed)) -+ { -+ ok(count == 16, "expected 16, got %u (%s)\n", count, name); -+ -+ ok(colors[0] == 0xff111111, "got %08x (%s)\n", colors[0], name); -+ ok(colors[1] == 0xff222222, "got %08x (%s)\n", colors[1], name); -+ ok(colors[2] == 0xff333333, "got %08x (%s)\n", colors[2], name); -+ ok(colors[3] == 0xff444444, "got %08x (%s)\n", colors[3], name); -+ ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name); -+ ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name); -+ } - else - { - ok(count == 2, "expected 2, got %u (%s)\n", count, name); -@@ -1260,6 +1477,10 @@ START_TEST(converter) - &testdata_BlackWhite, &CLSID_WICPngDecoder, "PNG encoder BlackWhite"); - test_encoder(&testdata_1bppIndexed, &CLSID_WICPngEncoder, - &testdata_1bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 1bppIndexed"); -+ test_encoder(&testdata_2bppIndexed, &CLSID_WICPngEncoder, -+ &testdata_2bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 2bppIndexed"); -+ test_encoder(&testdata_4bppIndexed, &CLSID_WICPngEncoder, -+ &testdata_4bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 4bppIndexed"); - test_encoder(&testdata_8bppIndexed, &CLSID_WICPngEncoder, - &testdata_8bppIndexed, &CLSID_WICPngDecoder, "PNG encoder 8bppIndexed"); - test_encoder(&testdata_24bppBGR, &CLSID_WICPngEncoder, -@@ -1271,6 +1492,10 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in - &testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder BlackWhite"); - test_encoder(&testdata_1bppIndexed, &CLSID_WICBmpEncoder, - &testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 1bppIndexed"); -+ test_encoder(&testdata_2bppIndexed, &CLSID_WICBmpEncoder, -+ &testdata_4bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 2bppIndexed"); -+ test_encoder(&testdata_4bppIndexed, &CLSID_WICBmpEncoder, -+ &testdata_4bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 4bppIndexed"); - test_encoder(&testdata_8bppIndexed, &CLSID_WICBmpEncoder, - &testdata_8bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 8bppIndexed"); - } -@@ -1283,6 +1508,10 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in - { - test_encoder(&testdata_1bppIndexed, &CLSID_WICTiffEncoder, - &testdata_1bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 1bppIndexed"); -+ test_encoder(&testdata_2bppIndexed, &CLSID_WICTiffEncoder, -+ &testdata_4bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 2bppIndexed"); -+ test_encoder(&testdata_4bppIndexed, &CLSID_WICTiffEncoder, -+ &testdata_4bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 4bppIndexed"); - test_encoder(&testdata_8bppIndexed, &CLSID_WICTiffEncoder, - &testdata_8bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 8bppIndexed"); - } --- -2.16.2 - diff --git a/patches/windowscodecs-Palette_Images/0014-windowscodecs-Add-support-for-palette-image-formats-.patch b/patches/windowscodecs-Palette_Images/0014-windowscodecs-Add-support-for-palette-image-formats-.patch deleted file mode 100644 index ca7c48b6..00000000 --- a/patches/windowscodecs-Palette_Images/0014-windowscodecs-Add-support-for-palette-image-formats-.patch +++ /dev/null @@ -1,163 +0,0 @@ -From 53055fb4a5416b70107ca831982a056d38bab210 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Fri, 23 Sep 2016 16:36:50 +0800 -Subject: windowscodecs: Add support for palette image formats to TIFF encoder. - ---- - dlls/windowscodecs/regsvr.c | 6 ++++++ - dlls/windowscodecs/tests/converter.c | 25 ++++++++++++++++--------- - dlls/windowscodecs/tiffformat.c | 26 ++++++++++++++++++++++++++ - 3 files changed, 48 insertions(+), 9 deletions(-) - -diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c -index b011d71645..b32b294d72 100644 ---- a/dlls/windowscodecs/regsvr.c -+++ b/dlls/windowscodecs/regsvr.c -@@ -1211,6 +1211,8 @@ static GUID const * const tiff_decode_formats[] = { - &GUID_WICPixelFormatBlackWhite, - &GUID_WICPixelFormat4bppGray, - &GUID_WICPixelFormat8bppGray, -+ &GUID_WICPixelFormat1bppIndexed, -+ &GUID_WICPixelFormat2bppIndexed, - &GUID_WICPixelFormat4bppIndexed, - &GUID_WICPixelFormat8bppIndexed, - &GUID_WICPixelFormat24bppBGR, -@@ -1370,6 +1372,10 @@ static GUID const * const tiff_encode_formats[] = { - &GUID_WICPixelFormatBlackWhite, - &GUID_WICPixelFormat4bppGray, - &GUID_WICPixelFormat8bppGray, -+ &GUID_WICPixelFormat1bppIndexed, -+ &GUID_WICPixelFormat2bppIndexed, -+ &GUID_WICPixelFormat4bppIndexed, -+ &GUID_WICPixelFormat8bppIndexed, - &GUID_WICPixelFormat24bppBGR, - &GUID_WICPixelFormat32bppBGRA, - &GUID_WICPixelFormat32bppPBGRA, -diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index 9b8193d52c..c4cae4f330 100644 ---- a/dlls/windowscodecs/tests/converter.c -+++ b/dlls/windowscodecs/tests/converter.c -@@ -752,13 +752,13 @@ static void check_tiff_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) - { -- ok(width == 32, "wrong width %u\n", width); -+ ok(width == 16, "wrong width %u\n", width); - ok(height == 2, "wrong height %u\n", height); - -- ok(bps == 1, "wrong bps %d\n", bps); -+ ok(bps == 2, "wrong bps %d\n", bps); - ok(photo == 3, "wrong photometric %d\n", photo); - ok(samples == 1, "wrong samples %d\n", samples); -- ok(colormap == 6, "wrong colormap %d\n", colormap); -+ ok(colormap == 12, "wrong colormap %d\n", colormap); - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) - { -@@ -1151,8 +1151,9 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - memcpy(&pixelformat, srcs[i]->format, sizeof(GUID)); - hr = IWICBitmapFrameEncode_SetPixelFormat(frameencode, &pixelformat); - ok(SUCCEEDED(hr), "SetPixelFormat failed, hr=%x\n", hr); -- ok(IsEqualGUID(&pixelformat, dsts[i]->format), "SetPixelFormat changed the format to %s (%s)\n", -- wine_dbgstr_guid(&pixelformat), name); -+ ok(IsEqualGUID(&pixelformat, dsts[i]->format) || -+ broken(IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)), -+ "SetPixelFormat changed the format to %s (%s)\n", wine_dbgstr_guid(&pixelformat), name); - - hr = IWICBitmapFrameEncode_SetSize(frameencode, srcs[i]->width, srcs[i]->height); - ok(SUCCEEDED(hr), "SetSize failed, hr=%x\n", hr); -@@ -1315,6 +1316,15 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - ok(colors[4] == 0xff555555, "got %08x (%s)\n", colors[4], name); - ok(colors[5] == 0xff000000, "got %08x (%s)\n", colors[5], name); - } -+ else if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat2bppIndexed)) -+ { -+ ok(count == 4, "expected 4, got %u (%s)\n", count, name); -+ -+ ok(colors[0] == 0xff111111, "got %08x (%s)\n", colors[0], name); -+ ok(colors[1] == 0xff222222, "got %08x (%s)\n", colors[1], name); -+ ok(colors[2] == 0xff333333, "got %08x (%s)\n", colors[2], name); -+ ok(colors[3] == 0xff444444, "got %08x (%s)\n", colors[3], name); -+ } - else if (IsEqualGUID(dsts[i]->format, &GUID_WICPixelFormat4bppIndexed)) - { - ok(count == 16, "expected 16, got %u (%s)\n", count, name); -@@ -1504,17 +1514,14 @@ if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in - - test_encoder(&testdata_BlackWhite, &CLSID_WICTiffEncoder, - &testdata_BlackWhite, &CLSID_WICTiffDecoder, "TIFF encoder BlackWhite"); --if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in Wine */ --{ - test_encoder(&testdata_1bppIndexed, &CLSID_WICTiffEncoder, - &testdata_1bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 1bppIndexed"); - test_encoder(&testdata_2bppIndexed, &CLSID_WICTiffEncoder, -- &testdata_4bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 2bppIndexed"); -+ &testdata_2bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 2bppIndexed"); - test_encoder(&testdata_4bppIndexed, &CLSID_WICTiffEncoder, - &testdata_4bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 4bppIndexed"); - test_encoder(&testdata_8bppIndexed, &CLSID_WICTiffEncoder, - &testdata_8bppIndexed, &CLSID_WICTiffDecoder, "TIFF encoder 8bppIndexed"); --} - test_encoder(&testdata_24bppBGR, &CLSID_WICTiffEncoder, - &testdata_24bppBGR, &CLSID_WICTiffDecoder, "TIFF encoder 24bppBGR"); - -diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c -index 2238a0eaa8..c9d0889b1e 100644 ---- a/dlls/windowscodecs/tiffformat.c -+++ b/dlls/windowscodecs/tiffformat.c -@@ -1,5 +1,6 @@ - /* - * Copyright 2010 Vincent Povirk for CodeWeavers -+ * Copyright 2016 Dmitry Timoshkov - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -461,6 +462,12 @@ static HRESULT tiff_get_decode_info(TIFF *tiff, tiff_decode_info *decode_info) - decode_info->bpp = bps; - switch (bps) - { -+ case 1: -+ decode_info->format = &GUID_WICPixelFormat1bppIndexed; -+ break; -+ case 2: -+ decode_info->format = &GUID_WICPixelFormat2bppIndexed; -+ break; - case 4: - decode_info->format = &GUID_WICPixelFormat4bppIndexed; - break; -@@ -1417,6 +1424,10 @@ static const struct tiff_encode_format formats[] = { - {&GUID_WICPixelFormat48bppRGB, 2, 16, 3, 48, 0, 0, 0}, - {&GUID_WICPixelFormat64bppRGBA, 2, 16, 4, 64, 1, 2, 0}, - {&GUID_WICPixelFormat64bppPRGBA, 2, 16, 4, 64, 1, 1, 0}, -+ {&GUID_WICPixelFormat1bppIndexed, 3, 1, 1, 1, 0, 0, 0}, -+ {&GUID_WICPixelFormat2bppIndexed, 3, 2, 1, 2, 0, 0, 0}, -+ {&GUID_WICPixelFormat4bppIndexed, 3, 4, 1, 4, 0, 0, 0}, -+ {&GUID_WICPixelFormat8bppIndexed, 3, 8, 1, 8, 0, 0, 0}, - {0} - }; - -@@ -1699,6 +1710,21 @@ static HRESULT WINAPI TiffFrameEncode_WritePixels(IWICBitmapFrameEncode *iface, - pTIFFSetField(This->parent->tiff, TIFFTAG_YRESOLUTION, (float)This->yres); - } - -+ if (This->format->bpp <= 8 && This->colors && !IsEqualGUID(This->format->guid, &GUID_WICPixelFormatBlackWhite)) -+ { -+ uint16 red[256], green[256], blue[256]; -+ UINT i; -+ -+ for (i = 0; i < This->colors; i++) -+ { -+ red[i] = (This->palette[i] >> 8) & 0xff00; -+ green[i] = This->palette[i] & 0xff00; -+ blue[i] = (This->palette[i] << 8) & 0xff00; -+ } -+ -+ pTIFFSetField(This->parent->tiff, TIFFTAG_COLORMAP, red, green, blue); -+ } -+ - This->info_written = TRUE; - } - --- -2.16.2 - diff --git a/patches/windowscodecs-Palette_Images/0017-windowscodecs-Add-support-for-palette-image-formats-.patch b/patches/windowscodecs-Palette_Images/0017-windowscodecs-Add-support-for-palette-image-formats-.patch deleted file mode 100644 index 23b4e793..00000000 --- a/patches/windowscodecs-Palette_Images/0017-windowscodecs-Add-support-for-palette-image-formats-.patch +++ /dev/null @@ -1,253 +0,0 @@ -From 621820e1345fb06680ec25c3c5690a928a2b1141 Mon Sep 17 00:00:00 2001 -From: Dmitry Timoshkov -Date: Fri, 23 Sep 2016 20:17:47 +0800 -Subject: windowscodecs: Add support for palette image formats to BMP encoder. - ---- - dlls/windowscodecs/bmpencode.c | 44 ++++++++++++++++++++++++++++-------- - dlls/windowscodecs/info.c | 8 ++++++- - dlls/windowscodecs/regsvr.c | 5 ++++ - dlls/windowscodecs/tests/converter.c | 18 +++++++++++---- - 4 files changed, 60 insertions(+), 15 deletions(-) - -diff --git a/dlls/windowscodecs/bmpencode.c b/dlls/windowscodecs/bmpencode.c -index 97f30d7197..86e42b9a68 100644 ---- a/dlls/windowscodecs/bmpencode.c -+++ b/dlls/windowscodecs/bmpencode.c -@@ -1,5 +1,6 @@ - /* - * Copyright 2009 Vincent Povirk for CodeWeavers -+ * Copyright 2016 Dmitry Timoshkov - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -37,6 +38,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(wincodecs); - struct bmp_pixelformat { - const WICPixelFormatGUID *guid; - UINT bpp; -+ UINT colors; /* palette size */ - DWORD compression; - DWORD redmask; - DWORD greenmask; -@@ -45,13 +47,18 @@ struct bmp_pixelformat { - }; - - static const struct bmp_pixelformat formats[] = { -- {&GUID_WICPixelFormat24bppBGR, 24, BI_RGB}, -- {&GUID_WICPixelFormat16bppBGR555, 16, BI_RGB}, -- {&GUID_WICPixelFormat16bppBGR565, 16, BI_BITFIELDS, 0xf800, 0x7e0, 0x1f, 0}, -- {&GUID_WICPixelFormat32bppBGR, 32, BI_RGB}, -+ {&GUID_WICPixelFormat24bppBGR, 24, 0, BI_RGB}, -+ {&GUID_WICPixelFormatBlackWhite, 1, 2, BI_RGB}, -+ {&GUID_WICPixelFormat1bppIndexed, 1, 2, BI_RGB}, -+ {&GUID_WICPixelFormat2bppIndexed, 2, 4, BI_RGB}, -+ {&GUID_WICPixelFormat4bppIndexed, 4, 16, BI_RGB}, -+ {&GUID_WICPixelFormat8bppIndexed, 8, 256, BI_RGB}, -+ {&GUID_WICPixelFormat16bppBGR555, 16, 0, BI_RGB}, -+ {&GUID_WICPixelFormat16bppBGR565, 16, 0, BI_BITFIELDS, 0xf800, 0x7e0, 0x1f, 0}, -+ {&GUID_WICPixelFormat32bppBGR, 32, 0, BI_RGB}, - #if 0 - /* Windows doesn't seem to support this one. */ -- {&GUID_WICPixelFormat32bppBGRA, 32, BI_BITFIELDS, 0xff0000, 0xff00, 0xff, 0xff000000}, -+ {&GUID_WICPixelFormat32bppBGRA, 32, 0, BI_BITFIELDS, 0xff0000, 0xff00, 0xff, 0xff000000}, - #endif - {NULL} - }; -@@ -184,11 +191,13 @@ static HRESULT WINAPI BmpFrameEncode_SetPixelFormat(IWICBitmapFrameEncode *iface - - for (i=0; formats[i].guid; i++) - { -- if (memcmp(formats[i].guid, pPixelFormat, sizeof(GUID)) == 0) -+ if (IsEqualGUID(formats[i].guid, pPixelFormat)) - break; - } - - if (!formats[i].guid) i = 0; -+ else if (IsEqualGUID(pPixelFormat, &GUID_WICPixelFormatBlackWhite)) -+ i = 2; /* GUID_WICPixelFormat1bppIndexed */ - - This->format = &formats[i]; - memcpy(pPixelFormat, This->format->guid, sizeof(GUID)); -@@ -207,6 +216,7 @@ static HRESULT WINAPI BmpFrameEncode_SetPalette(IWICBitmapFrameEncode *iface, - IWICPalette *palette) - { - BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface); -+ HRESULT hr; - - TRACE("(%p,%p)\n", iface, palette); - -@@ -215,7 +225,14 @@ static HRESULT WINAPI BmpFrameEncode_SetPalette(IWICBitmapFrameEncode *iface, - if (!This->initialized) - return WINCODEC_ERR_NOTINITIALIZED; - -- return IWICPalette_GetColors(palette, 256, This->palette, &This->colors); -+ hr = IWICPalette_GetColors(palette, 256, This->palette, &This->colors); -+ if (hr == S_OK) -+ { -+ UINT i; -+ for (i = 0; i < This->colors; i++) -+ This->palette[i] |= 0xff000000; /* BMP palette has no alpha */ -+ } -+ return hr; - } - - static HRESULT WINAPI BmpFrameEncode_SetThumbnail(IWICBitmapFrameEncode *iface, -@@ -330,8 +347,8 @@ static HRESULT WINAPI BmpFrameEncode_Commit(IWICBitmapFrameEncode *iface) - bih.bV5SizeImage = This->stride*This->height; - bih.bV5XPelsPerMeter = (This->xres+0.0127) / 0.0254; - bih.bV5YPelsPerMeter = (This->yres+0.0127) / 0.0254; -- bih.bV5ClrUsed = 0; -- bih.bV5ClrImportant = 0; -+ bih.bV5ClrUsed = (This->format->bpp <= 8) ? This->colors : 0; -+ bih.bV5ClrImportant = bih.bV5ClrUsed; - - if (This->format->compression == BI_BITFIELDS) - { -@@ -348,6 +365,7 @@ static HRESULT WINAPI BmpFrameEncode_Commit(IWICBitmapFrameEncode *iface) - - bfh.bfSize = sizeof(BITMAPFILEHEADER) + info_size + bih.bV5SizeImage; - bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + info_size; -+ bfh.bfOffBits += bih.bV5ClrUsed * sizeof(WICColor); - - pos.QuadPart = 0; - hr = IStream_Seek(This->stream, pos, STREAM_SEEK_SET, NULL); -@@ -361,6 +379,14 @@ static HRESULT WINAPI BmpFrameEncode_Commit(IWICBitmapFrameEncode *iface) - if (FAILED(hr)) return hr; - if (byteswritten != info_size) return E_FAIL; - -+ /* write the palette */ -+ if (This->format->colors) -+ { -+ hr = IStream_Write(This->stream, This->palette, This->colors * sizeof(WICColor), &byteswritten); -+ if (FAILED(hr)) return hr; -+ if (byteswritten != This->colors * sizeof(WICColor)) return E_FAIL; -+ } -+ - hr = IStream_Write(This->stream, This->bits, bih.bV5SizeImage, &byteswritten); - if (FAILED(hr)) return hr; - if (byteswritten != bih.bV5SizeImage) return E_FAIL; -diff --git a/dlls/windowscodecs/info.c b/dlls/windowscodecs/info.c -index 6ddfdda25f..fbd0da97cf 100644 ---- a/dlls/windowscodecs/info.c -+++ b/dlls/windowscodecs/info.c -@@ -2280,6 +2280,12 @@ HRESULT CreateComponentEnumerator(DWORD componentTypes, DWORD options, IEnumUnkn - return hr; - } - -+static BOOL is_1bpp_format(const WICPixelFormatGUID *format) -+{ -+ return IsEqualGUID(format, &GUID_WICPixelFormatBlackWhite) || -+ IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed); -+} -+ - HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst) - { - HRESULT res; -@@ -2295,7 +2301,7 @@ HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitma - res = IWICBitmapSource_GetPixelFormat(pISrc, &srcFormat); - if (FAILED(res)) return res; - -- if (IsEqualGUID(&srcFormat, dstFormat)) -+ if (IsEqualGUID(&srcFormat, dstFormat) || (is_1bpp_format(&srcFormat) && is_1bpp_format(dstFormat))) - { - IWICBitmapSource_AddRef(pISrc); - *ppIDst = pISrc; -diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c -index b32b294d72..c72fbf1899 100644 ---- a/dlls/windowscodecs/regsvr.c -+++ b/dlls/windowscodecs/regsvr.c -@@ -1347,6 +1347,11 @@ static GUID const * const bmp_encode_formats[] = { - &GUID_WICPixelFormat16bppBGR565, - &GUID_WICPixelFormat24bppBGR, - &GUID_WICPixelFormat32bppBGR, -+ &GUID_WICPixelFormatBlackWhite, -+ &GUID_WICPixelFormat1bppIndexed, -+ &GUID_WICPixelFormat2bppIndexed, -+ &GUID_WICPixelFormat4bppIndexed, -+ &GUID_WICPixelFormat8bppIndexed, - NULL - }; - -diff --git a/dlls/windowscodecs/tests/converter.c b/dlls/windowscodecs/tests/converter.c -index c4cae4f330..80ef61087d 100644 ---- a/dlls/windowscodecs/tests/converter.c -+++ b/dlls/windowscodecs/tests/converter.c -@@ -814,6 +814,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - - if (IsEqualGUID(format, &GUID_WICPixelFormat1bppIndexed)) - { -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ - ok(bih.bV5Width == 32, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - -@@ -824,6 +826,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat2bppIndexed)) - { -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ - ok(bih.bV5Width == 16, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - -@@ -834,6 +838,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat4bppIndexed)) - { -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ - ok(bih.bV5Width == 8, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - -@@ -844,6 +850,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat8bppIndexed)) - { -+ ok(bfh.bfOffBits == 0x0436, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ - ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - -@@ -854,6 +862,8 @@ static void check_bmp_format(IStream *stream, const WICPixelFormatGUID *format) - } - else if (IsEqualGUID(format, &GUID_WICPixelFormat32bppBGR)) - { -+ ok(bfh.bfOffBits == 0x0036, "wrong bfOffBits %02x\n", bfh.bfOffBits); -+ - ok(bih.bV5Width == 4, "wrong width %u\n", bih.bV5Width); - ok(bih.bV5Height == 2, "wrong height %u\n", bih.bV5Height); - -@@ -1152,7 +1162,8 @@ static void test_multi_encoder(const struct bitmap_data **srcs, const CLSID* cls - hr = IWICBitmapFrameEncode_SetPixelFormat(frameencode, &pixelformat); - ok(SUCCEEDED(hr), "SetPixelFormat failed, hr=%x\n", hr); - ok(IsEqualGUID(&pixelformat, dsts[i]->format) || -- broken(IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)), -+ broken(IsEqualGUID(clsid_encoder, &CLSID_WICTiffEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)) || -+ broken(IsEqualGUID(clsid_encoder, &CLSID_WICBmpEncoder) && srcs[i]->bpp == 2 && IsEqualGUID(&pixelformat, &GUID_WICPixelFormat4bppIndexed)), - "SetPixelFormat changed the format to %s (%s)\n", wine_dbgstr_guid(&pixelformat), name); - - hr = IWICBitmapFrameEncode_SetSize(frameencode, srcs[i]->width, srcs[i]->height); -@@ -1496,19 +1507,16 @@ START_TEST(converter) - test_encoder(&testdata_24bppBGR, &CLSID_WICPngEncoder, - &testdata_24bppBGR, &CLSID_WICPngDecoder, "PNG encoder 24bppBGR"); - --if (!strcmp(winetest_platform, "windows")) /* FIXME: enable once implemented in Wine */ --{ - test_encoder(&testdata_BlackWhite, &CLSID_WICBmpEncoder, - &testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder BlackWhite"); - test_encoder(&testdata_1bppIndexed, &CLSID_WICBmpEncoder, - &testdata_1bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 1bppIndexed"); - test_encoder(&testdata_2bppIndexed, &CLSID_WICBmpEncoder, -- &testdata_4bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 2bppIndexed"); -+ &testdata_2bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 2bppIndexed"); - test_encoder(&testdata_4bppIndexed, &CLSID_WICBmpEncoder, - &testdata_4bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 4bppIndexed"); - test_encoder(&testdata_8bppIndexed, &CLSID_WICBmpEncoder, - &testdata_8bppIndexed, &CLSID_WICBmpDecoder, "BMP encoder 8bppIndexed"); --} - test_encoder(&testdata_32bppBGR, &CLSID_WICBmpEncoder, - &testdata_32bppBGR, &CLSID_WICBmpDecoder, "BMP encoder 32bppBGR"); - --- -2.16.2 - diff --git a/patches/windowscodecs-Palette_Images/definition b/patches/windowscodecs-Palette_Images/definition deleted file mode 100644 index dbe564a8..00000000 --- a/patches/windowscodecs-Palette_Images/definition +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: Improve palette support in windowscodecs.dll - diff --git a/patches/windowscodecs-TIFF_Support/0011-windowscodecs-Add-support-for-32bppCMYK-and-64bppCMY.patch b/patches/windowscodecs-TIFF_Support/0011-windowscodecs-Add-support-for-32bppCMYK-and-64bppCMY.patch index 348004b1..6c590ead 100644 --- a/patches/windowscodecs-TIFF_Support/0011-windowscodecs-Add-support-for-32bppCMYK-and-64bppCMY.patch +++ b/patches/windowscodecs-TIFF_Support/0011-windowscodecs-Add-support-for-32bppCMYK-and-64bppCMY.patch @@ -1,8 +1,8 @@ -From d57197600db7bb0c9f5f3c935ea568cf526d7cb9 Mon Sep 17 00:00:00 2001 +From 56e077897f2c8d6821724de4b846b69f7f052747 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 9 Dec 2016 12:52:36 +0800 -Subject: windowscodecs: Add support for 32bppCMYK and 64bppCMYK formats to - TIFF decoder. +Subject: [PATCH] windowscodecs: Add support for 32bppCMYK and 64bppCMYK + formats to TIFF decoder. --- dlls/windowscodecs/regsvr.c | 13 +++++++++++++ @@ -11,7 +11,7 @@ Subject: windowscodecs: Add support for 32bppCMYK and 64bppCMYK formats to 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/dlls/windowscodecs/regsvr.c b/dlls/windowscodecs/regsvr.c -index f695d3e40a..9024574e80 100644 +index cfb3e26..4ea51f6 100644 --- a/dlls/windowscodecs/regsvr.c +++ b/dlls/windowscodecs/regsvr.c @@ -1224,6 +1224,8 @@ static GUID const * const tiff_decode_formats[] = { @@ -23,7 +23,7 @@ index f695d3e40a..9024574e80 100644 &GUID_WICPixelFormat128bppRGBAFloat, NULL }; -@@ -2026,6 +2028,17 @@ static struct regsvr_pixelformat const pixelformat_list[] = { +@@ -2024,6 +2026,17 @@ static struct regsvr_pixelformat const pixelformat_list[] = { WICPixelFormatNumericRepresentationUnsignedInteger, 0 }, @@ -42,11 +42,11 @@ index f695d3e40a..9024574e80 100644 "The Wine Project", "128bpp RGBAFloat", diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c -index 151b999a35..414c92195e 100644 +index 7d7c620..090db31 100644 --- a/dlls/windowscodecs/tiffformat.c +++ b/dlls/windowscodecs/tiffformat.c @@ -507,8 +507,31 @@ static HRESULT tiff_get_decode_info(TIFF *tiff, tiff_decode_info *decode_info) - return E_FAIL; + return E_NOTIMPL; } break; + @@ -79,10 +79,10 @@ index 151b999a35..414c92195e 100644 case 8: /* CIELab */ default: diff --git a/include/wincodec.idl b/include/wincodec.idl -index 0e279f590e..3132bf6b3b 100644 +index c283301..29e0968 100644 --- a/include/wincodec.idl +++ b/include/wincodec.idl -@@ -218,6 +218,7 @@ cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppPRGBA, 0x6fddc324,0x4e03,0x4bfe,0 +@@ -232,6 +232,7 @@ cpp_quote("DEFINE_GUID(GUID_WICPixelFormat64bppPRGBA, 0x6fddc324,0x4e03,0x4bfe,0 cpp_quote("DEFINE_GUID(GUID_WICPixelFormat128bppRGBAFloat, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x19);") cpp_quote("DEFINE_GUID(GUID_WICPixelFormat32bppCMYK, 0x6fddc324,0x4e03,0x4bfe,0xb1,0x85,0x3d,0x77,0x76,0x8d,0xc9,0x1c);") @@ -91,5 +91,5 @@ index 0e279f590e..3132bf6b3b 100644 cpp_quote("#if 0") typedef DWORD *D2D1_PIXEL_FORMAT; -- -2.13.1 +1.9.1