Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/evr/tests/evr.c | 106 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 6a711e30581..8bfeb987352 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -84,6 +84,16 @@ static IBaseFilter *create_evr(void) return filter; }
+static IFilterGraph2 *create_graph(void) +{ + IFilterGraph2 *ret; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IFilterGraph2, (void **)&ret); + ok(hr == S_OK, "Failed to create FilterGraph: %#x\n", hr); + return ret; +} + static ULONG get_refcount(void *iface) { IUnknown *unknown = iface; @@ -438,6 +448,100 @@ static void test_pin_info(void) ok(!ref, "Got outstanding refcount %d.\n", ref); }
+static unsigned int check_event_code(IMediaEvent *eventsrc, DWORD timeout, LONG expected_code, LONG_PTR expected1, LONG_PTR expected2) +{ + LONG_PTR param1, param2; + unsigned int ret = 0; + HRESULT hr; + LONG code; + + while ((hr = IMediaEvent_GetEvent(eventsrc, &code, ¶m1, ¶m2, timeout)) == S_OK) + { + if (code == expected_code) + { + ok(param1 == expected1, "Got param1 %#lx.\n", param1); + ok(param2 == expected2, "Got param2 %#lx.\n", param2); + ret++; + } + IMediaEvent_FreeEventParams(eventsrc, code, param1, param2); + timeout = 0; + } + ok(hr == E_ABORT, "Got hr %#x.\n", hr); + + return ret; +} + +static unsigned int check_ec_complete(IMediaEvent *eventsrc, DWORD timeout) +{ + return check_event_code(eventsrc, timeout, EC_COMPLETE, S_OK, 0); +} + +static void test_unconnected_eos(void) +{ + IBaseFilter *filter = create_evr(); + IFilterGraph2 *graph = create_graph(); + IMediaControl *control; + IMediaEvent *eventsrc; + unsigned int ret; + HRESULT hr; + ULONG ref; + + hr = IFilterGraph2_AddFilter(graph, filter, L"renderer"); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaEvent, (void **)&eventsrc); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + IMediaControl_Release(control); + IMediaEvent_Release(eventsrc); + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(filter); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + static IMFMediaType * create_video_type(const GUID *subtype) { IMFMediaType *video_type; @@ -2952,6 +3056,8 @@ START_TEST(evr) test_enum_pins(); test_find_pin(); test_pin_info(); + test_unconnected_eos(); + test_default_mixer(); test_default_mixer_type_negotiation(); test_surface_sample();
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/quartz/tests/dsoundrender.c | 76 +++++++++++++++++++++++++ dlls/quartz/tests/videorenderer.c | 67 ++++++++++++++++++++++ dlls/quartz/tests/vmr7.c | 95 +++++++++++++++++++++++++++++++ dlls/quartz/tests/vmr9.c | 67 ++++++++++++++++++++++ 4 files changed, 305 insertions(+)
diff --git a/dlls/quartz/tests/dsoundrender.c b/dlls/quartz/tests/dsoundrender.c index fdc23d2b48c..9107828b9df 100644 --- a/dlls/quartz/tests/dsoundrender.c +++ b/dlls/quartz/tests/dsoundrender.c @@ -40,6 +40,15 @@ static IBaseFilter *create_dsound_render(void) return filter; }
+static IFilterGraph2 *create_graph(void) +{ + IFilterGraph2 *ret; + HRESULT hr; + hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IFilterGraph2, (void **)&ret); + ok(hr == S_OK, "Failed to create FilterGraph: %#x\n", hr); + return ret; +} + static inline BOOL compare_media_types(const AM_MEDIA_TYPE *a, const AM_MEDIA_TYPE *b) { return !memcmp(a, b, offsetof(AM_MEDIA_TYPE, pbFormat)) @@ -1314,6 +1323,72 @@ static void test_media_types(void) ok(!ref, "Got outstanding refcount %d.\n", ref); }
+static void test_unconnected_eos(void) +{ + IBaseFilter *filter = create_dsound_render(); + IFilterGraph2 *graph = create_graph(); + IMediaControl *control; + IMediaEvent *eventsrc; + unsigned int ret; + HRESULT hr; + ULONG ref; + + hr = IFilterGraph2_AddFilter(graph, filter, L"renderer"); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaEvent, (void **)&eventsrc); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + IMediaControl_Release(control); + IMediaEvent_Release(eventsrc); + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(filter); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + START_TEST(dsoundrender) { IBaseFilter *filter; @@ -1343,6 +1418,7 @@ START_TEST(dsoundrender) test_unconnected_filter_state(); test_media_types(); test_connect_pin(); + test_unconnected_eos();
CoUninitialize(); } diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index 8d0003cf12e..0ce24884200 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -2865,6 +2865,72 @@ static void test_basic_video(void) ok(!ref, "Got outstanding refcount %d.\n", ref); }
+static void test_unconnected_eos(void) +{ + IBaseFilter *filter = create_video_renderer(); + IFilterGraph2 *graph = create_graph(); + IMediaControl *control; + IMediaEvent *eventsrc; + unsigned int ret; + HRESULT hr; + ULONG ref; + + hr = IFilterGraph2_AddFilter(graph, filter, L"renderer"); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaEvent, (void **)&eventsrc); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + IMediaControl_Release(control); + IMediaEvent_Release(eventsrc); + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(filter); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + START_TEST(videorenderer) { CoInitialize(NULL); @@ -2881,6 +2947,7 @@ START_TEST(videorenderer) test_overlay(); test_video_window(); test_basic_video(); + test_unconnected_eos();
CoUninitialize(); } diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c index 688770a8501..1214d5dcbb7 100644 --- a/dlls/quartz/tests/vmr7.c +++ b/dlls/quartz/tests/vmr7.c @@ -1236,6 +1236,34 @@ static void test_flushing(IPin *pin, IMemInputPin *input, IMediaControl *control ok(hr == S_OK, "Got hr %#x.\n", hr); }
+static unsigned int check_event_code(IMediaEvent *eventsrc, DWORD timeout, LONG expected_code, LONG_PTR expected1, LONG_PTR expected2) +{ + LONG_PTR param1, param2; + unsigned int ret = 0; + HRESULT hr; + LONG code; + + while ((hr = IMediaEvent_GetEvent(eventsrc, &code, ¶m1, ¶m2, timeout)) == S_OK) + { + if (code == expected_code) + { + ok(param1 == expected1, "Got param1 %#lx.\n", param1); + ok(param2 == expected2, "Got param2 %#lx.\n", param2); + ret++; + } + IMediaEvent_FreeEventParams(eventsrc, code, param1, param2); + timeout = 0; + } + ok(hr == E_ABORT, "Got hr %#x.\n", hr); + + return ret; +} + +static unsigned int check_ec_complete(IMediaEvent *eventsrc, DWORD timeout) +{ + return check_event_code(eventsrc, timeout, EC_COMPLETE, S_OK, 0); +} + static void test_current_image(IBaseFilter *filter, IMemInputPin *input, IMediaControl *control, const BITMAPINFOHEADER *req_bih) { @@ -3041,6 +3069,72 @@ out: DestroyWindow(window); }
+static void test_unconnected_eos(void) +{ + IFilterGraph2 *graph = create_graph(); + IBaseFilter *filter = create_vmr7(0); + IMediaControl *control; + IMediaEvent *eventsrc; + unsigned int ret; + HRESULT hr; + ULONG ref; + + hr = IFilterGraph2_AddFilter(graph, filter, L"renderer"); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaEvent, (void **)&eventsrc); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + IMediaControl_Release(control); + IMediaEvent_Release(eventsrc); + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(filter); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + START_TEST(vmr7) { CoInitialize(NULL); @@ -3059,6 +3153,7 @@ START_TEST(vmr7) test_video_window(); test_basic_video(); test_windowless_size(); + test_unconnected_eos();
CoUninitialize(); } diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c index 154b6a6b99e..618669595cb 100644 --- a/dlls/quartz/tests/vmr9.c +++ b/dlls/quartz/tests/vmr9.c @@ -4170,6 +4170,72 @@ static void test_mixing_prefs(void) ok(!ref, "Got outstanding refcount %d.\n", ref); }
+static void test_unconnected_eos(void) +{ + IFilterGraph2 *graph = create_graph(); + IBaseFilter *filter = create_vmr9(0); + IMediaControl *control; + IMediaEvent *eventsrc; + unsigned int ret; + HRESULT hr; + ULONG ref; + + hr = IFilterGraph2_AddFilter(graph, filter, L"renderer"); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaEvent, (void **)&eventsrc); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + IMediaControl_Release(control); + IMediaEvent_Release(eventsrc); + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(filter); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + START_TEST(vmr9) { IBaseFilter *filter; @@ -4205,6 +4271,7 @@ START_TEST(vmr9) test_basic_video(); test_windowless_size(); test_mixing_prefs(); + test_unconnected_eos();
CoUninitialize(); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=101068
Your paranoid android.
=== w10pro64_ar (64 bit report) ===
quartz: videorenderer.c:1085: Test failed: Wait failed. videorenderer.c:1087: Test failed: Got hr 0x103. videorenderer: Timeout
=== w10pro64_he (64 bit report) ===
quartz: videorenderer.c:1076: Test failed: Thread should block in Receive().
=== w10pro64 (64 bit report) ===
quartz: vmr9.c:1435: Test failed: Wait failed. vmr9.c:1436: Test failed: Got hr 0x103.
=== w10pro64_ar (64 bit report) ===
quartz: vmr9.c:1435: Test failed: Wait failed. vmr9.c:1436: Test failed: Got hr 0x103.
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/qedit/tests/nullrenderer.c | 104 ++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+)
diff --git a/dlls/qedit/tests/nullrenderer.c b/dlls/qedit/tests/nullrenderer.c index 1800f4dad4c..b4003f43cf4 100644 --- a/dlls/qedit/tests/nullrenderer.c +++ b/dlls/qedit/tests/nullrenderer.c @@ -32,6 +32,15 @@ static IBaseFilter *create_null_renderer(void) return filter; }
+static IFilterGraph2 *create_graph(void) +{ + IFilterGraph2 *ret; + HRESULT hr; + hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IFilterGraph2, (void **)&ret); + ok(hr == S_OK, "Failed to create FilterGraph: %#x\n", hr); + return ret; +} + static ULONG get_refcount(void *iface) { IUnknown *unknown = iface; @@ -791,6 +800,34 @@ static void test_flushing(IPin *pin, IMemInputPin *input, IFilterGraph2 *graph) IMediaControl_Release(control); }
+static unsigned int check_event_code(IMediaEvent *eventsrc, DWORD timeout, LONG expected_code, LONG_PTR expected1, LONG_PTR expected2) +{ + LONG_PTR param1, param2; + unsigned int ret = 0; + HRESULT hr; + LONG code; + + while ((hr = IMediaEvent_GetEvent(eventsrc, &code, ¶m1, ¶m2, timeout)) == S_OK) + { + if (code == expected_code) + { + ok(param1 == expected1, "Got param1 %#lx.\n", param1); + ok(param2 == expected2, "Got param2 %#lx.\n", param2); + ret++; + } + IMediaEvent_FreeEventParams(eventsrc, code, param1, param2); + timeout = 0; + } + ok(hr == E_ABORT, "Got hr %#x.\n", hr); + + return ret; +} + +static unsigned int check_ec_complete(IMediaEvent *eventsrc, DWORD timeout) +{ + return check_event_code(eventsrc, timeout, EC_COMPLETE, S_OK, 0); +} + static void test_connect_pin(void) { static const AM_MEDIA_TYPE req_mt = @@ -900,6 +937,72 @@ static void test_connect_pin(void) ok(!ref, "Got outstanding refcount %d.\n", ref); }
+static void test_unconnected_eos(void) +{ + IBaseFilter *filter = create_null_renderer(); + IFilterGraph2 *graph = create_graph(); + IMediaControl *control; + IMediaEvent *eventsrc; + unsigned int ret; + HRESULT hr; + ULONG ref; + + hr = IFilterGraph2_AddFilter(graph, filter, L"renderer"); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IFilterGraph2_QueryInterface(graph, &IID_IMediaEvent, (void **)&eventsrc); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Pause(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got %u EC_COMPLETE events.\n", ret); + + hr = IMediaControl_Run(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = check_ec_complete(eventsrc, 0); + todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + + IMediaControl_Release(control); + IMediaEvent_Release(eventsrc); + ref = IFilterGraph2_Release(graph); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(filter); + ok(!ref, "Got outstanding refcount %d.\n", ref); +} + START_TEST(nullrenderer) { IBaseFilter *filter; @@ -924,6 +1027,7 @@ START_TEST(nullrenderer) test_media_types(); test_enum_media_types(); test_connect_pin(); + test_unconnected_eos();
CoUninitialize(); }
From: Andrew Eikum aeikum@codeweavers.com
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/evr/tests/evr.c | 6 +++--- dlls/qedit/tests/nullrenderer.c | 6 +++--- dlls/quartz/tests/videorenderer.c | 6 +++--- dlls/quartz/tests/vmr7.c | 6 +++--- dlls/quartz/tests/vmr9.c | 6 +++--- dlls/strmbase/renderer.c | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 8bfeb987352..48115388993 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -508,7 +508,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Pause(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -520,7 +520,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -532,7 +532,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
IMediaControl_Release(control); IMediaEvent_Release(eventsrc); diff --git a/dlls/qedit/tests/nullrenderer.c b/dlls/qedit/tests/nullrenderer.c index b4003f43cf4..cfbf1d37c2f 100644 --- a/dlls/qedit/tests/nullrenderer.c +++ b/dlls/qedit/tests/nullrenderer.c @@ -969,7 +969,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Pause(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -981,7 +981,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -993,7 +993,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
IMediaControl_Release(control); IMediaEvent_Release(eventsrc); diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index 0ce24884200..5625971426b 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -2897,7 +2897,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Pause(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -2909,7 +2909,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -2921,7 +2921,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
IMediaControl_Release(control); IMediaEvent_Release(eventsrc); diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c index 1214d5dcbb7..efc876a845c 100644 --- a/dlls/quartz/tests/vmr7.c +++ b/dlls/quartz/tests/vmr7.c @@ -3101,7 +3101,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Pause(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -3113,7 +3113,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -3125,7 +3125,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
IMediaControl_Release(control); IMediaEvent_Release(eventsrc); diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c index 618669595cb..a0ccb4898a9 100644 --- a/dlls/quartz/tests/vmr9.c +++ b/dlls/quartz/tests/vmr9.c @@ -4202,7 +4202,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Pause(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -4214,7 +4214,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -4226,7 +4226,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
IMediaControl_Release(control); IMediaEvent_Release(eventsrc); diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index a879917b169..da257555a19 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -252,7 +252,7 @@ static HRESULT renderer_start_stream(struct strmbase_filter *iface, REFERENCE_TI if (filter->sink.pin.peer && filter->ops->renderer_start_stream) filter->ops->renderer_start_stream(filter);
- if (filter->eos && graph + if ((filter->eos || !filter->sink.pin.peer) && graph && SUCCEEDED(IFilterGraph_QueryInterface(graph, &IID_IMediaEventSink, (void **)&event_sink))) {
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=101070
Your paranoid android.
=== w10pro64 (64 bit report) ===
quartz: videorenderer.c:999: Test failed: Got hr 0x1.
=== w10pro64_ar (64 bit report) ===
quartz: videorenderer.c:1085: Test failed: Wait failed. videorenderer.c:1087: Test failed: Got hr 0x103. videorenderer: Timeout
=== w10pro64_zh_CN (64 bit report) ===
quartz: vmr7.c:2269: Test failed: Thread should not block. vmr7.c:2152: Test failed: Got hr 0x80040209.
=== w10pro64_ar (64 bit report) ===
quartz: vmr9.c:1435: Test failed: Wait failed. vmr9.c:1436: Test failed: Got hr 0x103.
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- dlls/quartz/dsoundrender.c | 2 +- dlls/quartz/tests/dsoundrender.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index 51a66ac5d30..df40d1254ee 100644 --- a/dlls/quartz/dsoundrender.c +++ b/dlls/quartz/dsoundrender.c @@ -608,7 +608,7 @@ static HRESULT dsound_render_start_stream(struct strmbase_filter *iface, REFEREN if (filter->sink.pin.peer) IDirectSoundBuffer_Play(filter->dsbuffer, 0, 0, DSBPLAY_LOOPING);
- if (filter->eos && graph + if ((filter->eos || !filter->sink.pin.peer) && graph && SUCCEEDED(IFilterGraph_QueryInterface(graph, &IID_IMediaEventSink, (void **)&event_sink))) { diff --git a/dlls/quartz/tests/dsoundrender.c b/dlls/quartz/tests/dsoundrender.c index 9107828b9df..03e6b8413d5 100644 --- a/dlls/quartz/tests/dsoundrender.c +++ b/dlls/quartz/tests/dsoundrender.c @@ -1355,7 +1355,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Pause(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -1367,7 +1367,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
hr = IMediaControl_Stop(control); ok(hr == S_OK, "Got hr %#x.\n", hr); @@ -1379,7 +1379,7 @@ static void test_unconnected_eos(void) ok(hr == S_OK, "Got hr %#x.\n", hr);
ret = check_ec_complete(eventsrc, 0); - todo_wine ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret); + ok(ret == 1, "Got %u EC_COMPLETE events.\n", ret);
IMediaControl_Release(control); IMediaEvent_Release(eventsrc);