Andrew Eikum : mmdevapi/tests: Add tests for IAudioClient:: GetCurrentPadding.

Alexandre Julliard julliard at winehq.org
Mon Apr 25 12:47:15 CDT 2011


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

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Fri Apr 22 15:25:43 2011 -0500

mmdevapi/tests: Add tests for IAudioClient::GetCurrentPadding.

---

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

diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c
index f7d7eb1..f8d06c0 100644
--- a/dlls/mmdevapi/tests/render.c
+++ b/dlls/mmdevapi/tests/render.c
@@ -266,6 +266,8 @@ static void test_references(void)
             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);
 
@@ -293,6 +295,8 @@ static void test_references(void)
             0, pwfx, NULL);
     ok(hr == S_OK, "Initialize failed: %08x\n", hr);
 
+    CoTaskMemFree(pwfx);
+
     hr = IAudioClient_GetService(ac, &IID_ISimpleAudioVolume, (void**)&sav);
     ok(hr == S_OK, "GetService failed: %08x\n", hr);
 
@@ -320,6 +324,8 @@ static void test_references(void)
             0, pwfx, NULL);
     ok(hr == S_OK, "Initialize failed: %08x\n", hr);
 
+    CoTaskMemFree(pwfx);
+
     hr = IAudioClient_GetService(ac, &IID_IAudioClock, (void**)&acl);
     ok(hr == S_OK, "GetService failed: %08x\n", hr);
 
@@ -357,6 +363,8 @@ static void test_event(void)
             0, pwfx, NULL);
     ok(hr == S_OK, "Initialize failed: %08x\n", hr);
 
+    CoTaskMemFree(pwfx);
+
     event = CreateEventW(NULL, FALSE, FALSE, NULL);
     ok(event != NULL, "CreateEvent failed\n");
 
@@ -380,6 +388,94 @@ static void test_event(void)
     CloseHandle(event);
 }
 
+static void test_padding(void)
+{
+    HRESULT hr;
+    IAudioClient *ac;
+    IAudioRenderClient *arc;
+    WAVEFORMATEX *pwfx;
+    REFERENCE_TIME minp, defp;
+    BYTE *buf;
+    UINT32 psize, pad, written;
+
+    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_GetDevicePeriod(ac, &defp, &minp);
+    ok(hr == S_OK, "GetDevicePeriod failed: %08x\n", hr);
+    ok(defp != 0, "Default period is 0\n");
+    ok(minp != 0, "Minimum period is 0\n");
+    ok(minp <= defp, "Mininum period is greater than default period\n");
+
+    hr = IAudioClient_GetService(ac, &IID_IAudioRenderClient, (void**)&arc);
+    ok(hr == S_OK, "GetService failed: %08x\n", hr);
+
+    psize = (defp / 10000000.) * pwfx->nSamplesPerSec * pwfx->nBlockAlign;
+
+    written = 0;
+    hr = IAudioClient_GetCurrentPadding(ac, &pad);
+    ok(hr == S_OK, "GetCurrentPadding failed: %08x\n", hr);
+    ok(pad == written, "GetCurrentPadding returned %u, should be %u\n", pad, written);
+
+    hr = IAudioRenderClient_GetBuffer(arc, psize, &buf);
+    ok(hr == S_OK, "GetBuffer failed: %08x\n", hr);
+    ok(buf != NULL, "NULL buffer returned\n");
+
+    hr = IAudioRenderClient_ReleaseBuffer(arc, psize,
+            AUDCLNT_BUFFERFLAGS_SILENT);
+    ok(hr == S_OK, "ReleaseBuffer failed: %08x\n", hr);
+    written += psize;
+
+    hr = IAudioClient_GetCurrentPadding(ac, &pad);
+    ok(hr == S_OK, "GetCurrentPadding failed: %08x\n", hr);
+    ok(pad == written, "GetCurrentPadding returned %u, should be %u\n", pad, written);
+
+    psize = (minp / 10000000.) * pwfx->nSamplesPerSec * pwfx->nBlockAlign;
+
+    hr = IAudioRenderClient_GetBuffer(arc, psize, &buf);
+    ok(hr == S_OK, "GetBuffer failed: %08x\n", hr);
+    ok(buf != NULL, "NULL buffer returned\n");
+
+    hr = IAudioRenderClient_ReleaseBuffer(arc, psize,
+            AUDCLNT_BUFFERFLAGS_SILENT);
+    ok(hr == S_OK, "ReleaseBuffer failed: %08x\n", hr);
+    written += psize;
+
+    hr = IAudioClient_GetCurrentPadding(ac, &pad);
+    ok(hr == S_OK, "GetCurrentPadding failed: %08x\n", hr);
+    ok(pad == written, "GetCurrentPadding returned %u, should be %u\n", pad, written);
+
+    /* overfull buffer. requested 1/2s buffer size, so try
+     * to get a 1/2s buffer, which should fail */
+    psize = pwfx->nSamplesPerSec / 2.;
+    hr = IAudioRenderClient_GetBuffer(arc, psize, &buf);
+    ok(hr == AUDCLNT_E_BUFFER_TOO_LARGE, "GetBuffer gave wrong error: %08x\n", hr);
+
+    hr = IAudioRenderClient_ReleaseBuffer(arc, psize, 0);
+    ok(hr == AUDCLNT_E_OUT_OF_ORDER, "ReleaseBuffer gave wrong error: %08x\n", hr);
+
+    hr = IAudioClient_GetCurrentPadding(ac, &pad);
+    ok(hr == S_OK, "GetCurrentPadding failed: %08x\n", hr);
+    ok(pad == written, "GetCurrentPadding returned %u, should be %u\n", pad, written);
+
+    CoTaskMemFree(pwfx);
+
+    IAudioRenderClient_Release(arc);
+    IAudioClient_Release(ac);
+}
+
 START_TEST(render)
 {
     HRESULT hr;
@@ -407,6 +503,7 @@ START_TEST(render)
     test_audioclient();
     test_references();
     test_event();
+    test_padding();
 
     IMMDevice_Release(dev);
 




More information about the wine-cvs mailing list