Nikolay Sivov : wincodecs: Add support for WICBitmapNoCache in CreateBitmapFromSource() for bitmap as a source.

Alexandre Julliard julliard at winehq.org
Thu Nov 8 14:47:26 CST 2018


Module: wine
Branch: master
Commit: 70a3e86997ad1c1419cd02b9b49db7953cf5c4e4
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=70a3e86997ad1c1419cd02b9b49db7953cf5c4e4

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Nov  8 15:20:55 2018 +0300

wincodecs: Add support for WICBitmapNoCache in CreateBitmapFromSource() for bitmap as a source.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/windowscodecs/imgfactory.c   | 10 ++++++++++
 dlls/windowscodecs/tests/bitmap.c |  1 -
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/dlls/windowscodecs/imgfactory.c b/dlls/windowscodecs/imgfactory.c
index 78919a7..b564efc 100644
--- a/dlls/windowscodecs/imgfactory.c
+++ b/dlls/windowscodecs/imgfactory.c
@@ -19,6 +19,7 @@
 
 #include "config.h"
 
+#include <assert.h>
 #include <stdarg.h>
 
 #define COBJMACROS
@@ -501,9 +502,18 @@ static HRESULT create_bitmap_from_source_rect(IWICBitmapSource *piBitmapSource,
     IWICPixelFormatInfo2 *formatinfo;
     WICPixelFormatNumericRepresentation format_type;
 
+    assert(!rect || (rect && option == WICBitmapCacheOnLoad));
+
     if (!piBitmapSource || !ppIBitmap)
         return E_INVALIDARG;
 
+    if (option == WICBitmapNoCache && SUCCEEDED(IWICBitmapSource_QueryInterface(piBitmapSource,
+            &IID_IWICBitmap, (void **)&result)))
+    {
+        *ppIBitmap = result;
+        return S_OK;
+    }
+
     hr = IWICBitmapSource_GetSize(piBitmapSource, &width, &height);
 
     if (SUCCEEDED(hr) && rect)
diff --git a/dlls/windowscodecs/tests/bitmap.c b/dlls/windowscodecs/tests/bitmap.c
index 61e985a..5c225d2 100644
--- a/dlls/windowscodecs/tests/bitmap.c
+++ b/dlls/windowscodecs/tests/bitmap.c
@@ -456,7 +456,6 @@ static void test_createbitmapfromsource(void)
     hr = IWICImagingFactory_CreateBitmapFromSource(factory, (IWICBitmapSource *)bitmap,
         WICBitmapNoCache, &bitmap2);
     ok(hr == S_OK, "IWICImagingFactory_CreateBitmapFromSource failed hr=%x\n", hr);
-todo_wine
     ok(bitmap2 == bitmap, "Unexpected bitmap instance.\n");
 
     IWICBitmap_Release(bitmap2);




More information about the wine-cvs mailing list