From: R��mi Bernon rbernon@codeweavers.com
--- dlls/mf/session.c | 21 +++++++++++++++++++++ dlls/mf/tests/mf.c | 5 +++-- 2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 87fe77a730f..18952fb1f6e 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -592,7 +592,28 @@ 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))) + IMFMediaType_Release(type); + else if (hr == MF_E_NOT_INITIALIZED) + { + 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 c8232bd543a..e603aa8ce60 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -2133,6 +2133,7 @@ static void test_media_session_events(void) hr = IMFStreamSink_GetMediaTypeHandler(stream_sink, &handler); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &media_type); + todo_wine ok(hr == MF_E_NOT_INITIALIZED, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_SetTopology(session, 0, topology); @@ -2146,10 +2147,9 @@ static void test_media_session_events(void) PropVariantClear(&propvar);
hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &media_type); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); IMFMediaTypeHandler_Release(handler); - if (hr == S_OK) IMFMediaType_Release(media_type); + IMFMediaType_Release(media_type);
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -2183,6 +2183,7 @@ static void test_media_session_events(void) todo_wine ok(ref == 0, "Release returned %ld\n", ref); ref = IMFStreamSink_Release(stream_sink); + todo_wine ok(ref == 0, "Release returned %ld\n", ref);
ref = IMFMediaSource_Release(source);