mf/session: Add a helper to send events while completing commands.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2021-07-21 17:27:07 +03:00 committed by Alexandre Julliard
parent 2b3a300cbf
commit 10ba5a90fc
1 changed files with 12 additions and 12 deletions

View File

@ -826,6 +826,13 @@ static void session_command_complete(struct media_session *session)
} }
} }
static void session_command_complete_with_event(struct media_session *session, MediaEventType event,
HRESULT status, const PROPVARIANT *param)
{
IMFMediaEventQueue_QueueEventParamVar(session->event_queue, event, &GUID_NULL, status, param);
session_command_complete(session);
}
static void session_start(struct media_session *session, const GUID *time_format, const PROPVARIANT *start_position) static void session_start(struct media_session *session, const GUID *time_format, const PROPVARIANT *start_position)
{ {
struct media_source *source; struct media_source *source;
@ -863,9 +870,7 @@ static void session_start(struct media_session *session, const GUID *time_format
session_command_complete(session); session_command_complete(session);
break; break;
default: default:
IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MESessionStarted, &GUID_NULL, session_command_complete_with_event(session, MESessionStarted, MF_E_INVALIDREQUEST, NULL);
MF_E_INVALIDREQUEST, NULL);
session_command_complete(session);
break; break;
} }
} }
@ -911,8 +916,7 @@ static void session_set_paused(struct media_session *session, unsigned int state
if (state != ~0u) session->state = state; if (state != ~0u) session->state = state;
if (SUCCEEDED(status)) if (SUCCEEDED(status))
session_set_caps(session, session->caps & ~MFSESSIONCAP_PAUSE); session_set_caps(session, session->caps & ~MFSESSIONCAP_PAUSE);
IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MESessionPaused, &GUID_NULL, status, NULL); session_command_complete_with_event(session, MESessionPaused, status, NULL);
session_command_complete(session);
} }
static void session_set_closed(struct media_session *session, HRESULT status) static void session_set_closed(struct media_session *session, HRESULT status)
@ -920,8 +924,7 @@ static void session_set_closed(struct media_session *session, HRESULT status)
session->state = SESSION_STATE_CLOSED; session->state = SESSION_STATE_CLOSED;
if (SUCCEEDED(status)) if (SUCCEEDED(status))
session_set_caps(session, session->caps & ~(MFSESSIONCAP_START | MFSESSIONCAP_SEEK)); session_set_caps(session, session->caps & ~(MFSESSIONCAP_START | MFSESSIONCAP_SEEK));
IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MESessionClosed, &GUID_NULL, status, NULL); session_command_complete_with_event(session, MESessionClosed, status, NULL);
session_command_complete(session);
} }
static void session_pause(struct media_session *session) static void session_pause(struct media_session *session)
@ -1007,8 +1010,7 @@ static void session_stop(struct media_session *session)
hr = S_OK; hr = S_OK;
/* fallthrough */ /* fallthrough */
default: default:
IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MESessionStopped, &GUID_NULL, hr, NULL); session_command_complete_with_event(session, MESessionStopped, hr, NULL);
session_command_complete(session);
break; break;
} }
} }
@ -1077,9 +1079,7 @@ static void session_clear_topologies(struct media_session *session)
hr = MF_E_INVALIDREQUEST; hr = MF_E_INVALIDREQUEST;
else else
session_clear_queued_topologies(session); session_clear_queued_topologies(session);
IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MESessionTopologiesCleared, session_command_complete_with_event(session, MESessionTopologiesCleared, hr, NULL);
&GUID_NULL, hr, NULL);
session_command_complete(session);
} }
static struct media_source *session_get_media_source(struct media_session *session, IMFMediaSource *source) static struct media_source *session_get_media_source(struct media_session *session, IMFMediaSource *source)