From: R��mi Bernon rbernon@codeweavers.com
--- dlls/mf/session.c | 19 +++++++++++++++++++ dlls/mf/tests/mf.c | 2 -- 2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 87fe77a730f..5ea6a748940 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -592,7 +592,26 @@ static HRESULT session_bind_output_nodes(IMFTopology *topology) }
if (stream_sink) + { + IMFMediaTypeHandler *handler; + + if (SUCCEEDED(hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, &handler))) + { + IMFMediaType *type; + + if (SUCCEEDED(hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &type))) + hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, type); + + for (i = 0; FAILED(hr) && SUCCEEDED(hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, i, &type)); ++i) + { + hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, type); + IMFMediaType_Release(type); + } + + IMFMediaTypeHandler_Release(handler); + } IMFStreamSink_Release(stream_sink); + } IUnknown_Release(object); }
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index c65de5fc517..b892e4f0aca 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -2385,7 +2385,6 @@ static void test_media_session_events(void) PropVariantClear(&propvar);
ok(handler.enum_count, "got %lu GetMediaTypeByIndex\n", handler.enum_count); - todo_wine ok(handler.set_current_count, "got %lu SetCurrentMediaType\n", handler.set_current_count); handler.enum_count = handler.set_current_count = 0;
@@ -2424,7 +2423,6 @@ static void test_media_session_events(void) PropVariantClear(&propvar);
ok(!handler.enum_count, "got %lu GetMediaTypeByIndex\n", handler.enum_count); - todo_wine ok(handler.set_current_count, "got %lu SetCurrentMediaType\n", handler.set_current_count); handler.enum_count = handler.set_current_count = 0;