Owen Rudge : dsound/tests: Add IEEE float buffer tests for dsound8.

Alexandre Julliard julliard at winehq.org
Thu Jan 20 12:41:25 CST 2011


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

Author: Owen Rudge <orudge at codeweavers.com>
Date:   Thu Jan 20 15:41:59 2011 +0000

dsound/tests: Add IEEE float buffer tests for dsound8.

---

 dlls/dsound/tests/ds3d8.c   |    7 ++++++-
 dlls/dsound/tests/dsound8.c |   33 +++++++++++++++++++++++----------
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/dlls/dsound/tests/ds3d8.c b/dlls/dsound/tests/ds3d8.c
index 7855fb3..aa72648 100644
--- a/dlls/dsound/tests/ds3d8.c
+++ b/dlls/dsound/tests/ds3d8.c
@@ -30,6 +30,8 @@
 #include "wine/test.h"
 #include "dsound.h"
 #include "mmreg.h"
+#include "ks.h"
+#include "ksmedia.h"
 #include "dsound_test.h"
 
 static HRESULT (WINAPI *pDirectSoundEnumerateA)(LPDSENUMCALLBACKA,LPVOID)=NULL;
@@ -181,6 +183,7 @@ void test_buffer8(LPDIRECTSOUND8 dso, LPDIRECTSOUNDBUFFER * dsbo,
     DSBCAPS dsbcaps;
     WAVEFORMATEX wfx,wfx2;
     DWORD size,status,freq;
+    BOOL ieee = FALSE;
     int ref;
 
     /* DSOUND: Error: Invalid caps pointer */
@@ -214,10 +217,12 @@ void test_buffer8(LPDIRECTSOUND8 dso, LPDIRECTSOUNDBUFFER * dsbo,
 
     if (size == sizeof(WAVEFORMATEX)) {
         rc=IDirectSoundBuffer_GetFormat(*dsbo,&wfx,size,NULL);
+        ieee = (wfx.wFormatTag == WAVE_FORMAT_IEEE_FLOAT);
     } else if (size == sizeof(WAVEFORMATEXTENSIBLE)) {
         WAVEFORMATEXTENSIBLE wfxe;
         rc=IDirectSoundBuffer_GetFormat(*dsbo,(WAVEFORMATEX*)&wfxe,size,NULL);
         wfx = wfxe.Format;
+        ieee = IsEqualGUID(&wfxe.SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
     }
     ok(rc==DS_OK,"IDirectSoundBuffer_GetFormat() failed: %08x\n", rc);
     if (rc==DS_OK && winetest_debug > 1) {
@@ -447,7 +452,7 @@ void test_buffer8(LPDIRECTSOUND8 dso, LPDIRECTSOUNDBUFFER * dsbo,
         ok(rc==DSERR_INVALIDPARAM, "IDirectSoundBuffer_Lock() should have "
            "returned DSERR_INVALIDPARAM, returned %08x\n", rc);
 
-        state.wave=wave_generate_la(&wfx,duration,&state.wave_len,FALSE);
+        state.wave=wave_generate_la(&wfx,duration,&state.wave_len,ieee);
 
         state.dsbo=*dsbo;
         state.wfx=&wfx;
diff --git a/dlls/dsound/tests/dsound8.c b/dlls/dsound/tests/dsound8.c
index 5eb7c05..5561051 100644
--- a/dlls/dsound/tests/dsound8.c
+++ b/dlls/dsound/tests/dsound8.c
@@ -534,7 +534,7 @@ static HRESULT test_primary_secondary8(LPGUID lpGuid)
     DSCAPS dscaps;
     WAVEFORMATEX wfx, wfx2;
     int ref;
-    unsigned int f;
+    unsigned int f, tag;
 
     /* Create the DirectSound object */
     rc=pDirectSoundCreate8(lpGuid,&dso,NULL);
@@ -568,6 +568,11 @@ static HRESULT test_primary_secondary8(LPGUID lpGuid)
 
     if (rc==DS_OK && primary!=NULL) {
         for (f=0;f<NB_FORMATS;f++) {
+          for (tag=0;tag<NB_TAGS;tag++) {
+            /* if float, we only want to test 32-bit */
+            if ((format_tags[tag] == WAVE_FORMAT_IEEE_FLOAT) && (formats[f][1] != 32))
+                continue;
+
             /* We must call SetCooperativeLevel to be allowed to call
              * SetFormat */
             /* DSOUND: Setting DirectSound cooperative level to
@@ -577,7 +582,7 @@ static HRESULT test_primary_secondary8(LPGUID lpGuid)
             if (rc!=DS_OK)
                 goto EXIT;
 
-            init_format(&wfx,WAVE_FORMAT_PCM,formats[f][0],formats[f][1],
+            init_format(&wfx,format_tags[tag],formats[f][0],formats[f][1],
                         formats[f][2]);
             wfx2=wfx;
             rc=IDirectSoundBuffer_SetFormat(primary,&wfx);
@@ -621,9 +626,9 @@ static HRESULT test_primary_secondary8(LPGUID lpGuid)
                                         wfx.nBlockAlign);
             bufdesc.lpwfxFormat=&wfx2;
             if (winetest_interactive) {
-                trace("  Testing a primary buffer at %dx%dx%d with a "
+                trace("  Testing a primary buffer at %dx%dx%d (fmt=%d) with a "
                       "secondary buffer at %dx%dx%d\n",
-                      wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
+                      wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,format_tags[tag],
                       wfx2.nSamplesPerSec,wfx2.wBitsPerSample,wfx2.nChannels);
             }
             rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
@@ -639,6 +644,7 @@ static HRESULT test_primary_secondary8(LPGUID lpGuid)
                 ok(ref==0,"IDirectSoundBuffer_Release() has %d references, "
                    "should have 0\n",ref);
             }
+          }
         }
 
         ref=IDirectSoundBuffer_Release(primary);
@@ -668,7 +674,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
     DSBUFFERDESC bufdesc;
     DSCAPS dscaps;
     WAVEFORMATEX wfx, wfx1;
-    DWORD f;
+    DWORD f, tag;
     int ref;
 
     /* Create the DirectSound object */
@@ -708,8 +714,14 @@ static HRESULT test_secondary8(LPGUID lpGuid)
             goto EXIT1;
 
         for (f=0;f<NB_FORMATS;f++) {
+          for (tag=0;tag<NB_TAGS;tag++) {
             WAVEFORMATEXTENSIBLE wfxe;
-            init_format(&wfx,WAVE_FORMAT_PCM,formats[f][0],formats[f][1],
+
+            /* if float, we only want to test 32-bit */
+            if ((format_tags[tag] == WAVE_FORMAT_IEEE_FLOAT) && (formats[f][1] != 32))
+                continue;
+
+            init_format(&wfx,format_tags[tag],formats[f][0],formats[f][1],
                         formats[f][2]);
             secondary=NULL;
             ZeroMemory(&bufdesc, sizeof(bufdesc));
@@ -748,7 +760,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
             bufdesc.lpwfxFormat=(WAVEFORMATEX*)&wfxe;
             wfxe.Format = wfx;
             wfxe.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
-            wfxe.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+            wfxe.SubFormat = (format_tags[tag] == WAVE_FORMAT_PCM ? KSDATAFORMAT_SUBTYPE_PCM : KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
             wfxe.Format.cbSize = 1;
             wfxe.Samples.wValidBitsPerSample = wfx.wBitsPerSample;
             wfxe.dwChannelMask = (wfx.nChannels == 1 ? KSAUDIO_SPEAKER_MONO : KSAUDIO_SPEAKER_STEREO);
@@ -799,7 +811,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
                 secondary=NULL;
             }
 
-            wfxe.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
+            wfxe.SubFormat = (format_tags[tag] == WAVE_FORMAT_PCM ? KSDATAFORMAT_SUBTYPE_PCM : KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
             rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
             ok(rc==DS_OK && secondary,
                 "IDirectSound_CreateSoundBuffer() returned: %08x %p\n",
@@ -854,9 +866,9 @@ static HRESULT test_secondary8(LPGUID lpGuid)
 
             if (rc==DS_OK && secondary!=NULL) {
                 if (winetest_interactive) {
-                    trace("  Testing a secondary buffer at %dx%dx%d "
+                    trace("  Testing a secondary buffer at %dx%dx%d (fmt=%d) "
                         "with a primary buffer at %dx%dx%d\n",
-                        wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
+                        wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,format_tags[tag],
                         wfx1.nSamplesPerSec,wfx1.wBitsPerSample,wfx1.nChannels);
                 }
                 test_buffer8(dso,&secondary,0,FALSE,0,FALSE,0,
@@ -866,6 +878,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
                 ok(ref==0,"IDirectSoundBuffer_Release() has %d references, "
                    "should have 0\n",ref);
             }
+          }
         }
 EXIT1:
         ref=IDirectSoundBuffer_Release(primary);




More information about the wine-cvs mailing list