From f56c12c8477c0deec92440ab809259602d84c2fc Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 20 Jul 2021 21:11:56 +0300 Subject: [PATCH] mfmediaengine: Update network state when loading the media source. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- 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); - return 0; + TRACE("%p.\n", iface); + + 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,