Dmitry Timoshkov : windowscodecs: Generate global GIF palette even a real one is missing.
Alexandre Julliard
julliard at winehq.org
Fri Jul 19 13:19:41 CDT 2013
Module: wine
Branch: master
Commit: 3738c6b05c8c130adf409c7c982b633fd058dc3c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3738c6b05c8c130adf409c7c982b633fd058dc3c
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Fri Jul 19 15:29:58 2013 +0900
windowscodecs: Generate global GIF palette even a real one is missing.
---
dlls/windowscodecs/gifformat.c | 39 ++++++++++++++++++++++-----------
dlls/windowscodecs/tests/gifformat.c | 1 -
2 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/dlls/windowscodecs/gifformat.c b/dlls/windowscodecs/gifformat.c
index 8ebcf3d..39de709 100644
--- a/dlls/windowscodecs/gifformat.c
+++ b/dlls/windowscodecs/gifformat.c
@@ -1180,26 +1180,39 @@ static HRESULT WINAPI GifDecoder_CopyPalette(IWICBitmapDecoder *iface, IWICPalet
GifDecoder *This = impl_from_IWICBitmapDecoder(iface);
WICColor colors[256];
ColorMapObject *cm;
- int i, trans;
+ int i, trans, count;
ExtensionBlock *eb;
TRACE("(%p,%p)\n", iface, palette);
cm = This->gif->SColorMap;
- if (!cm) return WINCODEC_ERR_FRAMEMISSING;
-
- if (cm->ColorCount > 256)
+ if (cm)
{
- ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount);
- return E_FAIL;
- }
+ if (cm->ColorCount > 256)
+ {
+ ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount);
+ return E_FAIL;
+ }
- for (i = 0; i < cm->ColorCount; i++)
+ for (i = 0; i < cm->ColorCount; i++)
+ {
+ colors[i] = 0xff000000 | /* alpha */
+ cm->Colors[i].Red << 16 |
+ cm->Colors[i].Green << 8 |
+ cm->Colors[i].Blue;
+ }
+
+ count = cm->ColorCount;
+ }
+ else
{
- colors[i] = 0xff000000 | /* alpha */
- cm->Colors[i].Red << 16 |
- cm->Colors[i].Green << 8 |
- cm->Colors[i].Blue;
+ colors[0] = 0xff000000;
+ colors[1] = 0xffffffff;
+
+ for (i = 2; i < 256; i++)
+ colors[i] = 0xff000000;
+
+ count = 256;
}
/* look for the transparent color extension */
@@ -1217,7 +1230,7 @@ static HRESULT WINAPI GifDecoder_CopyPalette(IWICBitmapDecoder *iface, IWICPalet
}
}
- return IWICPalette_InitializeCustom(palette, colors, cm->ColorCount);
+ return IWICPalette_InitializeCustom(palette, colors, count);
}
static HRESULT WINAPI GifDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface,
diff --git a/dlls/windowscodecs/tests/gifformat.c b/dlls/windowscodecs/tests/gifformat.c
index 47a27dd..0ff0f61 100644
--- a/dlls/windowscodecs/tests/gifformat.c
+++ b/dlls/windowscodecs/tests/gifformat.c
@@ -284,7 +284,6 @@ static void test_local_gif_palette(void)
/* global palette */
hr = IWICBitmapDecoder_CopyPalette(decoder, palette);
-todo_wine
ok(hr == S_OK || broken(hr == WINCODEC_ERR_FRAMEMISSING), "CopyPalette %#x\n", hr);
if (hr == S_OK)
{
More information about the wine-cvs
mailing list