From 98a20533b07fd4ad600ee343f1ad1701676eacf3 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Tue, 5 Apr 2011 16:06:54 -0500 Subject: [PATCH 1/5] windowscodecs: Implement TiffFrameEncode_Commit. --- dlls/windowscodecs/tiffformat.c | 24 ++++++++++++++++++++++-- 1 files changed, 22 insertions(+), 2 deletions(-) diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c index 78b3146..d2d9d45 100644 --- a/dlls/windowscodecs/tiffformat.c +++ b/dlls/windowscodecs/tiffformat.c @@ -1167,6 +1167,7 @@ typedef struct TiffFrameEncode { /* fields below are protected by parent->lock */ BOOL initialized; BOOL info_written; + BOOL committed; const struct tiff_encode_format *format; UINT width, height; double xres, yres; @@ -1513,8 +1514,26 @@ static HRESULT WINAPI TiffFrameEncode_WriteSource(IWICBitmapFrameEncode *iface, static HRESULT WINAPI TiffFrameEncode_Commit(IWICBitmapFrameEncode *iface) { - FIXME("(%p): stub\n", iface); - return E_NOTIMPL; + TiffFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface); + + TRACE("(%p)\n", iface); + + EnterCriticalSection(&This->parent->lock); + + if (!This->info_written || This->lines_written != This->height || This->committed) + { + LeaveCriticalSection(&This->parent->lock); + return WINCODEC_ERR_WRONGSTATE; + } + + /* libtiff will commit the data when creating a new frame or closing the file */ + + This->committed = TRUE; + This->parent->num_frames_committed++; + + LeaveCriticalSection(&This->parent->lock); + + return S_OK; } static HRESULT WINAPI TiffFrameEncode_GetMetadataQueryWriter(IWICBitmapFrameEncode *iface, @@ -1701,6 +1720,7 @@ static HRESULT WINAPI TiffEncoder_CreateNewFrame(IWICBitmapEncoder *iface, result->parent = This; result->initialized = FALSE; result->info_written = FALSE; + result->committed = FALSE; result->format = NULL; result->width = 0; result->height = 0; -- 1.7.1