Module: wine Branch: master Commit: 8e694423f4eca7467cc8d7806a1f757c089921aa URL: http://source.winehq.org/git/wine.git/?a=commit;h=8e694423f4eca7467cc8d7806a...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Fri Jan 27 09:22:17 2017 +0300
windowscodecs: Implement IWICBitmapFrameEncode::SetPalette in PNG encoder.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/windowscodecs/pngformat.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-)
diff --git a/dlls/windowscodecs/pngformat.c b/dlls/windowscodecs/pngformat.c index 9a84162..990dcf6 100644 --- a/dlls/windowscodecs/pngformat.c +++ b/dlls/windowscodecs/pngformat.c @@ -1363,6 +1363,8 @@ typedef struct PngEncoder { BYTE *data; UINT stride; UINT passes; + WICColor palette[256]; + UINT colors; } PngEncoder;
static inline PngEncoder *impl_from_IWICBitmapEncoder(IWICBitmapEncoder *iface) @@ -1554,10 +1556,24 @@ static HRESULT WINAPI PngFrameEncode_SetColorContexts(IWICBitmapFrameEncode *ifa }
static HRESULT WINAPI PngFrameEncode_SetPalette(IWICBitmapFrameEncode *iface, - IWICPalette *pIPalette) + IWICPalette *palette) { - FIXME("(%p,%p): stub\n", iface, pIPalette); - return WINCODEC_ERR_UNSUPPORTEDOPERATION; + PngEncoder *This = impl_from_IWICBitmapFrameEncode(iface); + HRESULT hr; + + TRACE("(%p,%p)\n", iface, palette); + + if (!palette) return E_INVALIDARG; + + EnterCriticalSection(&This->lock); + + if (This->frame_initialized) + hr = IWICPalette_GetColors(palette, 256, This->palette, &This->colors); + else + hr = WINCODEC_ERR_NOTINITIALIZED; + + LeaveCriticalSection(&This->lock); + return hr; }
static HRESULT WINAPI PngFrameEncode_SetThumbnail(IWICBitmapFrameEncode *iface, @@ -2081,6 +2097,7 @@ HRESULT PngEncoder_CreateInstance(REFIID iid, void** ppv) This->frame_committed = FALSE; This->committed = FALSE; This->data = NULL; + This->colors = 0; InitializeCriticalSection(&This->lock); This->lock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PngEncoder.lock");