Module: wine Branch: master Commit: 3738c6b05c8c130adf409c7c982b633fd058dc3c URL: http://source.winehq.org/git/wine.git/?a=commit;h=3738c6b05c8c130adf409c7c98...
Author: Dmitry Timoshkov dmitry@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) {