From a542770c55b3e6d774efb979655ad13c44c6d04f Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Fri, 13 Dec 2002 20:27:36 +0000 Subject: [PATCH] Extend the test by creating a PrimaryBuffer object and perform a few basic tests such as querying its characteristics and changing its format. Changing the format requires that we call SetcooperativeLevel first, which means we need an hwnd. So the test must now link with user32.dll. --- dlls/dsound/tests/Makefile.in | 2 +- dlls/dsound/tests/dsound.c | 124 ++++++++++++++++++++++++++++------ 2 files changed, 106 insertions(+), 20 deletions(-) diff --git a/dlls/dsound/tests/Makefile.in b/dlls/dsound/tests/Makefile.in index 53543005e3c..f919d9d39a2 100644 --- a/dlls/dsound/tests/Makefile.in +++ b/dlls/dsound/tests/Makefile.in @@ -3,7 +3,7 @@ TOPOBJDIR = ../../.. SRCDIR = @srcdir@ VPATH = @srcdir@ TESTDLL = dsound.dll -IMPORTS = dsound kernel32 +IMPORTS = dsound user32 kernel32 CTESTS = \ dsound.c diff --git a/dlls/dsound/tests/dsound.c b/dlls/dsound/tests/dsound.c index 10207856ed7..37fe963a8ee 100644 --- a/dlls/dsound/tests/dsound.c +++ b/dlls/dsound/tests/dsound.c @@ -27,29 +27,115 @@ BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription, LPCSTR lpcstrModule, LPVOID lpContext) { HRESULT rc; - LPDIRECTSOUND dso; + LPDIRECTSOUND dso=NULL; + LPDIRECTSOUNDBUFFER dsbo=NULL; + DSCAPS dscaps; + DSBCAPS dsbcaps; + DSBUFFERDESC bufdesc; + WAVEFORMATEX wfx,wfx2; + DWORD size,status,freq; - winetest_trace("Testing %s - %s\n",lpcstrDescription,lpcstrModule); + trace("Testing %s - %s\n",lpcstrDescription,lpcstrModule); rc=DirectSoundCreate(lpGuid,&dso,NULL); - ok(rc==DS_OK,"DirectSoundCreate failed: %lx\n",rc); + ok(rc==DS_OK,"DirectSoundCreate failed: 0x%lx\n",rc); + if (rc!=DS_OK) + goto EXIT; + + dscaps.dwSize=0; + rc=IDirectSound_GetCaps(dso,&dscaps); + ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: 0x%lx\n",rc); + + dscaps.dwSize=sizeof(dscaps); + rc=IDirectSound_GetCaps(dso,&dscaps); + ok(rc==DS_OK,"GetCaps failed: 0x%lx\n",rc); if (rc==DS_OK) { - DSCAPS caps; - - caps.dwSize=0; - rc=IDirectSound_GetCaps(dso,&caps); - ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: %lx\n",rc); - - caps.dwSize=sizeof(caps); - rc=IDirectSound_GetCaps(dso,&caps); - ok(rc==DS_OK,"GetCaps failed: %lx\n",rc); - if (rc==DS_OK) { - winetest_trace(" flags=%lx secondary min=%ld max=%ld\n", - caps.dwFlags,caps.dwMinSecondarySampleRate, - caps.dwMaxSecondarySampleRate); - } - - IDirectSound_Release(dso); + trace(" DirectSound Caps: flags=0x%08lx secondary min=%ld max=%ld\n", + dscaps.dwFlags,dscaps.dwMinSecondarySampleRate, + dscaps.dwMaxSecondarySampleRate); } + + /* Testing the primary buffers */ + rc=IDirectSound_SetCooperativeLevel(dso,GetDesktopWindow(),DSSCL_PRIORITY); + ok(rc==DS_OK,"SetCooperativeLevel failed: 0x%lx\n",rc); + if (rc!=DS_OK) + goto EXIT; + + bufdesc.dwSize=sizeof(bufdesc); + bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER; + bufdesc.dwBufferBytes=0; + bufdesc.dwReserved=0; + bufdesc.lpwfxFormat=NULL; + rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&dsbo,NULL); + ok(rc==DS_OK,"CreateSoundBuffer failed to create a primary buffer 0x%lx\n",rc); + if (rc!=DS_OK) + goto EXIT; + + dsbcaps.dwSize=0; + rc=IDirectSoundBuffer_GetCaps(dsbo,&dsbcaps); + ok(rc==DSERR_INVALIDPARAM,"GetCaps should have failed: 0x%lx\n",rc); + + dsbcaps.dwSize=sizeof(dsbcaps); + rc=IDirectSoundBuffer_GetCaps(dsbo,&dsbcaps); + ok(rc==DS_OK,"GetCaps failed: 0x%lx\n",rc); + if (rc==DS_OK) { + trace(" PrimaryBuffer Caps: flags=0x%08lx size=%ld\n",dsbcaps.dwFlags,dsbcaps.dwBufferBytes); + } + + /* Query the format size. Note that it may not match sizeof(wfx) */ + size=0; + rc=IDirectSoundBuffer_GetFormat(dsbo,NULL,0,&size); + ok(rc==DS_OK && size!=0, + "GetFormat should have returned the needed size: rc=0x%lx size=%ld\n", + rc,size); + + rc=IDirectSoundBuffer_GetFormat(dsbo,&wfx,sizeof(wfx),NULL); + ok(rc==DS_OK,"GetFormat failed: 0x%lx\n",rc); + if (rc==DS_OK) { + trace(" tag=0x%04x %ldx%dx%d avg.B/s=%ld align=%d\n", + wfx.wFormatTag,wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels, + wfx.nAvgBytesPerSec,wfx.nBlockAlign); + } + + rc=IDirectSoundBuffer_GetFrequency(dsbo,&freq); + ok(rc==DS_OK || rc==DSERR_CONTROLUNAVAIL,"GetFrequency failed: 0x%lx\n",rc); + if (rc==DS_OK) { + ok(freq==wfx.nSamplesPerSec, + "The frequency returned by GetFrequency %ld does not match the format %ld\n", + freq,wfx.nSamplesPerSec); + } + + rc=IDirectSoundBuffer_GetStatus(dsbo,&status); + ok(rc==DS_OK,"GetStatus failed: 0x%lx\n",rc); + if (rc==DS_OK) { + trace(" status=0x%04lx\n",status); + } + + wfx2.wFormatTag=WAVE_FORMAT_PCM; + wfx2.nChannels=2; + wfx2.wBitsPerSample=16; + wfx2.nSamplesPerSec=11025; + wfx2.nBlockAlign=wfx2.nChannels*wfx2.wBitsPerSample/8; + wfx2.nAvgBytesPerSec=wfx2.nSamplesPerSec*wfx2.nBlockAlign; + wfx2.cbSize=0; + rc=IDirectSoundBuffer_SetFormat(dsbo,&wfx2); + ok(rc==DS_OK,"SetFormat failed: 0x%lx\n",rc); + + rc=IDirectSoundBuffer_GetFormat(dsbo,&wfx,sizeof(wfx),NULL); + ok(rc==DS_OK,"GetFormat failed: 0x%lx\n",rc); + if (rc==DS_OK) { + ok(wfx.wFormatTag==wfx2.wFormatTag && wfx.nChannels==wfx2.nChannels && + wfx.wBitsPerSample==wfx2.wBitsPerSample && wfx.nSamplesPerSec==wfx2.nSamplesPerSec && + wfx.nBlockAlign==wfx2.nBlockAlign && wfx.nAvgBytesPerSec==wfx2.nAvgBytesPerSec, + "SetFormat did not work right: tag=0x%04x %ldx%dx%d avg.B/s=%ld align=%d\n", + wfx.wFormatTag,wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels, + wfx.nAvgBytesPerSec,wfx.nBlockAlign); + } + +EXIT: + if (dsbo!=NULL) + IDirectSoundBuffer_Release(dsbo); + if (dso!=NULL) + IDirectSound_Release(dso); return 1; }