From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/mf.c | 92 +++++++++++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 29 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 743946f7fba..ac491314b92 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -1971,8 +1971,8 @@ static IMFAsyncCallback *create_test_callback(BOOL check_media_event) }
#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, - MediaEventType expect_type, DWORD timeout, PROPVARIANT *value) +static HRESULT wait_media_event_(int line, IMFMediaEventGenerator *event_generator, + IMFAsyncCallback *callback, MediaEventType expect_type, DWORD timeout, PROPVARIANT *value) { struct test_callback *impl = impl_from_IMFAsyncCallback(callback); MediaEventType type; @@ -1982,7 +1982,8 @@ static HRESULT wait_media_event_(int line, IMFMediaSession *session, IMFAsyncCal
do { - hr = IMFMediaSession_BeginGetEvent(session, &impl->IMFAsyncCallback_iface, (IUnknown *)session); + hr = IMFMediaEventGenerator_BeginGetEvent(event_generator, + &impl->IMFAsyncCallback_iface, (IUnknown *)event_generator); 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); @@ -2006,8 +2007,8 @@ static HRESULT wait_media_event_(int line, IMFMediaSession *session, IMFAsyncCal }
#define wait_media_event_until_blocking(a, b, c, d, e) wait_media_event_until_blocking_(__LINE__, a, b, c, d, e) -static HRESULT wait_media_event_until_blocking_(int line, IMFMediaSession *session, IMFAsyncCallback *callback, - MediaEventType expect_type, DWORD timeout, PROPVARIANT *value) +static HRESULT wait_media_event_until_blocking_(int line, IMFMediaEventGenerator *event_generator, + IMFAsyncCallback *callback, MediaEventType expect_type, DWORD timeout, PROPVARIANT *value) { struct test_callback *impl = impl_from_IMFAsyncCallback(callback); MediaEventType type; @@ -2017,7 +2018,8 @@ static HRESULT wait_media_event_until_blocking_(int line, IMFMediaSession *sessi
do { - hr = IMFMediaSession_BeginGetEvent(session, &impl->IMFAsyncCallback_iface, (IUnknown *)session); + hr = IMFMediaEventGenerator_BeginGetEvent(event_generator, + &impl->IMFAsyncCallback_iface, (IUnknown *)event_generator); ok_(__FILE__, line)(hr == S_OK, "Unexpected hr %#lx.\n", hr); ret = WaitForSingleObject(impl->event, timeout); if (ret == WAIT_TIMEOUT) return WAIT_TIMEOUT; @@ -2112,6 +2114,7 @@ static void test_media_session_events(void) struct test_media_sink media_sink = test_media_sink; struct test_handler handler = test_handler; struct test_source *source_impl; + IMFMediaEventGenerator *event_generator; IMFAsyncCallback *callback, *callback2; IMFMediaType *input_type, *output_type; IMFTopologyNode *src_node, *sink_node; @@ -2192,49 +2195,51 @@ static void test_media_session_events(void)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
propvar.vt = VT_EMPTY; hr = IMFMediaSession_Start(session, &GUID_NULL, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionStarted, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionStarted, 1000, &propvar); ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
hr = IMFMediaSession_Stop(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionStopped, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionStopped, 1000, &propvar); todo_wine ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
hr = IMFMediaSession_Pause(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionPaused, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionPaused, 1000, &propvar); todo_wine ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
hr = IMFMediaSession_Close(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionClosed, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionClosed, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -2242,11 +2247,14 @@ static void test_media_session_events(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = MFCreateMediaType(&input_type); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -2287,7 +2295,7 @@ static void test_media_session_events(void)
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -2297,6 +2305,7 @@ static void test_media_session_events(void) media_sink.shutdown = FALSE;
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
if (handler.current_type) @@ -2308,12 +2317,14 @@ static void test_media_session_events(void)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
IMFPresentationDescriptor_SelectStream(pd, 0);
hr = IMFMediaSession_SetTopology(session, MFSESSION_SETTOPOLOGY_NORESOLUTION, topology); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologySet, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologySet, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_UNKNOWN, "got vt %u\n", propvar.vt); ok(propvar.punkVal == (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2325,7 +2336,7 @@ static void test_media_session_events(void)
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -2335,6 +2346,7 @@ static void test_media_session_events(void) media_sink.shutdown = FALSE;
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
if (handler.current_type) @@ -2346,10 +2358,12 @@ static void test_media_session_events(void)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_SetTopology(session, 0, topology); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologySet, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologySet, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_UNKNOWN, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2362,7 +2376,7 @@ static void test_media_session_events(void)
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -2372,6 +2386,7 @@ static void test_media_session_events(void) media_sink.shutdown = FALSE;
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
if (handler.current_type) @@ -2385,10 +2400,12 @@ static void test_media_session_events(void)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_SetTopology(session, 0, topology); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologySet, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologySet, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_UNKNOWN, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2400,7 +2417,7 @@ static void test_media_session_events(void)
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -2410,6 +2427,7 @@ static void test_media_session_events(void) media_sink.shutdown = FALSE;
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
if (handler.current_type) @@ -2424,10 +2442,12 @@ static void test_media_session_events(void)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_SetTopology(session, 0, topology); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologySet, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologySet, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_UNKNOWN, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2439,7 +2459,7 @@ static void test_media_session_events(void)
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -2449,6 +2469,7 @@ static void test_media_session_events(void) media_sink.shutdown = FALSE;
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
if (handler.current_type) @@ -2463,10 +2484,12 @@ static void test_media_session_events(void)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_SetTopology(session, 0, topology); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologySet, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologySet, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_UNKNOWN, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2478,7 +2501,7 @@ static void test_media_session_events(void)
hr = IMFMediaSession_ClearTopologies(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologiesCleared, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologiesCleared, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -2488,6 +2511,7 @@ static void test_media_session_events(void) media_sink.shutdown = FALSE;
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
@@ -2496,10 +2520,12 @@ static void test_media_session_events(void)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_SetTopology(session, 0, topology); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologySet, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologySet, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_UNKNOWN, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2514,7 +2540,7 @@ static void test_media_session_events(void) propvar.vt = VT_EMPTY; hr = IMFMediaSession_Start(session, &GUID_NULL, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event_until_blocking(session, callback, MESessionStarted, 1000, &propvar); + hr = wait_media_event_until_blocking(event_generator, callback, MESessionStarted, 1000, &propvar); ok(hr == 0x80001234, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2538,16 +2564,19 @@ static void test_media_session_events(void) CLEAR_CALLED(test_source_Start);
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
/* test IMFMediaSession_Start when test source BeginGetEvent returns S_OK */ hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaSession_SetTopology(session, 0, topology); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionTopologySet, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionTopologySet, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_UNKNOWN, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2563,7 +2592,7 @@ static void test_media_session_events(void) propvar.vt = VT_EMPTY; hr = IMFMediaSession_Start(session, &GUID_NULL, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event_until_blocking(session, callback, MESessionStarted, 1000, &propvar); + hr = wait_media_event_until_blocking(event_generator, callback, MESessionStarted, 1000, &propvar); ok(hr == E_NOTIMPL, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt); ok(propvar.punkVal != (IUnknown *)topology, "got punkVal %p\n", propvar.punkVal); @@ -2587,6 +2616,7 @@ static void test_media_session_events(void) CLEAR_CALLED(test_source_Start);
/* sometimes briefly leaking */ + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session);
IMFAsyncCallback_Release(callback); @@ -4931,6 +4961,7 @@ static void test_sample_grabber_orientation(GUID subtype) };
struct test_grabber_callback *grabber_callback; + IMFMediaEventGenerator *event_generator; IMFTopologyNode *src_node, *sink_node; IMFPresentationDescriptor *pd; IMFAsyncCallback *callback; @@ -4964,6 +4995,8 @@ static void test_sample_grabber_orientation(GUID subtype)
hr = MFCreateMediaSession(NULL, &session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaSession_QueryInterface(session, &IID_IMFMediaEventGenerator, (void **)&event_generator); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = MFCreateTopologyNode(MF_TOPOLOGY_OUTPUT_NODE, &sink_node); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -5049,7 +5082,7 @@ static void test_sample_grabber_orientation(GUID subtype) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaSession_Close(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = wait_media_event(session, callback, MESessionClosed, 1000, &propvar); + hr = wait_media_event(event_generator, callback, MESessionClosed, 1000, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt);
@@ -5061,6 +5094,7 @@ static void test_sample_grabber_orientation(GUID subtype) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
IMFActivate_Release(sink_activate); + IMFMediaEventGenerator_Release(event_generator); IMFMediaSession_Release(session); IMFMediaSource_Release(source);