[PATCH] quartz/tests: Test IFilterGraph2::RenderFile with multithread.

Andrew Eikum aeikum at codeweavers.com
Tue Apr 4 07:48:34 CDT 2017


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Wed, Mar 29, 2017 at 09:14:54PM +0800, Jactry Zeng wrote:
> Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
> ---
>  dlls/quartz/tests/filtergraph.c | 75
> +++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 75 insertions(+)
> 
> 

> diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
> index 1089de7224..eed787247c 100644
> --- a/dlls/quartz/tests/filtergraph.c
> +++ b/dlls/quartz/tests/filtergraph.c
> @@ -376,6 +376,80 @@ static void test_render_run(const WCHAR *file)
>      CloseHandle(h);
>  }
>  
> +static DWORD WINAPI call_RenderFile_multithread(LPVOID lParam)
> +{
> +    IFilterGraph2 *filter_graph = lParam;
> +    HRESULT hr;
> +    WCHAR mp3file[] = {'t','e','s','t','.','m','p','3',0};
> +    HANDLE handle;
> +
> +    handle = CreateFileW(mp3file, 0, 0, NULL, CREATE_ALWAYS, 0, NULL);
> +    if (handle == INVALID_HANDLE_VALUE)
> +    {
> +        skip("Could not read test file %s, skipping test\n", wine_dbgstr_w(mp3file));
> +        return 1;
> +    }
> +    CloseHandle(handle);
> +
> +    hr = IFilterGraph2_RenderFile(filter_graph, mp3file, NULL);
> +    todo_wine ok(hr == VFW_E_CANNOT_RENDER || /* xp or older */
> +                 hr == VFW_E_NO_TRANSPORT, /* win7 or newer */
> +                 "Expected 0x%08x or 0x%08x, returned 0x%08x\n", VFW_E_CANNOT_RENDER, VFW_E_NO_TRANSPORT, hr);
> +
> +    DeleteFileW(mp3file);
> +    return 0;
> +}
> +
> +static void test_render_with_multithread(void)
> +{
> +    HRESULT hr;
> +    HMODULE hmod;
> +    static HRESULT (WINAPI *pDllGetClassObject)(REFCLSID rclsid, REFIID riid, void **out);
> +    IClassFactory *classfactory = NULL;
> +    static IGraphBuilder *graph_builder;
> +    static IFilterGraph2 *filter_graph;
> +    HANDLE thread;
> +
> +    CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
> +
> +    hmod = LoadLibraryA("quartz.dll");
> +    if (!hmod)
> +    {
> +        skip("Fail to load quartz.dll.\n");
> +        return;
> +    }
> +
> +    pDllGetClassObject = (void*)GetProcAddress(hmod, "DllGetClassObject");
> +    if (!pDllGetClassObject)
> +    {
> +         skip("Fail to get DllGetClassObject.\n");
> +         return;
> +    }
> +
> +    hr = pDllGetClassObject(&CLSID_FilterGraph, &IID_IClassFactory, (void **)&classfactory);
> +    ok(hr == S_OK, "DllGetClassObject failed 0x%08x\n", hr);
> +    if (FAILED(hr))
> +    {
> +         skip("Can't create IClassFactory 0x%08x.\n", hr);
> +         return;
> +    }
> +
> +    hr = IClassFactory_CreateInstance(classfactory, NULL, &IID_IUnknown, (LPVOID*)&graph_builder);
> +    ok(hr == S_OK, "IClassFactory_CreateInstance failed 0x%08x\n", hr);
> +
> +    hr = IGraphBuilder_QueryInterface(graph_builder, &IID_IFilterGraph2, (void**)&filter_graph);
> +    ok(hr == S_OK, "IGraphBuilder_QueryInterface failed 0x%08x\n", hr);
> +
> +    thread = CreateThread(NULL, 0, call_RenderFile_multithread, filter_graph, 0, NULL);
> +
> +    WaitForSingleObject(thread, 1000);
> +    IFilterGraph2_Release(filter_graph);
> +    IGraphBuilder_Release(graph_builder);
> +    IClassFactory_Release(classfactory);
> +    CoUninitialize();
> +    return;
> +}
> +
>  static void test_graph_builder(void)
>  {
>      HRESULT hr;
> @@ -2235,4 +2309,5 @@ START_TEST(filtergraph)
>      test_render_filter_priority();
>      test_aggregate_filter_graph();
>      CoUninitialize();
> +    test_render_with_multithread();
>  }
> 

> 




More information about the wine-patches mailing list