Andrew Eikum : mmdevapi/tests: Add tests for IAudioClock.

Alexandre Julliard julliard at winehq.org
Wed Apr 27 12:47:29 CDT 2011


Module: wine
Branch: master
Commit: 29d6fbc3fe651bd166e7e7cb982101e7fe9ebb82
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=29d6fbc3fe651bd166e7e7cb982101e7fe9ebb82

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Wed Apr 27 09:12:52 2011 -0500

mmdevapi/tests: Add tests for IAudioClock.

---

 dlls/mmdevapi/tests/render.c |  129 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 129 insertions(+), 0 deletions(-)

diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c
index f8d06c0..7c8174b 100644
--- a/dlls/mmdevapi/tests/render.c
+++ b/dlls/mmdevapi/tests/render.c
@@ -476,6 +476,134 @@ static void test_padding(void)
     IAudioClient_Release(ac);
 }
 
+static void test_clock(void)
+{
+    HRESULT hr;
+    IAudioClient *ac;
+    IAudioClock *acl;
+    IAudioRenderClient *arc;
+    UINT64 freq, pos, pcpos, last;
+    BYTE *data;
+    WAVEFORMATEX *pwfx;
+
+    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);
+    if(hr != S_OK)
+        return;
+
+    hr = IAudioClient_Initialize(ac, AUDCLNT_SHAREMODE_SHARED,
+            0, 5000000, 0, pwfx, NULL);
+    ok(hr == S_OK, "Initialize failed: %08x\n", hr);
+
+    hr = IAudioClient_GetService(ac, &IID_IAudioClock, (void**)&acl);
+    ok(hr == S_OK, "GetService(IAudioClock) failed: %08x\n", hr);
+
+    hr = IAudioClock_GetFrequency(acl, &freq);
+    ok(hr == S_OK, "GetFrequency failed: %08x\n", hr);
+
+    hr = IAudioClock_GetPosition(acl, NULL, NULL);
+    ok(hr == E_POINTER, "GetPosition wrong error: %08x\n", hr);
+
+    pcpos = 0;
+    hr = IAudioClock_GetPosition(acl, &pos, &pcpos);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos == 0, "GetPosition returned non-zero pos before being started\n");
+    ok(pcpos != 0, "GetPosition returned zero pcpos\n");
+    last = pos;
+
+    hr = IAudioClient_GetService(ac, &IID_IAudioRenderClient, (void**)&arc);
+    ok(hr == S_OK, "GetService(IAudioRenderClient) failed: %08x\n", hr);
+
+    hr = IAudioRenderClient_GetBuffer(arc, pwfx->nSamplesPerSec / 2., &data);
+    ok(hr == S_OK, "GetBuffer failed: %08x\n", hr);
+
+    hr = IAudioRenderClient_ReleaseBuffer(arc, pwfx->nSamplesPerSec / 2., AUDCLNT_BUFFERFLAGS_SILENT);
+    ok(hr == S_OK, "ReleaseBuffer failed: %08x\n", hr);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos == 0, "GetPosition returned non-zero pos before being started\n");
+
+    hr = IAudioClient_Start(ac);
+    ok(hr == S_OK, "Start failed: %08x\n", hr);
+
+    Sleep(100);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos > 0, "Position should have been further along...\n");
+    last = pos;
+
+    hr = IAudioClient_Stop(ac);
+    ok(hr == S_OK, "Stop failed: %08x\n", hr);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos >= last, "Position should have been further along...\n");
+    last = pos;
+
+    hr = IAudioClient_Start(ac);
+    ok(hr == S_OK, "Start failed: %08x\n", hr);
+
+    Sleep(100);
+
+    hr = IAudioClient_Stop(ac);
+    ok(hr == S_OK, "Stop failed: %08x\n", hr);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos >= last, "Position should have been further along...\n");
+    last = pos;
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos == last, "Position should have been further along...\n");
+
+    hr = IAudioClient_Reset(ac);
+    ok(hr == S_OK, "Reset failed: %08x\n", hr);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos == 0, "GetPosition returned non-zero pos after Reset\n");
+    last = pos;
+
+    hr = IAudioRenderClient_GetBuffer(arc, pwfx->nSamplesPerSec / 2., &data);
+    ok(hr == S_OK, "GetBuffer failed: %08x\n", hr);
+
+    hr = IAudioRenderClient_ReleaseBuffer(arc, pwfx->nSamplesPerSec / 2., AUDCLNT_BUFFERFLAGS_SILENT);
+    ok(hr == S_OK, "ReleaseBuffer failed: %08x\n", hr);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos == 0, "GetPosition returned non-zero pos after Reset\n");
+    last = pos;
+
+    hr = IAudioClient_Start(ac);
+    ok(hr == S_OK, "Start failed: %08x\n", hr);
+
+    Sleep(100);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos > last, "Position should have been further along...\n");
+
+    hr = IAudioClient_Stop(ac);
+    ok(hr == S_OK, "Stop failed: %08x\n", hr);
+
+    hr = IAudioClock_GetPosition(acl, &pos, NULL);
+    ok(hr == S_OK, "GetPosition failed: %08x\n", hr);
+    ok(pos >= last, "Position should have been further along...\n");
+
+    IAudioClock_Release(acl);
+    IAudioClient_Release(ac);
+}
+
 START_TEST(render)
 {
     HRESULT hr;
@@ -504,6 +632,7 @@ START_TEST(render)
     test_references();
     test_event();
     test_padding();
+    test_clock();
 
     IMMDevice_Release(dev);
 




More information about the wine-cvs mailing list