From e1e7c160931120000b5cc3b404a41d27499fecb4 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 25 Oct 2021 13:04:22 +0300 Subject: [PATCH] mfplay: Change to stopped state when playback ends. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/mfplay/player.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dlls/mfplay/player.c b/dlls/mfplay/player.c index a34973f8e36..6f8d4942a0b 100644 --- a/dlls/mfplay/player.c +++ b/dlls/mfplay/player.c @@ -1929,6 +1929,17 @@ static void media_player_create_forward_event(struct media_player *player, HRESU LeaveCriticalSection(&player->cs); } +static void media_player_playback_ended(struct media_player *player, HRESULT event_status, + struct media_event **event) +{ + EnterCriticalSection(&player->cs); + + media_player_set_state(player, MFP_MEDIAPLAYER_STATE_STOPPED); + media_event_create(player, MFP_EVENT_TYPE_PLAYBACK_ENDED, event_status, player->item, event); + + LeaveCriticalSection(&player->cs); +} + static HRESULT WINAPI media_player_session_events_callback_Invoke(IMFAsyncCallback *iface, IMFAsyncResult *result) { @@ -1990,7 +2001,7 @@ static HRESULT WINAPI media_player_session_events_callback_Invoke(IMFAsyncCallba if (SUCCEEDED(IMFMediaEvent_GetUINT32(session_event, &MF_EVENT_TOPOLOGY_STATUS, &status)) && status == MF_TOPOSTATUS_ENDED) { - media_event_create(player, MFP_EVENT_TYPE_PLAYBACK_ENDED, event_status, player->item, &event); + media_player_playback_ended(player, event_status, &event); } break;