From: Brendan McGrath <bmcgrath(a)codeweavers.com> --- dlls/mf/session.c | 18 ++++++++++++------ dlls/mf/tests/mf.c | 3 --- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/dlls/mf/session.c b/dlls/mf/session.c index c394a380a5f..99d47c0c112 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -1465,7 +1465,7 @@ static void session_set_consumed_clock(IUnknown *object, IMFPresentationClock *c } } -static void session_set_presentation_clock(struct media_session *session) +static void session_set_presentation_clock(struct media_session *session, BOOL seeking) { IMFPresentationTimeSource *time_source = NULL; struct media_source *source; @@ -1473,10 +1473,13 @@ static void session_set_presentation_clock(struct media_session *session) struct topo_node *node; HRESULT hr; - LIST_FOR_EACH_ENTRY(node, &session->presentation.nodes, struct topo_node, entry) + if (!seeking) { - if (node->type == MF_TOPOLOGY_TRANSFORM_NODE) - IMFTransform_ProcessMessage(node->object.transform, MFT_MESSAGE_NOTIFY_START_OF_STREAM, 0); + LIST_FOR_EACH_ENTRY(node, &session->presentation.nodes, struct topo_node, entry) + { + if (node->type == MF_TOPOLOGY_TRANSFORM_NODE) + IMFTransform_ProcessMessage(node->object.transform, MFT_MESSAGE_NOTIFY_START_OF_STREAM, 0); + } } if (!(session->presentation.flags & SESSION_FLAG_PRESENTATION_CLOCK_SET)) @@ -1591,7 +1594,7 @@ static void session_complete_rate_change(struct media_session *session) return; session->presentation.flags &= ~SESSION_FLAG_PENDING_RATE_CHANGE; - session_set_presentation_clock(session); + session_set_presentation_clock(session, FALSE); session->presentation.thin_committed = session->presentation.thin; @@ -3235,10 +3238,13 @@ static void session_set_source_object_state(struct media_session *session, IUnkn BOOL changed = FALSE; DWORD i, count; HRESULT hr; + BOOL seeking; if ((state = session_get_object_state_for_event(event_type)) == OBJ_STATE_INVALID) return; + seeking = (event_type == MESourceSeeked || event_type == MEStreamSeeked); + switch (event_type) { case MESourceSeeked: @@ -3277,7 +3283,7 @@ static void session_set_source_object_state(struct media_session *session, IUnkn session_set_topo_status(session, S_OK, MF_TOPOSTATUS_STARTED_SOURCE); - session_set_presentation_clock(session); + session_set_presentation_clock(session, seeking); if ((session->presentation.flags & SESSION_FLAG_NEEDS_PREROLL) && session_is_output_nodes_state(session, OBJ_STATE_STOPPED)) { diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 8550157073b..a02f2859f91 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -7656,7 +7656,6 @@ static HRESULT WINAPI test_transform_ProcessMessage(IMFTransform *iface, MFT_MES return S_OK; case MFT_MESSAGE_NOTIFY_START_OF_STREAM: - todo_wine_if(!expect_test_transform_ProcessMessage_START_OF_STREAM) CHECK_EXPECT(test_transform_ProcessMessage_START_OF_STREAM); add_object_state(&actual_object_state_record, MFT_START); return S_OK; @@ -7960,7 +7959,6 @@ static void test_media_session_seek(void) CHECK_CALLED(test_stream_sink_Flush); CHECK_CALLED(test_transform_ProcessMessage_FLUSH); - todo_wine compare_object_states(&actual_object_state_record, &expected_seek_start_no_pending_request_records); /* Test a sample request only (i.e. with no sample delivery), then pause and then start with a seek */ @@ -8023,7 +8021,6 @@ static void test_media_session_seek(void) CHECK_CALLED(test_transform_ProcessOutput); CHECK_CALLED(test_media_stream_RequestSample); - todo_wine compare_object_states(&actual_object_state_record, &expected_seek_start_pending_request_records); IMFPresentationClock_RemoveClockStateSink(presentation_clock, &test_seek_clock_sink); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/7932