Nikolay Sivov : mfmediaengine: Implement GetCurrentSource().

Alexandre Julliard julliard at winehq.org
Thu Jun 4 16:08:00 CDT 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Thu Jun  4 13:41:47 2020 +0300

mfmediaengine: Implement GetCurrentSource().

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

---

 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 cb593cb7ed..b97e9eec33 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 7693205238..2f4a38936c 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)




More information about the wine-cvs mailing list