[PATCH 3/5] mfmediaengine: Implement GetCurrentSource().

Nikolay Sivov nsivov at codeweavers.com
Thu Jun 4 05:41:47 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfmediaengine/Makefile.in |  2 +-
 dlls/mfmediaengine/main.c      | 24 ++++++++++++++++++++++--
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/dlls/mfmediaengine/Makefile.in b/dlls/mfmediaengine/Makefile.in
index cb593cb7edf..b97e9eec331 100644
--- a/dlls/mfmediaengine/Makefile.in
+++ b/dlls/mfmediaengine/Makefile.in
@@ -1,6 +1,6 @@
 MODULE    = mfmediaengine.dll
 IMPORTLIB = mfmediaengine
-IMPORTS = mfplat mf mfuuid uuid
+IMPORTS = oleaut32 mfplat mf mfuuid uuid
 
 EXTRADLLFLAGS = -mno-cygwin
 
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c
index 7693205238a..2f4a38936c4 100644
--- a/dlls/mfmediaengine/main.c
+++ b/dlls/mfmediaengine/main.c
@@ -88,6 +88,7 @@ struct media_engine
     HRESULT extended_code;
     IMFMediaSession *session;
     IMFSourceResolver *resolver;
+    BSTR current_source;
     CRITICAL_SECTION cs;
 };
 
@@ -499,6 +500,7 @@ static void free_media_engine(struct media_engine *engine)
         IMFAttributes_Release(engine->attributes);
     if (engine->resolver)
         IMFSourceResolver_Release(engine->resolver);
+    SysFreeString(engine->current_source);
     DeleteCriticalSection(&engine->cs);
     heap_free(engine);
 }
@@ -577,6 +579,11 @@ static HRESULT WINAPI media_engine_SetSource(IMFMediaEngine *iface, BSTR url)
 
     EnterCriticalSection(&engine->cs);
 
+    SysFreeString(engine->current_source);
+    engine->current_source = NULL;
+    if (url)
+        engine->current_source = SysAllocString(url);
+
     IMFMediaEngineNotify_EventNotify(engine->callback, MF_MEDIA_ENGINE_EVENT_PURGEQUEUEDEVENTS, 0, 0);
 
     if (url)
@@ -602,9 +609,22 @@ static HRESULT WINAPI media_engine_SetSource(IMFMediaEngine *iface, BSTR url)
 
 static HRESULT WINAPI media_engine_GetCurrentSource(IMFMediaEngine *iface, BSTR *url)
 {
-    FIXME("(%p, %p): stub.\n", iface, url);
+    struct media_engine *engine = impl_from_IMFMediaEngine(iface);
+    HRESULT hr = S_OK;
 
-    return E_NOTIMPL;
+    TRACE("%p, %p.\n", iface, url);
+
+    *url = NULL;
+
+    EnterCriticalSection(&engine->cs);
+    if (engine->current_source)
+    {
+        if (!(*url = SysAllocString(engine->current_source)))
+            hr = E_OUTOFMEMORY;
+    }
+    LeaveCriticalSection(&engine->cs);
+
+    return hr;
 }
 
 static USHORT WINAPI media_engine_GetNetworkState(IMFMediaEngine *iface)
-- 
2.26.2




More information about the wine-devel mailing list