Tony Wasserka : windowscodecs: Support reading from memory streams in IWICStream.

Alexandre Julliard julliard at winehq.org
Fri Aug 21 09:32:49 CDT 2009


Module: wine
Branch: master
Commit: bb83fb264b3cee27d8b7abae467d35d6b916f9f6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bb83fb264b3cee27d8b7abae467d35d6b916f9f6

Author: Tony Wasserka <tony.wasserka at freenet.de>
Date:   Fri Aug 21 11:07:37 2009 +0200

windowscodecs: Support reading from memory streams in IWICStream.

---

 dlls/windowscodecs/stream.c |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/dlls/windowscodecs/stream.c b/dlls/windowscodecs/stream.c
index 6e28ae9..f1af925 100644
--- a/dlls/windowscodecs/stream.c
+++ b/dlls/windowscodecs/stream.c
@@ -37,6 +37,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(wincodecs);
 typedef struct StreamOnMemory {
     const IStreamVtbl *lpVtbl;
     LONG ref;
+
+    BYTE *pbMemory;
+    DWORD dwMemsize;
+    DWORD dwCurPos;
 } StreamOnMemory;
 
 static HRESULT WINAPI StreamOnMemory_QueryInterface(IStream *iface,
@@ -86,8 +90,18 @@ static ULONG WINAPI StreamOnMemory_Release(IStream *iface)
 static HRESULT WINAPI StreamOnMemory_Read(IStream *iface,
     void *pv, ULONG cb, ULONG *pcbRead)
 {
-    FIXME("(%p): stub\n", iface);
-    return E_NOTIMPL;
+    StreamOnMemory *This = (StreamOnMemory*)iface;
+    ULONG uBytesRead;
+    TRACE("(%p)\n", This);
+
+    if (!pv) return E_INVALIDARG;
+
+    uBytesRead = min(cb, This->dwMemsize - This->dwCurPos);
+    memcpy(pv, This->pbMemory + This->dwCurPos, uBytesRead);
+    This->dwCurPos += uBytesRead;
+    if (pcbRead) *pcbRead = uBytesRead;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI StreamOnMemory_Write(IStream *iface,
@@ -400,6 +414,9 @@ static HRESULT WINAPI IWICStreamImpl_InitializeFromMemory(IWICStream *iface,
 
     pObject->lpVtbl = &StreamOnMemory_Vtbl;
     pObject->ref = 1;
+    pObject->pbMemory = pbBuffer;
+    pObject->dwMemsize = cbBufferSize;
+    pObject->dwCurPos = 0;
 
     This->pStream = (IStream*)pObject;
     return S_OK;




More information about the wine-cvs mailing list