From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mf/tests/mf.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 93da65e58c0..603554c237d 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -1941,8 +1941,8 @@ static void wait_async_result(IMFAsyncCallback *iface, IMFAsyncResult **result) impl->result = NULL; }
-#define wait_media_event(a, b, c, d, e) wait_media_event_(__LINE__, a, b, c, d, e) -static HRESULT wait_media_event_(int line, IMFMediaSession *session, IMFAsyncCallback *callback, +#define wait_media_event(a, b, c, d, e) wait_media_event_(__LINE__, (IMFMediaEventGenerator *)a, b, c, d, e) +static HRESULT wait_media_event_(int line, IMFMediaEventGenerator *session, IMFAsyncCallback *callback, MediaEventType expect_type, DWORD timeout, PROPVARIANT *value) { struct test_callback *impl = impl_from_IMFAsyncCallback(callback); @@ -1953,7 +1953,7 @@ static HRESULT wait_media_event_(int line, IMFMediaSession *session, IMFAsyncCal
do { - hr = IMFMediaSession_BeginGetEvent(session, &impl->IMFAsyncCallback_iface, (IUnknown *)session); + hr = IMFMediaEventGenerator_BeginGetEvent(session, &impl->IMFAsyncCallback_iface, (IUnknown *)session); ok_(__FILE__, line)(hr == S_OK, "Unexpected hr %#lx.\n", hr); ret = WaitForSingleObject(impl->event, timeout); ok_(__FILE__, line)(ret == WAIT_OBJECT_0, "WaitForSingleObject returned %lu\n", ret); @@ -6763,6 +6763,7 @@ static void load_resource_stream(const WCHAR *name, IMFByteStream **stream) static void subtest_media_source(const WCHAR *resource, const GUID *guid, const struct presentation_desc *expect) { IMFPresentationDescriptor *presentation; + PROPVARIANT propvar; IMFByteStreamHandler *handler; IMFMediaSource *media_source; IMFAsyncCallback *callback; @@ -6888,8 +6889,47 @@ static void subtest_media_source(const WCHAR *resource, const GUID *guid, const winetest_pop_context(); }
+ IMFAsyncCallback_Release(callback); + + + callback = create_test_callback(TRUE); + ok(!!callback, "got callback %p\n", callback); + + for (i = 0; i < stream_count; ++i) + { + hr = IMFPresentationDescriptor_DeselectStream(presentation, i); + ok(hr == S_OK, "got hr %#lx\n", hr); + } + hr = IMFPresentationDescriptor_SelectStream(presentation, 2); + ok(hr == S_OK, "got hr %#lx\n", hr); + + propvar.vt = VT_EMPTY; + hr = IMFMediaSource_Start(media_source, presentation, &GUID_NULL, &propvar); + ok(hr == S_OK, "got hr %#lx\n", hr); + IMFPresentationDescriptor_Release(presentation);
+ hr = wait_media_event(media_source, callback, MESourceStarted, INFINITE, &propvar); + ok(hr == S_OK, "got hr %#lx\n", hr); + + + hr = IMFMediaSource_CreatePresentationDescriptor(media_source, &presentation); + ok(hr == S_OK, "got hr %#lx\n", hr); + + for (i = 0; i < stream_count; ++i) + { + IMFStreamDescriptor *stream; + BOOL selected; + hr = IMFPresentationDescriptor_GetStreamDescriptorByIndex(presentation, i, &selected, &stream); + ok(hr == S_OK, "got hr %#lx\n", hr); + if (i == 2) ok(selected, "got selected %u\n", selected); + else todo_wine ok(!selected, "got selected %u\n", selected); + IMFStreamDescriptor_Release(stream); + } + + IMFPresentationDescriptor_Release(presentation); + + hr = IMFMediaSource_Shutdown(media_source); ok(hr == S_OK, "got hr %#lx\n", hr); IMFMediaSource_Release(media_source);