[PATCH v2 1/2] quartz/tests: Add some tests for interfaces delegated by the filter graph.

Zebediah Figura z.figura12 at gmail.com
Thu Aug 23 12:43:13 CDT 2018


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 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 6597f2f..ba962c3 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -1562,6 +1562,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);
@@ -1571,6 +1684,8 @@ START_TEST(filtergraph)
     test_graph_builder();
     test_render_filter_priority();
     test_aggregate_filter_graph();
+    test_control_delegation();
+
     CoUninitialize();
     test_render_with_multithread();
 }
-- 
2.7.4




More information about the wine-devel mailing list