Commit f01b8718 authored by Robert Reif's avatar Robert Reif Committed by Alexandre Julliard

DirectSound8 doesn't accept 3D stereo secondary buffers but

DirectSound does. Added tests.
parent a1a37ce1
...@@ -320,7 +320,19 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer( ...@@ -320,7 +320,19 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer(
LPUNKNOWN lpunk) LPUNKNOWN lpunk)
{ {
ICOM_THIS(IDirectSoundImpl,iface); 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; HRESULT hres = DS_OK;
TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk); TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk);
...@@ -339,7 +351,8 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer( ...@@ -339,7 +351,8 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer(
return DSERR_INVALIDPARAM; 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"); WARN("invalid parameter: dsbd\n");
return DSERR_INVALIDPARAM; return DSERR_INVALIDPARAM;
} }
...@@ -358,16 +371,13 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer( ...@@ -358,16 +371,13 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer(
TRACE("(lpwfxFormat=%p)\n",dsbd->lpwfxFormat); 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->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) { if (This->primary) {
WARN("Primary Buffer already created\n"); WARN("Primary Buffer already created\n");
IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER8)(This->primary)); IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER8)(This->primary));
...@@ -383,6 +393,26 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer( ...@@ -383,6 +393,26 @@ static HRESULT WINAPI IDirectSoundImpl_CreateSoundBuffer(
} }
} else { } else {
IDirectSoundBufferImpl * dsb; 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); hres = IDirectSoundBufferImpl_Create(This, (IDirectSoundBufferImpl**)&dsb, dsbd);
if (dsb) { if (dsb) {
hres = SecondaryBufferImpl_Create(dsb, (SecondaryBufferImpl**)ppdsb); hres = SecondaryBufferImpl_Create(dsb, (SecondaryBufferImpl**)ppdsb);
...@@ -1073,7 +1103,7 @@ static HRESULT WINAPI IDirectSound_IDirectSound_CreateSoundBuffer( ...@@ -1073,7 +1103,7 @@ static HRESULT WINAPI IDirectSound_IDirectSound_CreateSoundBuffer(
{ {
ICOM_THIS(IDirectSound_IDirectSound,iface); ICOM_THIS(IDirectSound_IDirectSound,iface);
TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk); 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( static HRESULT WINAPI IDirectSound_IDirectSound_GetCaps(
...@@ -1312,7 +1342,7 @@ static HRESULT WINAPI IDirectSound8_IDirectSound_CreateSoundBuffer( ...@@ -1312,7 +1342,7 @@ static HRESULT WINAPI IDirectSound8_IDirectSound_CreateSoundBuffer(
{ {
ICOM_THIS(IDirectSound8_IDirectSound,iface); ICOM_THIS(IDirectSound8_IDirectSound,iface);
TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk); 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( static HRESULT WINAPI IDirectSound8_IDirectSound_GetCaps(
...@@ -1473,7 +1503,7 @@ static HRESULT WINAPI IDirectSound8_IDirectSound8_CreateSoundBuffer( ...@@ -1473,7 +1503,7 @@ static HRESULT WINAPI IDirectSound8_IDirectSound8_CreateSoundBuffer(
{ {
ICOM_THIS(IDirectSound8_IDirectSound8,iface); ICOM_THIS(IDirectSound8_IDirectSound8,iface);
TRACE("(%p,%p,%p,%p)\n",This,dsbd,ppdsb,lpunk); 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( static HRESULT WINAPI IDirectSound8_IDirectSound8_GetCaps(
......
...@@ -71,6 +71,47 @@ char* wave_generate_la(WAVEFORMATEX* wfx, double duration, DWORD* size) ...@@ -71,6 +71,47 @@ char* wave_generate_la(WAVEFORMATEX* wfx, double duration, DWORD* size)
return buf; 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 get_hwnd()
{ {
HWND hwnd=GetForegroundWindow(); HWND hwnd=GetForegroundWindow();
...@@ -616,14 +657,15 @@ static HRESULT test_secondary(LPGUID lpGuid, int play, ...@@ -616,14 +657,15 @@ static HRESULT test_secondary(LPGUID lpGuid, int play,
else else
bufdesc.dwFlags|=(DSBCAPS_CTRLVOLUME|DSBCAPS_CTRLPAN); bufdesc.dwFlags|=(DSBCAPS_CTRLVOLUME|DSBCAPS_CTRLPAN);
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL); rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
ok(rc==DS_OK && primary!=NULL,"IDirectSound_CreateSoundBuffer() failed " ok(rc==DS_OK && primary!=NULL,"IDirectSound_CreateSoundBuffer() "
"to create a %sprimary buffer: %s\n",has_3d?"3D ":"", "failed to create a %sprimary buffer: %s\n",has_3d?"3D ":"",
DXGetErrorString8(rc)); DXGetErrorString8(rc));
if (rc==DS_OK && primary!=NULL) { if (rc==DS_OK && primary!=NULL) {
if (has_listener) { if (has_listener) {
rc=IDirectSoundBuffer_QueryInterface(primary, rc=IDirectSoundBuffer_QueryInterface(primary,
&IID_IDirectSound3DListener,(void **)&listener); &IID_IDirectSound3DListener,
(void **)&listener);
ok(rc==DS_OK && listener!=NULL, ok(rc==DS_OK && listener!=NULL,
"IDirectSoundBuffer_QueryInterface() failed to get a 3D " "IDirectSoundBuffer_QueryInterface() failed to get a 3D "
"listener: %s\n",DXGetErrorString8(rc)); "listener: %s\n",DXGetErrorString8(rc));
...@@ -636,14 +678,16 @@ static HRESULT test_secondary(LPGUID lpGuid, int play, ...@@ -636,14 +678,16 @@ static HRESULT test_secondary(LPGUID lpGuid, int play,
/* DSOUND: Error: Invalid buffer */ /* DSOUND: Error: Invalid buffer */
rc=IDirectSound3DListener_GetAllParameters(listener,0); rc=IDirectSound3DListener_GetAllParameters(listener,0);
ok(rc==DSERR_INVALIDPARAM, ok(rc==DSERR_INVALIDPARAM,
"IDirectSound3dListener_GetAllParameters() failed: %s\n", "IDirectSound3dListener_GetAllParameters() should have "
"returned DSERR_INVALIDPARAM, returned: %s\n",
DXGetErrorString8(rc)); DXGetErrorString8(rc));
/* DSOUND: Error: Invalid buffer */ /* DSOUND: Error: Invalid buffer */
rc=IDirectSound3DListener_GetAllParameters(listener, rc=IDirectSound3DListener_GetAllParameters(listener,
&listener_param); &listener_param);
ok(rc==DSERR_INVALIDPARAM, ok(rc==DSERR_INVALIDPARAM,
"IDirectSound3dListener_GetAllParameters() failed: %s\n", "IDirectSound3dListener_GetAllParameters() should have "
"returned DSERR_INVALIDPARAM, returned: %s\n",
DXGetErrorString8(rc)); DXGetErrorString8(rc));
listener_param.dwSize=sizeof(listener_param); listener_param.dwSize=sizeof(listener_param);
...@@ -681,11 +725,16 @@ static HRESULT test_secondary(LPGUID lpGuid, int play, ...@@ -681,11 +725,16 @@ static HRESULT test_secondary(LPGUID lpGuid, int play,
} }
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL); rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DS_OK && secondary!=NULL,"IDirectSound_CreateSoundBuffer() " ok(rc==DS_OK && secondary!=NULL,"IDirectSound_CreateSoundBuffer() "
"failed to create a 3D secondary buffer: %s\n", "failed to create a %s%ssecondary buffer %s%s%s%sat %ldx%dx%d (%s): %s\n",
DXGetErrorString8(rc)); 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 (rc==DS_OK && secondary!=NULL) {
if (!has_3d) if (!has_3d) {
{
DWORD refpan,pan; DWORD refpan,pan;
LONG refvol,vol; LONG refvol,vol;
...@@ -749,24 +798,25 @@ static HRESULT test_secondary(LPGUID lpGuid, int play, ...@@ -749,24 +798,25 @@ static HRESULT test_secondary(LPGUID lpGuid, int play,
/* DSOUND: Error: Invalid source buffer */ /* DSOUND: Error: Invalid source buffer */
rc=IDirectSound_DuplicateSoundBuffer(dso,0,0); rc=IDirectSound_DuplicateSoundBuffer(dso,0,0);
ok(rc==DSERR_INVALIDPARAM,"IDirectSound_DuplicateSoundBuffer() " ok(rc==DSERR_INVALIDPARAM,
"should have returned DSERR_INVALIDPARAM, returned: %s\n", "IDirectSound_DuplicateSoundBuffer() should have returned "
DXGetErrorString8(rc)); "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));
/* DSOUND: Error: Invalid dest buffer */ /* DSOUND: Error: Invalid dest buffer */
rc=IDirectSound_DuplicateSoundBuffer(dso,secondary,0); rc=IDirectSound_DuplicateSoundBuffer(dso,secondary,0);
ok(rc==DSERR_INVALIDPARAM,"IDirectSound_DuplicateSoundBuffer() " ok(rc==DSERR_INVALIDPARAM,
"should have returned DSERR_INVALIDPARAM, returned: %s\n", "IDirectSound_DuplicateSoundBuffer() should have returned "
DXGetErrorString8(rc)); "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));
/* DSOUND: Error: Invalid source buffer */ /* DSOUND: Error: Invalid source buffer */
rc=IDirectSound_DuplicateSoundBuffer(dso,0,&duplicated); rc=IDirectSound_DuplicateSoundBuffer(dso,0,&duplicated);
ok(rc==DSERR_INVALIDPARAM,"IDirectSound_DuplicateSoundBuffer() " ok(rc==DSERR_INVALIDPARAM,
"should have returned DSERR_INVALIDPARAM, returned: %s\n", "IDirectSound_DuplicateSoundBuffer() should have returned "
DXGetErrorString8(rc)); "DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc));
duplicated=NULL; duplicated=NULL;
rc=IDirectSound_DuplicateSoundBuffer(dso,secondary,&duplicated); rc=IDirectSound_DuplicateSoundBuffer(dso,secondary,
&duplicated);
ok(rc==DS_OK && duplicated!=NULL, ok(rc==DS_OK && duplicated!=NULL,
"IDirectSound_DuplicateSoundBuffer() failed to duplicate " "IDirectSound_DuplicateSoundBuffer() failed to duplicate "
"a secondary buffer: %s\n",DXGetErrorString8(rc)); "a secondary buffer: %s\n",DXGetErrorString8(rc));
......
...@@ -577,14 +577,16 @@ static HRESULT test_secondary8(LPGUID lpGuid, int play, ...@@ -577,14 +577,16 @@ static HRESULT test_secondary8(LPGUID lpGuid, int play,
/* DSOUND: Error: Invalid buffer */ /* DSOUND: Error: Invalid buffer */
rc=IDirectSound3DListener_GetAllParameters(listener,0); rc=IDirectSound3DListener_GetAllParameters(listener,0);
ok(rc==DSERR_INVALIDPARAM, ok(rc==DSERR_INVALIDPARAM,
"IDirectSound3dListener_GetAllParameters() failed: %s\n", "IDirectSound3dListener_GetAllParameters() should have "
"returned DSERR_INVALIDPARAM, returned: %s\n",
DXGetErrorString8(rc)); DXGetErrorString8(rc));
/* DSOUND: Error: Invalid buffer */ /* DSOUND: Error: Invalid buffer */
rc=IDirectSound3DListener_GetAllParameters(listener, rc=IDirectSound3DListener_GetAllParameters(listener,
&listener_param); &listener_param);
ok(rc==DSERR_INVALIDPARAM, ok(rc==DSERR_INVALIDPARAM,
"IDirectSound3dListener_GetAllParameters() failed: %s\n", "IDirectSound3dListener_GetAllParameters() should have "
"returned DSERR_INVALIDPARAM, returned: %s\n",
DXGetErrorString8(rc)); DXGetErrorString8(rc));
listener_param.dwSize=sizeof(listener_param); listener_param.dwSize=sizeof(listener_param);
...@@ -605,10 +607,22 @@ static HRESULT test_secondary8(LPGUID lpGuid, int play, ...@@ -605,10 +607,22 @@ static HRESULT test_secondary8(LPGUID lpGuid, int play,
if (has_3d) if (has_3d)
bufdesc.dwFlags|=DSBCAPS_CTRL3D; bufdesc.dwFlags|=DSBCAPS_CTRL3D;
else else
bufdesc.dwFlags|=(DSBCAPS_CTRLFREQUENCY|DSBCAPS_CTRLVOLUME| bufdesc.dwFlags|=
DSBCAPS_CTRLPAN); (DSBCAPS_CTRLFREQUENCY|DSBCAPS_CTRLVOLUME|DSBCAPS_CTRLPAN);
bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000; bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000;
bufdesc.lpwfxFormat=&wfx; 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) { if (winetest_interactive) {
trace(" Testing a %s%ssecondary buffer %s%s%s%sat %ldx%dx%d\n", trace(" Testing a %s%ssecondary buffer %s%s%s%sat %ldx%dx%d\n",
has_3dbuffer?"3D ":"", has_3dbuffer?"3D ":"",
...@@ -622,12 +636,18 @@ static HRESULT test_secondary8(LPGUID lpGuid, int play, ...@@ -622,12 +636,18 @@ static HRESULT test_secondary8(LPGUID lpGuid, int play,
} }
rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL); rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
ok(rc==DS_OK && secondary!=NULL,"IDirectSound8_CreateSoundBuffer() " ok(rc==DS_OK && secondary!=NULL,"IDirectSound8_CreateSoundBuffer() "
"failed to create a 3D secondary buffer: %s\n", "failed to create a %s%ssecondary buffer %s%s%s%sat %ldx%dx%d (%s): %s\n",
DXGetErrorString8(rc)); 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 (rc==DS_OK && secondary!=NULL) {
if (!has_3d) if (!has_3d) {
{ DWORD refpan,pan;
LONG refvol,refpan,vol,pan; LONG refvol,vol;
/* Check the initial secondary buffer's volume and pan */ /* Check the initial secondary buffer's volume and pan */
rc=IDirectSoundBuffer_GetVolume(secondary,&vol); rc=IDirectSoundBuffer_GetVolume(secondary,&vol);
......
...@@ -339,6 +339,7 @@ static HRESULT test_primary(LPGUID lpGuid) ...@@ -339,6 +339,7 @@ static HRESULT test_primary(LPGUID lpGuid)
LPDIRECTSOUNDBUFFER primary=NULL,second=NULL,third=NULL; LPDIRECTSOUNDBUFFER primary=NULL,second=NULL,third=NULL;
DSBUFFERDESC bufdesc; DSBUFFERDESC bufdesc;
DSCAPS dscaps; DSCAPS dscaps;
WAVEFORMATEX wfx;
int ref; int ref;
/* Create the DirectSound object */ /* Create the DirectSound object */
...@@ -395,6 +396,18 @@ static HRESULT test_primary(LPGUID lpGuid) ...@@ -395,6 +396,18 @@ static HRESULT test_primary(LPGUID lpGuid)
ZeroMemory(&bufdesc, sizeof(bufdesc)); ZeroMemory(&bufdesc, sizeof(bufdesc));
bufdesc.dwSize=sizeof(bufdesc); bufdesc.dwSize=sizeof(bufdesc);
bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME; 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); rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
ok(rc==DS_OK && primary!=NULL, ok(rc==DS_OK && primary!=NULL,
"IDirectSound_CreateSoundBuffer() failed to create a primary buffer: " "IDirectSound_CreateSoundBuffer() failed to create a primary buffer: "
...@@ -645,6 +658,18 @@ static HRESULT test_secondary(LPGUID lpGuid) ...@@ -645,6 +658,18 @@ static HRESULT test_secondary(LPGUID lpGuid)
bufdesc.dwSize=sizeof(bufdesc); bufdesc.dwSize=sizeof(bufdesc);
bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2; bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2;
bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000; 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);
bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2;
bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000;
bufdesc.lpwfxFormat=&wfx; bufdesc.lpwfxFormat=&wfx;
if (winetest_interactive) { if (winetest_interactive) {
trace(" Testing a secondary buffer at %ldx%dx%d\n", trace(" Testing a secondary buffer at %ldx%dx%d\n",
......
...@@ -358,6 +358,7 @@ static HRESULT test_primary8(LPGUID lpGuid) ...@@ -358,6 +358,7 @@ static HRESULT test_primary8(LPGUID lpGuid)
LPDIRECTSOUNDBUFFER primary=NULL,second=NULL,third=NULL; LPDIRECTSOUNDBUFFER primary=NULL,second=NULL,third=NULL;
DSBUFFERDESC bufdesc; DSBUFFERDESC bufdesc;
DSCAPS dscaps; DSCAPS dscaps;
WAVEFORMATEX wfx;
int ref; int ref;
/* Create the DirectSound object */ /* Create the DirectSound object */
...@@ -415,6 +416,18 @@ static HRESULT test_primary8(LPGUID lpGuid) ...@@ -415,6 +416,18 @@ static HRESULT test_primary8(LPGUID lpGuid)
ZeroMemory(&bufdesc, sizeof(bufdesc)); ZeroMemory(&bufdesc, sizeof(bufdesc));
bufdesc.dwSize=sizeof(bufdesc); bufdesc.dwSize=sizeof(bufdesc);
bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_CTRLVOLUME; 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); rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&primary,NULL);
ok(rc==DS_OK && primary!=NULL, ok(rc==DS_OK && primary!=NULL,
"IDirectSound8_CreateSoundBuffer() failed to create a primary buffer: " "IDirectSound8_CreateSoundBuffer() failed to create a primary buffer: "
...@@ -664,6 +677,18 @@ static HRESULT test_secondary8(LPGUID lpGuid) ...@@ -664,6 +677,18 @@ static HRESULT test_secondary8(LPGUID lpGuid)
bufdesc.dwSize=sizeof(bufdesc); bufdesc.dwSize=sizeof(bufdesc);
bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2; bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2;
bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000; 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);
bufdesc.dwFlags=DSBCAPS_GETCURRENTPOSITION2;
bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec*BUFFER_LEN/1000;
bufdesc.lpwfxFormat=&wfx; bufdesc.lpwfxFormat=&wfx;
if (winetest_interactive) { if (winetest_interactive) {
trace(" Testing a secondary buffer at %ldx%dx%d\n", trace(" Testing a secondary buffer at %ldx%dx%d\n",
......
...@@ -60,3 +60,4 @@ extern void test_buffer(LPDIRECTSOUND,LPDIRECTSOUNDBUFFER, ...@@ -60,3 +60,4 @@ extern void test_buffer(LPDIRECTSOUND,LPDIRECTSOUNDBUFFER,
extern void test_buffer8(LPDIRECTSOUND8,LPDIRECTSOUNDBUFFER, extern void test_buffer8(LPDIRECTSOUND8,LPDIRECTSOUNDBUFFER,
BOOL,BOOL,LONG,BOOL,LONG,BOOL,double,BOOL, BOOL,BOOL,LONG,BOOL,LONG,BOOL,double,BOOL,
LPDIRECTSOUND3DLISTENER,BOOL,BOOL); LPDIRECTSOUND3DLISTENER,BOOL,BOOL);
extern const char * getDSBCAPS(DWORD xmask);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment