From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mf/tests/mf.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 6a556837f81..fac7d0f5f14 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -1972,8 +1972,8 @@ static IMFAsyncCallback *create_test_callback(BOOL check_media_event) return &callback->IMFAsyncCallback_iface; }
-#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); @@ -1984,7 +1984,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); @@ -7096,8 +7096,10 @@ static void subtest_media_source_streams(const WCHAR *resource, const struct pre DWORD i, min_time = -1, stream_count; IMFMediaSource *media_source; IMFSourceResolver *resolver; + IMFAsyncCallback *callback; MF_OBJECT_TYPE object_type; IMFByteStream *stream; + PROPVARIANT propvar; BOOL selected; HRESULT hr;
@@ -7191,6 +7193,38 @@ static void subtest_media_source_streams(const WCHAR *resource, const struct pre winetest_pop_context(); }
+ /* check that Start stream selection is reflected by CreatePresentationDescriptor */ + + 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); + PropVariantInit(&propvar); + hr = IMFMediaSource_Start(media_source, presentation, &GUID_NULL, &propvar); + ok(hr == S_OK, "got hr %#lx\n", hr); + IMFPresentationDescriptor_Release(presentation); + + callback = create_test_callback(TRUE); + ok(!!callback, "got callback %p\n", callback); + hr = wait_media_event(media_source, callback, MESourceStarted, INFINITE, &propvar); + ok(hr == S_OK, "got hr %#lx\n", hr); + IMFAsyncCallback_Release(callback); + + 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);