From: Brendan McGrath bmcgrath@codeweavers.com
Fixes the missing MESessionClosed event in this scenario. --- dlls/mf/session.c | 9 ++++++++- dlls/mf/tests/mf.c | 1 - 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 99e7b0872fb..dc9578ce86b 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -3193,8 +3193,15 @@ static void session_set_sink_stream_state(struct media_session *session, IMFStre break; }
- if (session->presentation.flags & SESSION_FLAG_END_OF_PRESENTATION || FAILED(hr)) + if (session->presentation.flags & SESSION_FLAG_END_OF_PRESENTATION) session_set_stopped(session, hr); + else if (FAILED(hr)) + { + if (session->presentation.flags & SESSION_FLAG_FINALIZE_SINKS) + session_set_closed(session, hr); + else + session_set_stopped(session, hr); + }
break; default: diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 483a8753f85..c42676b38d9 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -6603,7 +6603,6 @@ static void test_media_session_Close(void) hr = IMFMediaSource_Shutdown(source); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = wait_media_event_until_blocking(session, callback, MESessionClosed, 5000, &propvar); - todo_wine ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_Shutdown(session);