Author: akhaldi
Date: Thu Sep 19 14:54:10 2013
New Revision: 60202
URL: 
http://svn.reactos.org/svn/reactos?rev=60202&view=rev
Log:
[WINDOWSCODECS]
* Sync with Wine 1.7.1.
Added:
    trunk/reactos/dll/win32/windowscodecs/clipper.c   (with props)
Modified:
    trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt
    trunk/reactos/dll/win32/windowscodecs/bmpencode.c
    trunk/reactos/dll/win32/windowscodecs/colorcontext.c
    trunk/reactos/dll/win32/windowscodecs/gifformat.c
    trunk/reactos/dll/win32/windowscodecs/imgfactory.c
    trunk/reactos/dll/win32/windowscodecs/jpegformat.c
    trunk/reactos/dll/win32/windowscodecs/main.c
    trunk/reactos/dll/win32/windowscodecs/pngformat.c
    trunk/reactos/dll/win32/windowscodecs/tiffformat.c
    trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h
    trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/CM…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt        [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/CMakeLists.txt        [iso-8859-1] Thu Sep 19
14:54:10 2013
@@ -27,6 +27,7 @@
     bitmap.c
     bmpdecode.c
     bmpencode.c
+    clipper.c
     clsfactory.c
     colorcontext.c
     colortransform.c
Modified: trunk/reactos/dll/win32/windowscodecs/bmpencode.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/bm…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/bmpencode.c   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/bmpencode.c   [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -364,7 +364,7 @@
         bih.bV5GreenMask = This->format->greenmask;
         bih.bV5BlueMask = This->format->bluemask;
         bih.bV5AlphaMask = This->format->alphamask;
-        bih.bV5AlphaMask = LCS_DEVICE_RGB;
+        bih.bV5CSType = LCS_DEVICE_RGB;
     }
     bfh.bfSize = sizeof(BITMAPFILEHEADER) + info_size + bih.bV5SizeImage;
Added: trunk/reactos/dll/win32/windowscodecs/clipper.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/cl…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/clipper.c     (added)
+++ trunk/reactos/dll/win32/windowscodecs/clipper.c     [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -0,0 +1,260 @@
+/*
+ * Copyright 2013 Nikolay Sivov for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "objbase.h"
+#include "wincodec.h"
+
+#include "wincodecs_private.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(wincodecs);
+
+typedef struct BitmapClipper {
+    IWICBitmapClipper IWICBitmapClipper_iface;
+    LONG ref;
+    IWICBitmapSource *source;
+    WICRect rect;
+    CRITICAL_SECTION lock; /* must be held when initialized */
+} BitmapClipper;
+
+static inline BitmapClipper *impl_from_IWICBitmapClipper(IWICBitmapClipper *iface)
+{
+    return CONTAINING_RECORD(iface, BitmapClipper, IWICBitmapClipper_iface);
+}
+
+static HRESULT WINAPI BitmapClipper_QueryInterface(IWICBitmapClipper *iface, REFIID iid,
+    void **ppv)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+    TRACE("(%p,%s,%p)\n", iface, debugstr_guid(iid), ppv);
+
+    if (!ppv) return E_INVALIDARG;
+
+    if (IsEqualIID(&IID_IUnknown, iid) ||
+        IsEqualIID(&IID_IWICBitmapSource, iid) ||
+        IsEqualIID(&IID_IWICBitmapClipper, iid))
+    {
+        *ppv = &This->IWICBitmapClipper_iface;
+    }
+    else
+    {
+        *ppv = NULL;
+        return E_NOINTERFACE;
+    }
+
+    IUnknown_AddRef((IUnknown*)*ppv);
+    return S_OK;
+}
+
+static ULONG WINAPI BitmapClipper_AddRef(IWICBitmapClipper *iface)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+    ULONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) refcount=%u\n", iface, ref);
+
+    return ref;
+}
+
+static ULONG WINAPI BitmapClipper_Release(IWICBitmapClipper *iface)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p) refcount=%u\n", iface, ref);
+
+    if (ref == 0)
+    {
+        This->lock.DebugInfo->Spare[0] = 0;
+        DeleteCriticalSection(&This->lock);
+        if (This->source) IWICBitmapSource_Release(This->source);
+        HeapFree(GetProcessHeap(), 0, This);
+    }
+
+    return ref;
+}
+
+static HRESULT WINAPI BitmapClipper_GetSize(IWICBitmapClipper *iface,
+    UINT *width, UINT *height)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+
+    TRACE("(%p,%p,%p)\n", iface, width, height);
+
+    if (!width || !height)
+        return E_INVALIDARG;
+
+    if (!This->source)
+        return WINCODEC_ERR_WRONGSTATE;
+
+    *width = This->rect.Width;
+    *height = This->rect.Height;
+
+    return S_OK;
+}
+
+static HRESULT WINAPI BitmapClipper_GetPixelFormat(IWICBitmapClipper *iface,
+    WICPixelFormatGUID *format)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+    TRACE("(%p,%p)\n", iface, format);
+
+    if (!format)
+        return E_INVALIDARG;
+
+    if (!This->source)
+        return WINCODEC_ERR_WRONGSTATE;
+
+    return IWICBitmapSource_GetPixelFormat(This->source, format);
+}
+
+static HRESULT WINAPI BitmapClipper_GetResolution(IWICBitmapClipper *iface,
+    double *dpiX, double *dpiY)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+
+    TRACE("(%p,%p,%p)\n", iface, dpiX, dpiY);
+
+    if (!dpiX || !dpiY)
+        return E_INVALIDARG;
+
+    if (!This->source)
+        return WINCODEC_ERR_WRONGSTATE;
+
+    return IWICBitmapSource_GetResolution(This->source, dpiX, dpiY);
+}
+
+static HRESULT WINAPI BitmapClipper_CopyPalette(IWICBitmapClipper *iface,
+    IWICPalette *palette)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+
+    TRACE("(%p,%p)\n", iface, palette);
+
+    if (!palette)
+        return E_INVALIDARG;
+
+    if (!This->source)
+        return WINCODEC_ERR_WRONGSTATE;
+
+    return IWICBitmapSource_CopyPalette(This->source, palette);
+}
+
+static HRESULT WINAPI BitmapClipper_CopyPixels(IWICBitmapClipper *iface,
+    const WICRect *rc, UINT stride, UINT buffer_size, BYTE *buffer)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+    WICRect rect;
+
+    TRACE("(%p,%p,%u,%u,%p)\n", iface, rc, stride, buffer_size, buffer);
+
+    if (!This->source)
+        return WINCODEC_ERR_WRONGSTATE;
+
+    if (rc)
+    {
+        rect = *rc;
+
+        /* transform to source coordinates */
+        rect.X += This->rect.X;
+        rect.Y += This->rect.Y;
+
+        if ((rect.X + rect.Width > This->rect.X + This->rect.Width) ||
+            (rect.Y + rect.Height > This->rect.Y + This->rect.Height))
+            return E_INVALIDARG;
+
+        rc = ▭
+    }
+    else
+        rc = &This->rect;
+
+    return IWICBitmapSource_CopyPixels(This->source, rc, stride, buffer_size, buffer);
+}
+
+static HRESULT WINAPI BitmapClipper_Initialize(IWICBitmapClipper *iface,
+    IWICBitmapSource *source, const WICRect *rc)
+{
+    BitmapClipper *This = impl_from_IWICBitmapClipper(iface);
+    UINT width, height;
+    HRESULT hr = S_OK;
+
+    TRACE("(%p,%p,%p)\n", iface, source, rc);
+
+    EnterCriticalSection(&This->lock);
+
+    if (This->source)
+    {
+        hr = WINCODEC_ERR_WRONGSTATE;
+        goto end;
+    }
+
+    hr = IWICBitmapSource_GetSize(source, &width, &height);
+    if (FAILED(hr)) goto end;
+
+    if  ((rc->X + rc->Width > width) || (rc->Y + rc->Height > height))
+    {
+        hr = E_INVALIDARG;
+        goto end;
+    }
+
+    This->rect = *rc;
+    This->source = source;
+    IWICBitmapSource_AddRef(This->source);
+
+end:
+    LeaveCriticalSection(&This->lock);
+
+    return hr;
+}
+
+static const IWICBitmapClipperVtbl BitmapClipper_Vtbl = {
+    BitmapClipper_QueryInterface,
+    BitmapClipper_AddRef,
+    BitmapClipper_Release,
+    BitmapClipper_GetSize,
+    BitmapClipper_GetPixelFormat,
+    BitmapClipper_GetResolution,
+    BitmapClipper_CopyPalette,
+    BitmapClipper_CopyPixels,
+    BitmapClipper_Initialize
+};
+
+HRESULT BitmapClipper_Create(IWICBitmapClipper **clipper)
+{
+    BitmapClipper *This;
+
+    This = HeapAlloc(GetProcessHeap(), 0, sizeof(BitmapClipper));
+    if (!This) return E_OUTOFMEMORY;
+
+    This->IWICBitmapClipper_iface.lpVtbl = &BitmapClipper_Vtbl;
+    This->ref = 1;
+    This->source = NULL;
+    InitializeCriticalSection(&This->lock);
+    This->lock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ":
BitmapClipper.lock");
+
+    *clipper = &This->IWICBitmapClipper_iface;
+
+    return S_OK;
+}
Propchange: trunk/reactos/dll/win32/windowscodecs/clipper.c
------------------------------------------------------------------------------
    svn:eol-style = native
Modified: trunk/reactos/dll/win32/windowscodecs/colorcontext.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/co…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/colorcontext.c        [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/colorcontext.c        [iso-8859-1] Thu Sep 19
14:54:10 2013
@@ -130,8 +130,16 @@
     }
     ret = ReadFile(handle, *profile, size.u.LowPart, &count, NULL);
     CloseHandle(handle);
-    if (!ret) return HRESULT_FROM_WIN32(GetLastError());
-    if (count != size.u.LowPart) return E_FAIL;
+    if (!ret) {
+        HeapFree (GetProcessHeap(),0,*profile);
+        *profile = NULL;
+        return HRESULT_FROM_WIN32(GetLastError());
+    }
+    if (count != size.u.LowPart) {
+        HeapFree (GetProcessHeap(),0,*profile);
+        *profile = NULL;
+        return E_FAIL;
+    }
     *len = count;
     return S_OK;
 }
Modified: trunk/reactos/dll/win32/windowscodecs/gifformat.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/gi…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/gifformat.c   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/gifformat.c   [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -1185,26 +1185,39 @@
     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)
-    {
-        ERR("GIF contains invalid number of colors: %d\n", cm->ColorCount);
-        return E_FAIL;
-    }
-
-    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;
+    if (cm)
+    {
+        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++)
+        {
+            colors[i] = 0xff000000 | /* alpha */
+                        cm->Colors[i].Red << 16 |
+                        cm->Colors[i].Green << 8 |
+                        cm->Colors[i].Blue;
+        }
+
+        count = cm->ColorCount;
+    }
+    else
+    {
+        colors[0] = 0xff000000;
+        colors[1] = 0xffffffff;
+
+        for (i = 2; i < 256; i++)
+            colors[i] = 0xff000000;
+
+        count = 256;
     }
     /* look for the transparent color extension */
@@ -1222,7 +1235,7 @@
         }
     }
-    return IWICPalette_InitializeCustom(palette, colors, cm->ColorCount);
+    return IWICPalette_InitializeCustom(palette, colors, count);
 }
 static HRESULT WINAPI GifDecoder_GetMetadataQueryReader(IWICBitmapDecoder *iface,
Modified: trunk/reactos/dll/win32/windowscodecs/imgfactory.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/im…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/imgfactory.c  [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/imgfactory.c  [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -442,8 +442,8 @@
 static HRESULT WINAPI ComponentFactory_CreateBitmapClipper(IWICComponentFactory *iface,
     IWICBitmapClipper **ppIBitmapClipper)
 {
-    FIXME("(%p,%p): stub\n", iface, ppIBitmapClipper);
-    return E_NOTIMPL;
+    TRACE("(%p,%p)\n", iface, ppIBitmapClipper);
+    return BitmapClipper_Create(ppIBitmapClipper);
 }
 static HRESULT WINAPI ComponentFactory_CreateBitmapFlipRotator(IWICComponentFactory
*iface,
Modified: trunk/reactos/dll/win32/windowscodecs/jpegformat.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/jp…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/jpegformat.c  [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/jpegformat.c  [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -552,16 +552,23 @@
     EnterCriticalSection(&This->lock);
-    if (This->cinfo.density_unit == 2) /* pixels per centimeter */
-    {
+    switch (This->cinfo.density_unit)
+    {
+    case 2: /* pixels per centimeter */
         *pDpiX = This->cinfo.X_density * 2.54;
         *pDpiY = This->cinfo.Y_density * 2.54;
-    }
-    else
-    {
-        /* 1 = pixels per inch, 0 = unknown */
+        break;
+
+    case 1: /* pixels per inch */
         *pDpiX = This->cinfo.X_density;
         *pDpiY = This->cinfo.Y_density;
+        break;
+
+    case 0: /* unknown */
+    default:
+        *pDpiX = 96.0;
+        *pDpiY = 96.0;
+        break;
     }
     LeaveCriticalSection(&This->lock);
Modified: trunk/reactos/dll/win32/windowscodecs/main.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/ma…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/main.c        [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/main.c        [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -45,8 +45,6 @@
     {
         case DLL_PROCESS_ATTACH:
             DisableThreadLibraryCalls(hinstDLL);
-            break;
-        case DLL_PROCESS_DETACH:
             break;
     }
Modified: trunk/reactos/dll/win32/windowscodecs/pngformat.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/pn…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/pngformat.c   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/pngformat.c   [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -180,7 +180,7 @@
 MAKE_FUNCPTR(png_set_bgr);
 MAKE_FUNCPTR(png_set_crc_action);
 MAKE_FUNCPTR(png_set_error_fn);
-#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
+#ifdef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
 MAKE_FUNCPTR(png_set_expand_gray_1_2_4_to_8);
 #else
 MAKE_FUNCPTR(png_set_gray_1_2_4_to_8);
@@ -229,7 +229,7 @@
         LOAD_FUNCPTR(png_set_bgr);
         LOAD_FUNCPTR(png_set_crc_action);
         LOAD_FUNCPTR(png_set_error_fn);
-#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
+#ifdef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
         LOAD_FUNCPTR(png_set_expand_gray_1_2_4_to_8);
 #else
         LOAD_FUNCPTR(png_set_gray_1_2_4_to_8);
@@ -471,7 +471,7 @@
         {
             if (bit_depth < 8)
             {
-#if HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
+#ifdef HAVE_PNG_SET_EXPAND_GRAY_1_2_4_TO_8
                 ppng_set_expand_gray_1_2_4_to_8(This->png_ptr);
 #else
                 ppng_set_gray_1_2_4_to_8(This->png_ptr);
@@ -870,7 +870,8 @@
     UINT cCount, IWICColorContext **ppIColorContexts, UINT *pcActualCount)
 {
     PngDecoder *This = impl_from_IWICBitmapFrameDecode(iface);
-    png_charp name, profile;
+    png_charp name;
+    BYTE *profile;
     png_uint_32 len;
     int compression_type;
     HRESULT hr;
@@ -881,11 +882,11 @@
     EnterCriticalSection(&This->lock);
-    if (ppng_get_iCCP(This->png_ptr, This->info_ptr, &name,
&compression_type, &profile, &len))
+    if (ppng_get_iCCP(This->png_ptr, This->info_ptr, &name,
&compression_type, (void *)&profile, &len))
     {
         if (cCount && ppIColorContexts)
         {
-            hr = IWICColorContext_InitializeFromMemory(*ppIColorContexts, (const BYTE
*)profile, len);
+            hr = IWICColorContext_InitializeFromMemory(*ppIColorContexts, profile, len);
             if (FAILED(hr))
             {
                 LeaveCriticalSection(&This->lock);
Modified: trunk/reactos/dll/win32/windowscodecs/tiffformat.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/ti…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/tiffformat.c  [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/tiffformat.c  [iso-8859-1] Thu Sep 19 14:54:10
2013
@@ -36,6 +36,7 @@
 #include <windef.h>
 #include <winbase.h>
 #include <objbase.h>
+#include <oleauto.h>
 //#include "wincodec.h"
 #include <wincodecsdk.h>
@@ -47,6 +48,16 @@
 WINE_DEFAULT_DEBUG_CHANNEL(wincodecs);
 #ifdef SONAME_LIBTIFF
+
+/* Workaround for broken libtiff 4.x headers on some 64-bit hosts which
+ * define TIFF_UINT64_T/toff_t as 32-bit for 32-bit builds, while they
+ * are supposed to be always 64-bit.
+ * TIFF_UINT64_T doesn't exist in libtiff 3.x, it was introduced in 4.x.
+ */
+#ifdef TIFF_UINT64_T
+# undef toff_t
+# define toff_t UINT64
+#endif
 static CRITICAL_SECTION init_tiff_cs;
 static CRITICAL_SECTION_DEBUG init_tiff_cs_debug =
@@ -57,6 +68,9 @@
     0, 0, { (DWORD_PTR)(__FILE__ ": init_tiff_cs") }
 };
 static CRITICAL_SECTION init_tiff_cs = { &init_tiff_cs_debug, -1, 0, 0, 0, 0 };
+
+static const WCHAR wszTiffCompressionMethod[] =
{'T','i','f','f','C','o','m','p','r','e','s','s','i','o','n','M','e','t','h','o','d',0};
+static const WCHAR wszCompressionQuality[] =
{'C','o','m','p','r','e','s','s','i','o','n','Q','u','a','l','i','t','y',0};
 static void *libtiff_handle;
 #define MAKE_FUNCPTR(f) static typeof(f) * p##f
@@ -210,8 +224,8 @@
     IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL);
     return pTIFFClientOpen("<IStream object>", mode, stream,
tiff_stream_read,
-        tiff_stream_write, tiff_stream_seek, tiff_stream_close,
-        tiff_stream_size, tiff_stream_map, tiff_stream_unmap);
+        tiff_stream_write, (void *)tiff_stream_seek, tiff_stream_close,
+        (void *)tiff_stream_size, (void *)tiff_stream_map, (void *)tiff_stream_unmap);
 }
 typedef struct {
@@ -1913,7 +1927,31 @@
     if (SUCCEEDED(hr))
     {
-        hr = CreatePropertyBag2(NULL, 0, ppIEncoderOptions);
+        PROPBAG2 opts[2]= {{0}};
+        opts[0].pstrName = (LPOLESTR)wszTiffCompressionMethod;
+        opts[0].vt = VT_UI1;
+        opts[0].dwType = PROPBAG2_TYPE_DATA;
+
+        opts[1].pstrName = (LPOLESTR)wszCompressionQuality;
+        opts[1].vt = VT_R4;
+        opts[1].dwType = PROPBAG2_TYPE_DATA;
+
+        hr = CreatePropertyBag2(opts, 2, ppIEncoderOptions);
+
+        if (SUCCEEDED(hr))
+        {
+            VARIANT v;
+            VariantInit(&v);
+            V_VT(&v) = VT_UI1;
+            V_UNION(&v, bVal) = WICTiffCompressionDontCare;
+            hr = IPropertyBag2_Write(*ppIEncoderOptions, 1, opts, &v);
+            VariantClear(&v);
+            if (FAILED(hr))
+            {
+                IPropertyBag2_Release(*ppIEncoderOptions);
+                *ppIEncoderOptions = NULL;
+            }
+        }
     }
     if (SUCCEEDED(hr))
Modified: trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/windowscodecs/wi…
==============================================================================
--- trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h   [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/windowscodecs/wincodecs_private.h   [iso-8859-1] Thu Sep 19
14:54:10 2013
@@ -54,6 +54,7 @@
 extern HRESULT StreamImpl_Create(IWICStream **stream) DECLSPEC_HIDDEN;
 extern HRESULT ColorContext_Create(IWICColorContext **context) DECLSPEC_HIDDEN;
 extern HRESULT ColorTransform_Create(IWICColorTransform **transform) DECLSPEC_HIDDEN;
+extern HRESULT BitmapClipper_Create(IWICBitmapClipper **clipper) DECLSPEC_HIDDEN;
 extern HRESULT copy_pixels(UINT bpp, const BYTE *srcbuffer,
     UINT srcwidth, UINT srcheight, INT srcstride,
Modified: trunk/reactos/media/doc/README.WINE
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
==============================================================================
--- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original)
+++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Thu Sep 19 14:54:10 2013
@@ -199,7 +199,7 @@
 reactos/dll/win32/version         # Autosync
 reactos/dll/win32/wbemprox        # Synced to Wine-1.5.26
 reactos/dll/win32/wer             # Autosync
-reactos/dll/win32/windowscodecs   # Synced to Wine-1.5.26
+reactos/dll/win32/windowscodecs   # Synced to Wine-1.7.1
 reactos/dll/win32/winemp3.acm     # Synced to Wine-1.5.19
 reactos/dll/win32/wing32          # Out of sync
 reactos/dll/win32/winhttp         # Synced to Wine-1.5.26