[PATCH 2/2] mfmediaengine: Update network state when loading the media source.

Nikolay Sivov nsivov at codeweavers.com
Tue Jul 20 13:11:56 CDT 2021


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfmediaengine/main.c | 17 ++++++++++++++---
 include/mfmediaengine.idl |  8 ++++++++
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c
index 36365f2a3cc..bd3fd04aabd 100644
--- a/dlls/mfmediaengine/main.c
+++ b/dlls/mfmediaengine/main.c
@@ -126,6 +126,7 @@ struct media_engine
     double default_playback_rate;
     double volume;
     double duration;
+    MF_MEDIA_ENGINE_NETWORK network_state;
     MF_MEDIA_ENGINE_ERR error_code;
     HRESULT extended_code;
     MF_MEDIA_ENGINE_READY ready_state;
@@ -1190,6 +1191,7 @@ static HRESULT WINAPI media_engine_load_handler_Invoke(IMFAsyncCallback *iface,
 
     EnterCriticalSection(&engine->cs);
 
+    engine->network_state = MF_MEDIA_ENGINE_NETWORK_LOADING;
     IMFMediaEngineNotify_EventNotify(engine->callback, MF_MEDIA_ENGINE_EVENT_LOADSTART, 0, 0);
 
     if (FAILED(hr = IMFSourceResolver_EndCreateObjectFromURL(engine->resolver, result, &obj_type, &object)))
@@ -1205,8 +1207,13 @@ static HRESULT WINAPI media_engine_load_handler_Invoke(IMFAsyncCallback *iface,
         IUnknown_Release(object);
     }
 
-    if (FAILED(hr))
+    if (SUCCEEDED(hr))
     {
+        engine->network_state = MF_MEDIA_ENGINE_NETWORK_IDLE;
+    }
+    else
+    {
+        engine->network_state = MF_MEDIA_ENGINE_NETWORK_NO_SOURCE;
         engine->error_code = MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED;
         engine->extended_code = hr;
         IMFMediaEngineNotify_EventNotify(engine->callback, MF_MEDIA_ENGINE_EVENT_ERROR, engine->error_code,
@@ -1365,6 +1372,8 @@ static HRESULT WINAPI media_engine_SetSource(IMFMediaEngine *iface, BSTR url)
 
         IMFMediaEngineNotify_EventNotify(engine->callback, MF_MEDIA_ENGINE_EVENT_PURGEQUEUEDEVENTS, 0, 0);
 
+        engine->network_state = MF_MEDIA_ENGINE_NETWORK_NO_SOURCE;
+
         if (url)
         {
             IPropertyStore *props = NULL;
@@ -1410,9 +1419,11 @@ static HRESULT WINAPI media_engine_GetCurrentSource(IMFMediaEngine *iface, BSTR
 
 static USHORT WINAPI media_engine_GetNetworkState(IMFMediaEngine *iface)
 {
-    FIXME("(%p): stub.\n", iface);
+    struct media_engine *engine = impl_from_IMFMediaEngine(iface);
+
+    TRACE("%p.\n", iface);
 
-    return 0;
+    return engine->network_state;
 }
 
 static MF_MEDIA_ENGINE_PRELOAD WINAPI media_engine_GetPreload(IMFMediaEngine *iface)
diff --git a/include/mfmediaengine.idl b/include/mfmediaengine.idl
index c00e364116e..aaf3bb55e4d 100644
--- a/include/mfmediaengine.idl
+++ b/include/mfmediaengine.idl
@@ -50,6 +50,14 @@ cpp_quote("EXTERN_GUID(MF_MEDIA_ENGINE_TELEMETRY_APPLICATION_ID,           0x1e7
 cpp_quote("EXTERN_GUID(MF_MEDIA_ENGINE_TRACK_ID,                           0x65bea312, 0x4043, 0x4815, 0x8e, 0xab, 0x44, 0xdc, 0xe2, 0xef, 0x8f, 0x2a);")
 cpp_quote("EXTERN_GUID(MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT,                0x5066893c, 0x8cf9, 0x42bc, 0x8b, 0x8a, 0x47, 0x22, 0x12, 0xe5, 0x27, 0x26);")
 
+typedef enum MF_MEDIA_ENGINE_NETWORK
+{
+    MF_MEDIA_ENGINE_NETWORK_EMPTY,
+    MF_MEDIA_ENGINE_NETWORK_IDLE,
+    MF_MEDIA_ENGINE_NETWORK_LOADING,
+    MF_MEDIA_ENGINE_NETWORK_NO_SOURCE
+} MF_MEDIA_ENGINE_NETWORK;
+
 typedef enum MF_MEDIA_ENGINE_ERR
 {
     MF_MEDIA_ENGINE_ERR_NOERROR,
-- 
2.30.2




More information about the wine-devel mailing list