From: Brendan McGrath bmcgrath@codeweavers.com
--- dlls/mf/session.c | 16 ++++++++++------ dlls/mf/tests/mf.c | 3 --- 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 55b66b8c4f5..87af5b95eab 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -1466,12 +1466,6 @@ 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 (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)) { /* Attempt to get time source from the sinks. */ @@ -3152,6 +3146,7 @@ static void session_set_source_object_state(struct media_session *session, IUnkn struct media_source *src; struct media_sink *sink; enum object_state state; + struct topo_node *node; BOOL changed = FALSE; DWORD i, count; HRESULT hr; @@ -3197,6 +3192,15 @@ static void session_set_source_object_state(struct media_session *session, IUnkn
session_set_topo_status(session, S_OK, MF_TOPOSTATUS_STARTED_SOURCE);
+ if (event_type == MESourceStarted || event_type == MEStreamStarted) + { + 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); + } + } + session_set_presentation_clock(session);
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);