From 541cd529ed568e8773dfc29cf0d280e24e6eb876 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Wed, 17 Mar 2010 16:00:33 -0500 Subject: [PATCH 03/11] windowscodecs: Implement GetFrameCount for the TIFF decoder. --- dlls/windowscodecs/tiffformat.c | 22 ++++++++++++++++++++-- 1 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/windowscodecs/tiffformat.c b/dlls/windowscodecs/tiffformat.c index 62ce2f7..52a8578 100644 --- a/dlls/windowscodecs/tiffformat.c +++ b/dlls/windowscodecs/tiffformat.c @@ -56,6 +56,8 @@ static void *libtiff_handle; #define MAKE_FUNCPTR(f) static typeof(f) * p##f MAKE_FUNCPTR(TIFFClientOpen); MAKE_FUNCPTR(TIFFClose); +MAKE_FUNCPTR(TIFFCurrentDirectory); +MAKE_FUNCPTR(TIFFReadDirectory); #undef MAKE_FUNCPTR static void *load_libtiff(void) @@ -77,6 +79,8 @@ static void *load_libtiff(void) } LOAD_FUNCPTR(TIFFClientOpen); LOAD_FUNCPTR(TIFFClose); + LOAD_FUNCPTR(TIFFCurrentDirectory); + LOAD_FUNCPTR(TIFFReadDirectory); #undef LOAD_FUNCPTR } @@ -329,8 +333,22 @@ static HRESULT WINAPI TiffDecoder_GetThumbnail(IWICBitmapDecoder *iface, static HRESULT WINAPI TiffDecoder_GetFrameCount(IWICBitmapDecoder *iface, UINT *pCount) { - FIXME("(%p,%p)\n", iface, pCount); - return E_NOTIMPL; + TiffDecoder *This = (TiffDecoder*)iface; + + if (!This->tiff) + { + WARN("(%p) <-- WINCODEC_ERR_WRONGSTATE\n", iface); + return WINCODEC_ERR_WRONGSTATE; + } + + EnterCriticalSection(&This->lock); + while (pTIFFReadDirectory(This->tiff)) { } + *pCount = pTIFFCurrentDirectory(This->tiff)+1; + LeaveCriticalSection(&This->lock); + + TRACE("(%p) <-- %i\n", iface, *pCount); + + return S_OK; } static HRESULT WINAPI TiffDecoder_GetFrame(IWICBitmapDecoder *iface, -- 1.6.3.3