From f50b0f3b65ff611086b54ebca58c62f053276784 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Tue, 29 Mar 2011 16:30:59 -0500 Subject: [PATCH 05/15] windowscodecs: Implement TiffFrameEncode_Initialize. --- dlls/windowscodecs/tiffformat.c | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-) diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c index b40a7c3..3ca85d4 100644 --- a/dlls/windowscodecs/tiffformat.c +++ b/dlls/windowscodecs/tiffformat.c @@ -1136,6 +1136,8 @@ typedef struct TiffFrameEncode { IWICBitmapFrameEncode IWICBitmapFrameEncode_iface; LONG ref; TiffEncoder *parent; + /* fields below are protected by parent->lock */ + BOOL initialized; } TiffFrameEncode; static inline TiffFrameEncode *impl_from_IWICBitmapFrameEncode(IWICBitmapFrameEncode *iface) @@ -1195,8 +1197,22 @@ static ULONG WINAPI TiffFrameEncode_Release(IWICBitmapFrameEncode *iface) static HRESULT WINAPI TiffFrameEncode_Initialize(IWICBitmapFrameEncode *iface, IPropertyBag2 *pIEncoderOptions) { - FIXME("(%p,%p): stub\n", iface, pIEncoderOptions); - return E_NOTIMPL; + TiffFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface); + TRACE("(%p,%p)\n", iface, pIEncoderOptions); + + EnterCriticalSection(&This->parent->lock); + + if (This->initialized) + { + LeaveCriticalSection(&This->parent->lock); + return WINCODEC_ERR_WRONGSTATE; + } + + This->initialized = TRUE; + + LeaveCriticalSection(&This->parent->lock); + + return S_OK; } static HRESULT WINAPI TiffFrameEncode_SetSize(IWICBitmapFrameEncode *iface, @@ -1443,6 +1459,7 @@ static HRESULT WINAPI TiffEncoder_CreateNewFrame(IWICBitmapEncoder *iface, result->IWICBitmapFrameEncode_iface.lpVtbl = &TiffFrameEncode_Vtbl; result->ref = 1; result->parent = This; + result->initialized = FALSE; IWICBitmapEncoder_AddRef(iface); *ppIFrameEncode = &result->IWICBitmapFrameEncode_iface; -- 1.7.2.5