Zebediah Figura : quartz/tests: Add some tests for interfaces delegated by the filter graph.
Alexandre Julliard
julliard at winehq.org
Fri Aug 24 13:59:14 CDT 2018
Module: wine
Branch: master
Commit: 0649ba662980187660d18d4d0b0f442379ca092b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0649ba662980187660d18d4d0b0f442379ca092b
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Thu Aug 23 12:43:13 2018 -0500
quartz/tests: Add some tests for interfaces delegated by the filter graph.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/quartz/tests/filtergraph.c | 115 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 115 insertions(+)
diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
index 85079d9..de7b904 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -2287,6 +2287,119 @@ static void test_aggregate_filter_graph(void)
IUnknown_Release(pgraph);
}
+/* Test how methods from "control" interfaces (IBasicAudio, IBasicVideo,
+ * IVideoWindow) are delegated to filters exposing those interfaces. */
+static void test_control_delegation(void)
+{
+ IFilterGraph2 *graph = create_graph();
+ IBasicAudio *audio, *filter_audio;
+ IBaseFilter *renderer;
+ IVideoWindow *window;
+ IBasicVideo *video;
+ HRESULT hr;
+ LONG val;
+
+ /* IBasicAudio */
+
+ hr = IFilterGraph2_QueryInterface(graph, &IID_IBasicAudio, (void **)&audio);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+todo_wine {
+ hr = IBasicAudio_put_Volume(audio, -10);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+ hr = IBasicAudio_get_Volume(audio, &val);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+ hr = IBasicAudio_put_Balance(audio, 10);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+ hr = IBasicAudio_get_Balance(audio, &val);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+}
+
+ hr = CoCreateInstance(&CLSID_DSoundRender, NULL, CLSCTX_INPROC_SERVER, &IID_IBaseFilter, (void **)&renderer);
+ if (hr != VFW_E_NO_AUDIO_HARDWARE)
+ {
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ hr = IFilterGraph2_AddFilter(graph, renderer, NULL);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ hr = IBasicAudio_put_Volume(audio, -10);
+ ok(hr == S_OK, "got %#x\n", hr);
+ hr = IBasicAudio_get_Volume(audio, &val);
+ ok(hr == S_OK, "got %#x\n", hr);
+ ok(val == -10, "got %d\n", val);
+ hr = IBasicAudio_put_Balance(audio, 10);
+ ok(hr == S_OK || hr == VFW_E_MONO_AUDIO_HW, "got %#x\n", hr);
+ hr = IBasicAudio_get_Balance(audio, &val);
+ ok(hr == S_OK || hr == VFW_E_MONO_AUDIO_HW, "got %#x\n", hr);
+ if (hr == S_OK)
+ ok(val == 10, "got balance %d\n", val);
+
+ hr = IBaseFilter_QueryInterface(renderer, &IID_IBasicAudio, (void **)&filter_audio);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ hr = IBasicAudio_get_Volume(filter_audio, &val);
+ ok(hr == S_OK, "got %#x\n", hr);
+ ok(val == -10, "got volume %d\n", val);
+
+ hr = IFilterGraph2_RemoveFilter(graph, renderer);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ IBaseFilter_Release(renderer);
+ IBasicAudio_Release(filter_audio);
+ }
+
+todo_wine {
+ hr = IBasicAudio_put_Volume(audio, -10);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+ hr = IBasicAudio_get_Volume(audio, &val);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+ hr = IBasicAudio_put_Balance(audio, 10);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+ hr = IBasicAudio_get_Balance(audio, &val);
+ ok(hr == E_NOTIMPL, "got %#x\n", hr);
+}
+
+ IBasicAudio_Release(audio);
+
+ /* IBasicVideo and IVideoWindow */
+
+ hr = IFilterGraph2_QueryInterface(graph, &IID_IBasicVideo, (void **)&video);
+ ok(hr == S_OK, "got %#x\n", hr);
+ hr = IFilterGraph2_QueryInterface(graph, &IID_IVideoWindow, (void **)&window);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ /* Unlike IBasicAudio, these return E_NOINTERFACE. */
+ hr = IBasicVideo_get_BitRate(video, &val);
+ ok(hr == E_NOINTERFACE, "got %#x\n", hr);
+ hr = IVideoWindow_SetWindowForeground(window, OAFALSE);
+ ok(hr == E_NOINTERFACE, "got %#x\n", hr);
+
+ hr = CoCreateInstance(&CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, &IID_IBaseFilter, (void **)&renderer);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ hr = IFilterGraph2_AddFilter(graph, renderer, NULL);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ hr = IBasicVideo_get_BitRate(video, &val);
+ ok(hr == VFW_E_NOT_CONNECTED, "got %#x\n", hr);
+ hr = IVideoWindow_SetWindowForeground(window, OAFALSE);
+ ok(hr == VFW_E_NOT_CONNECTED, "got %#x\n", hr);
+
+ hr = IFilterGraph2_RemoveFilter(graph, renderer);
+ ok(hr == S_OK, "got %#x\n", hr);
+
+ hr = IBasicVideo_get_BitRate(video, &val);
+ ok(hr == E_NOINTERFACE, "got %#x\n", hr);
+ hr = IVideoWindow_SetWindowForeground(window, OAFALSE);
+ ok(hr == E_NOINTERFACE, "got %#x\n", hr);
+
+ IBaseFilter_Release(renderer);
+ IBasicVideo_Release(video);
+ IVideoWindow_Release(window);
+ IFilterGraph2_Release(graph);
+}
+
START_TEST(filtergraph)
{
CoInitializeEx(NULL, COINIT_MULTITHREADED);
@@ -2296,6 +2409,8 @@ START_TEST(filtergraph)
test_graph_builder();
test_render_filter_priority();
test_aggregate_filter_graph();
+ test_control_delegation();
+
CoUninitialize();
test_render_with_multithread();
}
More information about the wine-cvs
mailing list