mmdevapi/tests: test marshaling IAudioClient

Jeff Klein jeffrey.a.klein at gmail.com
Tue Jul 23 18:10:47 CDT 2013


Test for Bug 32161; Portaudio library does in-proc marshal of IAudioClient,
IAudioRenderClient, and IAudioCaptureClient
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20130723/1c058e76/attachment-0001.html>
-------------- next part --------------
From 2145865e15bce287a69069b533cfb0e807df9a35 Mon Sep 17 00:00:00 2001
From: Jeff Klein <jeffrey.a.klein at gmail.com>
Date: Tue, 23 Jul 2013 19:04:43 -0400
Subject: Test marshaling IAudioClient

---
 dlls/mmdevapi/tests/capture.c | 67 ++++++++++++++++++++++++++++++++++++++++--
 dlls/mmdevapi/tests/render.c  | 68 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 133 insertions(+), 2 deletions(-)

diff --git a/dlls/mmdevapi/tests/capture.c b/dlls/mmdevapi/tests/capture.c
index 1873735..2994742 100644
--- a/dlls/mmdevapi/tests/capture.c
+++ b/dlls/mmdevapi/tests/capture.c
@@ -39,6 +39,7 @@
 #define NULL_PTR_ERR MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, RPC_X_NULL_REF_POINTER)
 
 static IMMDevice *dev = NULL;
+static const LARGE_INTEGER ullZero;
 
 static void test_uninitialized(IAudioClient *ac)
 {
@@ -915,8 +916,6 @@ static void test_volume_dependence(void)
     hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_INPROC_SERVER,
             NULL, (void**)&ac);
     ok(hr == S_OK, "Activation failed with %08x\n", hr);
-    if(hr != S_OK)
-        return;
 
     hr = IAudioClient_GetMixFormat(ac, &fmt);
     ok(hr == S_OK, "GetMixFormat failed: %08x\n", hr);
@@ -1008,6 +1007,69 @@ static void test_volume_dependence(void)
     IAudioClient_Release(ac);
 }
 
+static void test_marshal(void)
+{
+    IStream *pStream;
+    IAudioClient *ac, *acDest;
+    IAudioCaptureClient *cc, *ccDest;
+    WAVEFORMATEX *pwfx;
+    HRESULT hr;
+
+    hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_INPROC_SERVER,
+            NULL, (void**)&ac);
+    ok(hr == S_OK, "Activation failed with %08x\n", hr);
+    if(hr != S_OK)
+        return;
+
+    hr = IAudioClient_GetMixFormat(ac, &pwfx);
+    ok(hr == S_OK, "GetMixFormat failed: %08x\n", hr);
+
+    hr = IAudioClient_Initialize(ac, AUDCLNT_SHAREMODE_SHARED, 0, 5000000,
+            0, pwfx, NULL);
+    ok(hr == S_OK, "Initialize failed: %08x\n", hr);
+
+    CoTaskMemFree(pwfx);
+
+    hr = IAudioClient_GetService(ac, &IID_IAudioCaptureClient, (void**)&cc);
+    ok(hr == S_OK, "GetService failed: %08x\n", hr);
+    if(hr != S_OK) {
+        IAudioClient_Release(ac);
+        return;
+    }
+
+    hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream);
+    ok(hr == S_OK, "CreateStreamOnHGlobal failed 0x%08x\n", hr);
+
+    /* marshal IAudioClient */
+
+    hr = CoMarshalInterface(pStream, &IID_IAudioClient, (IUnknown*)ac, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
+    ok(hr == S_OK, "CoMarshalInterface IAudioClient failed 0x%08x\n", hr);
+
+    IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
+    hr = CoUnmarshalInterface(pStream, &IID_IAudioClient, (void **)&acDest);
+    ok(hr == S_OK, "CoUnmarshalInterface IAudioClient failed 0x%08x\n", hr);
+    if (hr == S_OK) 
+        IAudioClient_Release(acDest);
+
+    IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
+    /* marshal IAudioCaptureClient */
+
+    hr = CoMarshalInterface(pStream, &IID_IAudioCaptureClient, (IUnknown*)cc, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
+    ok(hr == S_OK, "CoMarshalInterface IAudioCaptureClient failed 0x%08x\n", hr);
+
+    IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
+    hr = CoUnmarshalInterface(pStream, &IID_IAudioCaptureClient, (void **)&ccDest);
+    ok(hr == S_OK, "CoUnmarshalInterface IAudioCaptureClient failed 0x%08x\n", hr);
+    if (hr == S_OK)
+        IAudioCaptureClient_Release(ccDest);
+
+    IStream_Release(pStream);
+
+    IAudioClient_Release(ac);
+    IAudioCaptureClient_Release(cc);
+
+}
+
 START_TEST(capture)
 {
     HRESULT hr;
@@ -1037,6 +1099,7 @@ START_TEST(capture)
     test_channelvolume();
     test_simplevolume();
     test_volume_dependence();
+    test_marshal();
 
     IMMDevice_Release(dev);
 
diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c
index beebfb6..f3ac834 100644
--- a/dlls/mmdevapi/tests/render.c
+++ b/dlls/mmdevapi/tests/render.c
@@ -57,6 +57,8 @@ static IMMDeviceEnumerator *mme = NULL;
 static IMMDevice *dev = NULL;
 static HRESULT hexcl = S_OK; /* or AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED */
 
+static const LARGE_INTEGER ullZero;
+
 static inline const char *dbgstr_guid( const GUID *id )
 {
     static char ret[256];
@@ -2159,6 +2161,71 @@ static void test_worst_case(void)
     IAudioRenderClient_Release(arc);
 }
 
+static void test_marshal(void)
+{
+    IStream *pStream;
+    IAudioClient *ac, *acDest;
+    IAudioRenderClient *rc, *rcDest;
+    WAVEFORMATEX *pwfx;
+    HRESULT hr;
+
+    /* IAudioRenderClient */
+    hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_INPROC_SERVER,
+            NULL, (void**)&ac);
+    ok(hr == S_OK, "Activation failed with %08x\n", hr);
+    if(hr != S_OK)
+        return;
+
+    hr = IAudioClient_GetMixFormat(ac, &pwfx);
+    ok(hr == S_OK, "GetMixFormat failed: %08x\n", hr);
+
+    hr = IAudioClient_Initialize(ac, AUDCLNT_SHAREMODE_SHARED, 0, 5000000,
+            0, pwfx, NULL);
+    ok(hr == S_OK, "Initialize failed: %08x\n", hr);
+
+    CoTaskMemFree(pwfx);
+
+    hr = IAudioClient_GetService(ac, &IID_IAudioRenderClient, (void**)&rc);
+    ok(hr == S_OK, "GetService failed: %08x\n", hr);
+    if(hr != S_OK) {
+        IAudioClient_Release(ac);
+        return;
+    }
+
+    hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream);
+    ok(hr == S_OK, "CreateStreamOnHGlobal failed 0x%08x\n", hr);
+
+    /* marshal IAudioClient */
+
+    hr = CoMarshalInterface(pStream, &IID_IAudioClient, (IUnknown*)ac, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
+    ok(hr == S_OK, "CoMarshalInterface IAudioClient failed 0x%08x\n", hr);
+
+    IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
+    hr = CoUnmarshalInterface(pStream, &IID_IAudioClient, (void **)&acDest);
+    ok(hr == S_OK, "CoUnmarshalInterface IAudioClient failed 0x%08x\n", hr);
+    if (hr == S_OK) 
+        IAudioClient_Release(acDest);
+
+    IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
+    /* marshal IAudioRenderClient */
+
+    hr = CoMarshalInterface(pStream, &IID_IAudioRenderClient, (IUnknown*)rc, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL);
+    ok(hr == S_OK, "CoMarshalInterface IAudioRenderClient failed 0x%08x\n", hr);
+
+    IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL);
+    hr = CoUnmarshalInterface(pStream, &IID_IAudioRenderClient, (void **)&rcDest);
+    ok(hr == S_OK, "CoUnmarshalInterface IAudioRenderClient failed 0x%08x\n", hr);
+    if (hr == S_OK)
+        IAudioRenderClient_Release(rcDest);
+
+
+    IStream_Release(pStream);
+
+    IAudioClient_Release(ac);
+    IAudioRenderClient_Release(rc);
+
+}
+
 START_TEST(render)
 {
     HRESULT hr;
@@ -2186,6 +2253,7 @@ START_TEST(render)
     test_formats(AUDCLNT_SHAREMODE_EXCLUSIVE);
     test_formats(AUDCLNT_SHAREMODE_SHARED);
     test_references();
+    test_marshal();
     trace("Output to a MS-DOS console is particularly slow and disturbs timing.\n");
     trace("Please redirect output to a file.\n");
     test_event();
-- 
1.7.12.4 (Apple Git-37)


More information about the wine-patches mailing list