dsound dsound8 3d stereo buffer bug fix

Robert Reif reif at earthlink.net
Tue Aug 24 18:19:54 CDT 2004


DirectSound8 doesn't accept 3D stereo secondary buffers but
DirectSound does.
Add tests.
-------------- next part --------------
Index: dlls/dsound/dsound.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/dsound.c,v
retrieving revision 1.16
diff -u -r1.16 dsound.c
--- dlls/dsound/dsound.c	23 Aug 2004 19:39:51 -0000	1.16
+++ dlls/dsound/dsound.c	24 Aug 2004 23:06:55 -0000
@@ -320,7 +320,19 @@
     LPUNKNOWN lpunk)
 {
     ICOM_THIS(IDirectSoundImpl,iface);
-    LPWAVEFORMATEX  wfex;
+    TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk);
+    FIXME("shouldn't be called directly\n");
+    return DSERR_GENERIC;
+}
+
+static HRESULT WINAPI DSOUND_CreateSoundBuffer(
+    LPDIRECTSOUND8 iface,
+    LPCDSBUFFERDESC dsbd,
+    LPLPDIRECTSOUNDBUFFER ppdsb,
+    LPUNKNOWN lpunk,
+    BOOL from8)
+{
+    ICOM_THIS(IDirectSoundImpl,iface);
     HRESULT hres = DS_OK;
     TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk);
 
@@ -339,7 +351,8 @@
         return DSERR_INVALIDPARAM;
     }
 
-    if (dsbd->dwSize != sizeof(DSBUFFERDESC) && dsbd->dwSize != sizeof(DSBUFFERDESC1)) {
+    if (dsbd->dwSize != sizeof(DSBUFFERDESC) &&
+        dsbd->dwSize != sizeof(DSBUFFERDESC1)) {
         WARN("invalid parameter: dsbd\n");
         return DSERR_INVALIDPARAM;
     }
@@ -358,16 +371,13 @@
         TRACE("(lpwfxFormat=%p)\n",dsbd->lpwfxFormat);
     }
 
-    wfex = dsbd->lpwfxFormat;
-
-    if (wfex)
-        TRACE("(formattag=0x%04x,chans=%d,samplerate=%ld,"
-        "bytespersec=%ld,blockalign=%d,bitspersamp=%d,cbSize=%d)\n",
-        wfex->wFormatTag, wfex->nChannels, wfex->nSamplesPerSec,
-        wfex->nAvgBytesPerSec, wfex->nBlockAlign,
-        wfex->wBitsPerSample, wfex->cbSize);
-
     if (dsbd->dwFlags & DSBCAPS_PRIMARYBUFFER) {
+        if (dsbd->lpwfxFormat != NULL) {
+            WARN("invalid parameter: dsbd->lpwfxFormat must be NULL for "
+                 "primary buffer\n");
+            return DSERR_INVALIDPARAM;
+        }
+
         if (This->primary) {
             WARN("Primary Buffer already created\n");
             IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER8)(This->primary));
@@ -383,6 +393,26 @@
         }
     } else {
         IDirectSoundBufferImpl * dsb;
+
+        if (dsbd->lpwfxFormat == NULL) {
+            WARN("invalid parameter: dsbd->lpwfxFormat can't be NULL for "
+                 "secondary buffer\n");
+            return DSERR_INVALIDPARAM;
+        }
+
+        TRACE("(formattag=0x%04x,chans=%d,samplerate=%ld,"
+              "bytespersec=%ld,blockalign=%d,bitspersamp=%d,cbSize=%d)\n",
+              dsbd->lpwfxFormat->wFormatTag, dsbd->lpwfxFormat->nChannels,
+              dsbd->lpwfxFormat->nSamplesPerSec,
+              dsbd->lpwfxFormat->nAvgBytesPerSec,
+              dsbd->lpwfxFormat->nBlockAlign,
+              dsbd->lpwfxFormat->wBitsPerSample, dsbd->lpwfxFormat->cbSize);
+
+        if (from8 && (dsbd->dwFlags & DSBCAPS_CTRL3D) && (dsbd->lpwfxFormat->nChannels != 1)) {
+            WARN("invalid parameter: 3D buffer format must be mono\n");
+            return DSERR_INVALIDPARAM;
+        } 
+
         hres = IDirectSoundBufferImpl_Create(This, (IDirectSoundBufferImpl**)&dsb, dsbd);
         if (dsb) {
             hres = SecondaryBufferImpl_Create(dsb, (SecondaryBufferImpl**)ppdsb);
@@ -1073,7 +1103,7 @@
 {
     ICOM_THIS(IDirectSound_IDirectSound,iface);
     TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk);
-    return IDirectSoundImpl_CreateSoundBuffer(This->pds,dsbd,ppdsb,lpunk);
+    return DSOUND_CreateSoundBuffer(This->pds,dsbd,ppdsb,lpunk,FALSE);
 }
 
 static HRESULT WINAPI IDirectSound_IDirectSound_GetCaps(
@@ -1312,7 +1342,7 @@
 {
     ICOM_THIS(IDirectSound8_IDirectSound,iface);
     TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk);
-    return IDirectSoundImpl_CreateSoundBuffer(This->pds,dsbd,ppdsb,lpunk);
+    return DSOUND_CreateSoundBuffer(This->pds,dsbd,ppdsb,lpunk,TRUE);
 }
 
 static HRESULT WINAPI IDirectSound8_IDirectSound_GetCaps(
@@ -1473,7 +1503,7 @@
 {
     ICOM_THIS(IDirectSound8_IDirectSound8,iface);
     TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk);
-    return IDirectSoundImpl_CreateSoundBuffer(This->pds,dsbd,ppdsb,lpunk);
+    return DSOUND_CreateSoundBuffer(This->pds,dsbd,ppdsb,lpunk,TRUE);
 }
 
 static HRESULT WINAPI IDirectSound8_IDirectSound8_GetCaps(
Index: dlls/dsound/tests/ds3d.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/ds3d.c,v
retrieving revision 1.11
diff -u -r1.11 ds3d.c
--- dlls/dsound/tests/ds3d.c	23 Aug 2004 17:50:31 -0000	1.11
+++ dlls/dsound/tests/ds3d.c	24 Aug 2004 23:06:56 -0000
@@ -71,6 +71,47 @@
     return buf;
 }
 
+const char * getDSBCAPS(DWORD xmask) {
+    static struct {
+        DWORD   mask;
+        char    *name;
+    } flags[] = {
+#define FE(x) { x, #x },
+        FE(DSBCAPS_PRIMARYBUFFER)
+        FE(DSBCAPS_STATIC)
+        FE(DSBCAPS_LOCHARDWARE)
+        FE(DSBCAPS_LOCSOFTWARE)
+        FE(DSBCAPS_CTRL3D)
+        FE(DSBCAPS_CTRLFREQUENCY)
+        FE(DSBCAPS_CTRLPAN)
+        FE(DSBCAPS_CTRLVOLUME)
+        FE(DSBCAPS_CTRLPOSITIONNOTIFY)
+        FE(DSBCAPS_CTRLALL)
+        FE(DSBCAPS_STICKYFOCUS)
+        FE(DSBCAPS_GLOBALFOCUS)
+        FE(DSBCAPS_GETCURRENTPOSITION2)
+        FE(DSBCAPS_MUTE3DATMAXDISTANCE)
+#undef FE
+    };
+    static char buffer[512];
+    int i;
+    BOOL first = TRUE;
+
+    buffer[0] = 0;
+
+    for (i=0;i<sizeof(flags)/sizeof(flags[0]);i++) {
+        if ((flags[i].mask & xmask) == flags[i].mask) {
+            if (first)
+                first = FALSE;
+            else
+                strcat(buffer, "|");
+            strcat(buffer, flags[i].name);
+        }
+    }
+
+    return buffer;
+}
+
 HWND get_hwnd()
 {
     HWND hwnd=GetForegroundWindow();
@@ -616,14 +657,15 @@
     else
         bufdesc.dwFlags|=(DSBCAPS_CTRLVOLUME|DSBCAPS_CTRLPAN);
     rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
-    ok(rc==DS_OK && primary!=NULL,"IDirectSound_CreateSoundBuffer() failed "
-       "to create a %sprimary buffer: %s\n",has_3d?"3D ":"",
+    ok(rc==DS_OK && primary!=NULL,"IDirectSound_CreateSoundBuffer() "
+       "failed to create a %sprimary buffer: %s\n",has_3d?"3D ":"",
         DXGetErrorString8(rc));
 
     if (rc==DS_OK && primary!=NULL) {
         if (has_listener) {
             rc=IDirectSoundBuffer_QueryInterface(primary,
-                &IID_IDirectSound3DListener,(void **)&listener);
+                                                 &IID_IDirectSound3DListener,
+                                                 (void **)&listener);
             ok(rc==DS_OK && listener!=NULL,
                "IDirectSoundBuffer_QueryInterface() failed to get a 3D "
                "listener: %s\n",DXGetErrorString8(rc));
@@ -636,14 +678,16 @@
                 /* DSOUND: Error: Invalid buffer */
                 rc=IDirectSound3DListener_GetAllParameters(listener,0);
                 ok(rc==DSERR_INVALIDPARAM,
-                   "IDirectSound3dListener_GetAllParameters() failed: %s\n",
+                   "IDirectSound3dListener_GetAllParameters() should have "
+                   "returned DSERR_INVALIDPARAM, returned: %s\n",
                    DXGetErrorString8(rc));
 
                 /* DSOUND: Error: Invalid buffer */
                 rc=IDirectSound3DListener_GetAllParameters(listener,
                                                            &listener_param);
                 ok(rc==DSERR_INVALIDPARAM,
-                   "IDirectSound3dListener_GetAllParameters() failed: %s\n",
+                   "IDirectSound3dListener_GetAllParameters() should have "
+                   "returned DSERR_INVALIDPARAM, returned: %s\n",
                    DXGetErrorString8(rc));
 
                 listener_param.dwSize=sizeof(listener_param);
@@ -681,11 +725,16 @@
         }
         rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
         ok(rc==DS_OK && secondary!=NULL,"IDirectSound_CreateSoundBuffer() "
-           "failed to create a 3D secondary buffer: %s\n",
-           DXGetErrorString8(rc));
+           "failed to create a %s%ssecondary buffer %s%s%s%sat %ldx%dx%d (%s): %s\n",
+           has_3dbuffer?"3D ":"", has_duplicate?"duplicated ":"",
+           listener!=NULL||move_sound?"with ":"", move_listener?"moving ":"",
+           listener!=NULL?"listener ":"",
+           listener&&move_sound?"and moving sound ":move_sound?
+           "moving sound ":"",
+           wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
+           getDSBCAPS(bufdesc.dwFlags),DXGetErrorString8(rc));
         if (rc==DS_OK && secondary!=NULL) {
-            if (!has_3d)
-            {
+            if (!has_3d) {
                 DWORD refpan,pan;
                 LONG refvol,vol;
 
@@ -749,24 +798,25 @@
 
                 /* DSOUND: Error: Invalid source buffer */
                 rc=IDirectSound_DuplicateSoundBuffer(dso,0,0);
-                ok(rc==DSERR_INVALIDPARAM,"IDirectSound_DuplicateSoundBuffer() "
-                   "should have returned DSERR_INVALIDPARAM, returned: %s\n",
-                   DXGetErrorString8(rc));
+                ok(rc==DSERR_INVALIDPARAM,
+                   "IDirectSound_DuplicateSoundBuffer() should have returned "
+                   "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));
 
                 /* DSOUND: Error: Invalid dest buffer */
                 rc=IDirectSound_DuplicateSoundBuffer(dso,secondary,0);
-                ok(rc==DSERR_INVALIDPARAM,"IDirectSound_DuplicateSoundBuffer() "
-                   "should have returned DSERR_INVALIDPARAM, returned: %s\n",
-                   DXGetErrorString8(rc));
+                ok(rc==DSERR_INVALIDPARAM,
+                   "IDirectSound_DuplicateSoundBuffer() should have returned "
+                   "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));
 
                 /* DSOUND: Error: Invalid source buffer */
                 rc=IDirectSound_DuplicateSoundBuffer(dso,0,&duplicated);
-                ok(rc==DSERR_INVALIDPARAM,"IDirectSound_DuplicateSoundBuffer() "
-                  "should have returned DSERR_INVALIDPARAM, returned: %s\n",
-                   DXGetErrorString8(rc));
+                ok(rc==DSERR_INVALIDPARAM,
+                  "IDirectSound_DuplicateSoundBuffer() should have returned "
+                  "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));
 
                 duplicated=NULL;
-                rc=IDirectSound_DuplicateSoundBuffer(dso,secondary,&duplicated);
+                rc=IDirectSound_DuplicateSoundBuffer(dso,secondary,
+                                                     &duplicated);
                 ok(rc==DS_OK && duplicated!=NULL,
                    "IDirectSound_DuplicateSoundBuffer() failed to duplicate "
                    "a secondary buffer: %s\n",DXGetErrorString8(rc));
Index: dlls/dsound/tests/ds3d8.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/ds3d8.c,v
retrieving revision 1.5
diff -u -r1.5 ds3d8.c
--- dlls/dsound/tests/ds3d8.c	23 Aug 2004 17:50:31 -0000	1.5
+++ dlls/dsound/tests/ds3d8.c	24 Aug 2004 23:06:56 -0000
@@ -577,14 +577,16 @@
                 /* DSOUND: Error: Invalid buffer */
                 rc=IDirectSound3DListener_GetAllParameters(listener,0);
                 ok(rc==DSERR_INVALIDPARAM,
-                   "IDirectSound3dListener_GetAllParameters() failed: %s\n",
+                   "IDirectSound3dListener_GetAllParameters() should have "
+                   "returned DSERR_INVALIDPARAM, returned: %s\n",
                    DXGetErrorString8(rc));
 
                 /* DSOUND: Error: Invalid buffer */
                 rc=IDirectSound3DListener_GetAllParameters(listener,
                                                            &listener_param);
                 ok(rc==DSERR_INVALIDPARAM,
-                   "IDirectSound3dListener_GetAllParameters() failed: %s\n",
+                   "IDirectSound3dListener_GetAllParameters() should have "
+                   "returned DSERR_INVALIDPARAM, returned: %s\n",
                    DXGetErrorString8(rc));
 
                 listener_param.dwSize=sizeof(listener_param);
@@ -605,10 +607,22 @@
         if (has_3d)
             bufdesc.dwFlags|=DSBCAPS_CTRL3D;
         else
-            bufdesc.dwFlags|=(DSBCAPS_CTRLFREQUENCY|DSBCAPS_CTRLVOLUME|
-                              DSBCAPS_CTRLPAN);
+            bufdesc.dwFlags|=
+                (DSBCAPS_CTRLFREQUENCY|DSBCAPS_CTRLVOLUME|DSBCAPS_CTRLPAN);
         bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000;
         bufdesc.lpwfxFormat=&wfx;
+        if (has_3d) {
+            /* a stereo 3D buffer should fail */
+            rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+            ok(rc==DSERR_INVALIDPARAM,
+               "IDirectSound8_CreateSoundBuffer(secondary) should have "
+               "returned DSERR_INVALIDPARAM, returned %s\n",
+               DXGetErrorString8(rc));
+            if (secondary)
+                ref=IDirectSoundBuffer_Release(secondary);
+            init_format(&wfx,WAVE_FORMAT_PCM,22050,16,1);
+        }
+
         if (winetest_interactive) {
             trace("  Testing a %s%ssecondary buffer %s%s%s%sat %ldx%dx%d\n",
                   has_3dbuffer?"3D ":"",
@@ -622,12 +636,18 @@
         }
         rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
         ok(rc==DS_OK && secondary!=NULL,"IDirectSound8_CreateSoundBuffer() "
-           "failed to create a 3D secondary buffer: %s\n",
-           DXGetErrorString8(rc));
+           "failed to create a %s%ssecondary buffer %s%s%s%sat %ldx%dx%d (%s): %s\n",
+           has_3dbuffer?"3D ":"", has_duplicate?"duplicated ":"",
+           listener!=NULL||move_sound?"with ":"", move_listener?"moving ":"",
+           listener!=NULL?"listener ":"",
+           listener&&move_sound?"and moving sound ":move_sound?
+           "moving sound ":"",
+           wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
+           getDSBCAPS(bufdesc.dwFlags),DXGetErrorString8(rc));
         if (rc==DS_OK && secondary!=NULL) {
-            if (!has_3d)
-            {
-                LONG refvol,refpan,vol,pan;
+            if (!has_3d) {
+                DWORD refpan,pan;
+                LONG refvol,vol;
 
                 /* Check the initial secondary buffer's volume and pan */
                 rc=IDirectSoundBuffer_GetVolume(secondary,&vol);
Index: dlls/dsound/tests/dsound.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/dsound.c,v
retrieving revision 1.37
diff -u -r1.37 dsound.c
--- dlls/dsound/tests/dsound.c	23 Aug 2004 17:50:31 -0000	1.37
+++ dlls/dsound/tests/dsound.c	24 Aug 2004 23:06:57 -0000
@@ -339,6 +339,7 @@
     LPDIRECTSOUNDBUFFER primary=NULL,second=NULL,third=NULL;
     DSBUFFERDESC bufdesc;
     DSCAPS dscaps;
+    WAVEFORMATEX wfx;
     int ref;
 
     /* Create the DirectSound object */
@@ -395,6 +396,18 @@
     ZeroMemory(&bufdesc, sizeof(bufdesc));
     bufdesc.dwSize=sizeof(bufdesc);
     bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME;
+    bufdesc.lpwfxFormat = &wfx;
+    init_format(&wfx,WAVE_FORMAT_PCM,11025,8,2);
+    rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
+    ok(rc==DSERR_INVALIDPARAM,"IDirectSound_CreateSoundBuffer() should have "
+       "returned DSERR_INVALIDPARAM, returned: %s\n", DXGetErrorString8(rc));
+    if (rc==DS_OK && primary!=NULL)
+        IDirectSoundBuffer_Release(primary);
+
+    primary=NULL;
+    ZeroMemory(&bufdesc, sizeof(bufdesc));
+    bufdesc.dwSize=sizeof(bufdesc);
+    bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME;
     rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
     ok(rc==DS_OK && primary!=NULL,
        "IDirectSound_CreateSoundBuffer() failed to create a primary buffer: "
@@ -640,6 +653,18 @@
         for (f=0;f<NB_FORMATS;f++) {
             init_format(&wfx,WAVE_FORMAT_PCM,formats[f][0],formats[f][1],
                         formats[f][2]);
+            secondary=NULL;
+            ZeroMemory(&bufdesc, sizeof(bufdesc));
+            bufdesc.dwSize=sizeof(bufdesc);
+            bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2;
+            bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000;
+            rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+            ok(rc==DSERR_INVALIDPARAM,"IDirectSound_CreateSoundBuffer() "
+               "should have returned DSERR_INVALIDPARAM, returned: %s\n",
+               DXGetErrorString8(rc));
+            if (rc==DS_OK && secondary!=NULL)
+                IDirectSoundBuffer_Release(secondary);
+
             secondary=NULL;
             ZeroMemory(&bufdesc, sizeof(bufdesc));
             bufdesc.dwSize=sizeof(bufdesc);
Index: dlls/dsound/tests/dsound8.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/dsound8.c,v
retrieving revision 1.5
diff -u -r1.5 dsound8.c
--- dlls/dsound/tests/dsound8.c	23 Aug 2004 17:50:31 -0000	1.5
+++ dlls/dsound/tests/dsound8.c	24 Aug 2004 23:06:58 -0000
@@ -358,6 +358,7 @@
     LPDIRECTSOUNDBUFFER primary=NULL,second=NULL,third=NULL;
     DSBUFFERDESC bufdesc;
     DSCAPS dscaps;
+    WAVEFORMATEX wfx;
     int ref;
 
     /* Create the DirectSound object */
@@ -415,6 +416,18 @@
     ZeroMemory(&bufdesc, sizeof(bufdesc));
     bufdesc.dwSize=sizeof(bufdesc);
     bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME;
+    bufdesc.lpwfxFormat = &wfx;
+    init_format(&wfx,WAVE_FORMAT_PCM,11025,8,2);
+    rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
+    ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_CreateSoundBuffer() should have "
+       "returned DSERR_INVALIDPARAM, returned: %s\n", DXGetErrorString8(rc));
+    if (rc==DS_OK && primary!=NULL)
+        IDirectSoundBuffer_Release(primary);
+
+    primary=NULL;
+    ZeroMemory(&bufdesc, sizeof(bufdesc));
+    bufdesc.dwSize=sizeof(bufdesc);
+    bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME;
     rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
     ok(rc==DS_OK && primary!=NULL,
        "IDirectSound8_CreateSoundBuffer() failed to create a primary buffer: "
@@ -659,6 +672,18 @@
         for (f=0;f<NB_FORMATS;f++) {
             init_format(&wfx,WAVE_FORMAT_PCM,formats[f][0],formats[f][1],
                         formats[f][2]);
+            secondary=NULL;
+            ZeroMemory(&bufdesc, sizeof(bufdesc));
+            bufdesc.dwSize=sizeof(bufdesc);
+            bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2;
+            bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000;
+            rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
+            ok(rc==DSERR_INVALIDPARAM,"IDirectSound8_CreateSoundBuffer() "
+               "should have returned DSERR_INVALIDPARAM, returned: %s\n",
+               DXGetErrorString8(rc));
+            if (rc==DS_OK && secondary!=NULL)
+                IDirectSoundBuffer_Release(secondary);
+
             secondary=NULL;
             ZeroMemory(&bufdesc, sizeof(bufdesc));
             bufdesc.dwSize=sizeof(bufdesc);
Index: dlls/dsound/tests/dsound_test.h
===================================================================
RCS file: /home/wine/wine/dlls/dsound/tests/dsound_test.h,v
retrieving revision 1.3
diff -u -r1.3 dsound_test.h
--- dlls/dsound/tests/dsound_test.h	30 Jul 2004 18:42:51 -0000	1.3
+++ dlls/dsound/tests/dsound_test.h	24 Aug 2004 23:06:58 -0000
@@ -60,3 +60,4 @@
 extern void test_buffer8(LPDIRECTSOUND8,LPDIRECTSOUNDBUFFER,
                          BOOL,BOOL,LONG,BOOL,LONG,BOOL,double,BOOL,
                          LPDIRECTSOUND3DLISTENER,BOOL,BOOL);
+extern const char * getDSBCAPS(DWORD xmask);


More information about the wine-patches mailing list