From: Bernhard Kölbl bkoelbl@codeweavers.com
Signed-off-by: Bernhard Kölbl bkoelbl@codeweavers.com --- dlls/mf/session.c | 12 +++++++++++- dlls/mf/tests/mf.c | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 87af5b95eab..6f6c9873fc2 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -1076,15 +1076,25 @@ static void session_start(struct media_session *session, const GUID *time_format { struct media_source *source; struct topo_node *topo_node; + BOOL keep_position; MFTIME duration; HRESULT hr; UINT i;
+ keep_position = IsEqualGUID(time_format, &GUID_NULL) && start_position->vt == VT_EMPTY; + + /* No position change - nothing to do. */ + if (session->state == SESSION_STATE_STARTED && keep_position) + { + session_command_complete_with_event(session, MESessionStarted, S_OK, NULL); + return; + } + switch (session->state) { case SESSION_STATE_PAUSED: case SESSION_STATE_STARTED: - if (!IsEqualGUID(time_format, &GUID_NULL) || start_position->vt != VT_EMPTY) + if (!keep_position) { session->command_state = COMMAND_STATE_RESTARTING_SOURCES;
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index a02f2859f91..c56e59fbc6c 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -7919,6 +7919,21 @@ static void test_media_session_seek(void)
compare_object_states(&actual_object_state_record, &expected_sample_request_and_delivery_records);
+ SET_EXPECT(test_media_sink_GetPresentationClock); + SET_EXPECT(test_media_sink_GetStreamSinkCount); + + PropVariantClear(&propvar); + hr = IMFMediaSession_Start(session, NULL, &propvar); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = wait_media_event(session, callback, MESessionStarted, 1000, &propvar); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + todo_wine + CHECK_CALLED(test_media_sink_GetPresentationClock); + todo_wine + CHECK_CALLED(test_media_sink_GetStreamSinkCount); + memset(&actual_object_state_record, 0, sizeof(actual_object_state_record)); hr = IMFMediaSession_Pause(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);