[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