dsound: Add conformance tests for 24/32 bits buffers and waveformatextensible.
This commit is contained in:
parent
2a117a2017
commit
511af0d186
|
@ -30,7 +30,7 @@
|
|||
#include "wine/test.h"
|
||||
#include "dsound.h"
|
||||
#include "dxerr8.h"
|
||||
|
||||
#include "mmreg.h"
|
||||
#include "dsound_test.h"
|
||||
|
||||
#define PI 3.14159265358979323846
|
||||
|
@ -57,7 +57,7 @@ char* wave_generate_la(WAVEFORMATEX* wfx, double duration, DWORD* size)
|
|||
*b++=sample;
|
||||
if (wfx->nChannels==2)
|
||||
*b++=sample;
|
||||
} else {
|
||||
} else if (wfx->wBitsPerSample == 16) {
|
||||
signed short sample=(signed short)((double)32767.5*y-0.5);
|
||||
b[0]=sample & 0xff;
|
||||
b[1]=sample >> 8;
|
||||
|
@ -67,6 +67,32 @@ char* wave_generate_la(WAVEFORMATEX* wfx, double duration, DWORD* size)
|
|||
b[1]=sample >> 8;
|
||||
b+=2;
|
||||
}
|
||||
} else if (wfx->wBitsPerSample == 24) {
|
||||
signed int sample=(signed int)((double)8388607.5*y-0.5);
|
||||
b[0]=sample & 0xff;
|
||||
b[1]=(sample >> 8)&0xff;
|
||||
b[2]=sample >> 16;
|
||||
b+=3;
|
||||
if (wfx->nChannels==2) {
|
||||
b[0]=sample & 0xff;
|
||||
b[1]=(sample >> 8)&0xff;
|
||||
b[2]=sample >> 16;
|
||||
b+=3;
|
||||
}
|
||||
} else if (wfx->wBitsPerSample == 32) {
|
||||
signed int sample=(signed int)((double)2147483647.5*y-0.5);
|
||||
b[0]=sample & 0xff;
|
||||
b[1]=(sample >> 8)&0xff;
|
||||
b[2]=(sample >> 16)&0xff;
|
||||
b[3]=sample >> 24;
|
||||
b+=4;
|
||||
if (wfx->nChannels==2) {
|
||||
b[0]=sample & 0xff;
|
||||
b[1]=(sample >> 8)&0xff;
|
||||
b[2]=(sample >> 16)&0xff;
|
||||
b[3]=sample >> 24;
|
||||
b+=4;
|
||||
}
|
||||
}
|
||||
}
|
||||
return buf;
|
||||
|
@ -330,8 +356,15 @@ void test_buffer(LPDIRECTSOUND dso, LPDIRECTSOUNDBUFFER *dsbo,
|
|||
"returned the needed size: rc=%s size=%d\n",DXGetErrorString8(rc),size);
|
||||
|
||||
rc=IDirectSoundBuffer_GetFormat(*dsbo,&wfx,sizeof(wfx),NULL);
|
||||
ok(rc==DS_OK,"IDirectSoundBuffer_GetFormat() failed: %s\n",
|
||||
DXGetErrorString8(rc));
|
||||
if (wfx.wFormatTag == WAVE_FORMAT_EXTENSIBLE)
|
||||
{
|
||||
WAVEFORMATEXTENSIBLE wfxe;
|
||||
ok(rc == DSERR_INVALIDPARAM, "IDirectSoundBuffer_GetFormat returned: %s\n", DXGetErrorString8(rc));
|
||||
rc=IDirectSoundBuffer_GetFormat(*dsbo,(WAVEFORMATEX*)&wfxe,sizeof(wfxe),NULL);
|
||||
wfx = wfxe.Format;
|
||||
}
|
||||
ok(rc==DS_OK,
|
||||
"IDirectSoundBuffer_GetFormat() failed: %s\n", DXGetErrorString8(rc));
|
||||
if (rc==DS_OK && winetest_debug > 1) {
|
||||
trace(" Format: %s tag=0x%04x %dx%dx%d avg.B/s=%d align=%d\n",
|
||||
is_primary ? "Primary" : "Secondary",
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "wine/test.h"
|
||||
#include "dsound.h"
|
||||
#include "dxerr8.h"
|
||||
|
||||
#include "mmreg.h"
|
||||
#include "dsound_test.h"
|
||||
|
||||
static HRESULT (WINAPI *pDirectSoundEnumerateA)(LPDSENUMCALLBACKA,LPVOID)=NULL;
|
||||
|
@ -218,6 +218,13 @@ void test_buffer8(LPDIRECTSOUND8 dso, LPDIRECTSOUNDBUFFER * dsbo,
|
|||
"returned the needed size: rc=%s size=%d\n",DXGetErrorString8(rc),size);
|
||||
|
||||
rc=IDirectSoundBuffer_GetFormat(*dsbo,&wfx,sizeof(wfx),NULL);
|
||||
if (wfx.wFormatTag == WAVE_FORMAT_EXTENSIBLE)
|
||||
{
|
||||
WAVEFORMATEXTENSIBLE wfxe;
|
||||
ok(rc == DSERR_INVALIDPARAM, "IDirectSoundBuffer_GetFormat returned: %s\n", DXGetErrorString8(rc));
|
||||
rc=IDirectSoundBuffer_GetFormat(*dsbo,(WAVEFORMATEX*)&wfxe,sizeof(wfxe),NULL);
|
||||
wfx = wfxe.Format;
|
||||
}
|
||||
ok(rc==DS_OK,"IDirectSoundBuffer_GetFormat() failed: %s\n",
|
||||
DXGetErrorString8(rc));
|
||||
if (rc==DS_OK && winetest_debug > 1) {
|
||||
|
|
|
@ -32,6 +32,11 @@
|
|||
#include "dsound.h"
|
||||
#include "dxerr8.h"
|
||||
#include "dsconf.h"
|
||||
#include "mmreg.h"
|
||||
/* MinGW doesn't have ksguid, needed for make crosstest to work. */
|
||||
#include "initguid.h"
|
||||
#include "ks.h"
|
||||
#include "ksmedia.h"
|
||||
|
||||
#include "dsound_test.h"
|
||||
|
||||
|
@ -694,6 +699,7 @@ static HRESULT test_secondary(LPGUID lpGuid)
|
|||
goto EXIT1;
|
||||
|
||||
for (f=0;f<NB_FORMATS;f++) {
|
||||
WAVEFORMATEXTENSIBLE wfxe;
|
||||
init_format(&wfx,WAVE_FORMAT_PCM,formats[f][0],formats[f][1],
|
||||
formats[f][2]);
|
||||
secondary=NULL;
|
||||
|
@ -716,18 +722,83 @@ static HRESULT test_secondary(LPGUID lpGuid)
|
|||
bufdesc.dwBufferBytes=align(wfx.nAvgBytesPerSec*BUFFER_LEN/1000,
|
||||
wfx.nBlockAlign);
|
||||
bufdesc.lpwfxFormat=&wfx;
|
||||
if (winetest_interactive) {
|
||||
trace(" Testing a secondary buffer at %dx%dx%d "
|
||||
"with a primary buffer at %dx%dx%d\n",
|
||||
wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
|
||||
wfx1.nSamplesPerSec,wfx1.wBitsPerSample,wfx1.nChannels);
|
||||
}
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
if (wfx.wBitsPerSample != 8 && wfx.wBitsPerSample != 16)
|
||||
ok(rc == DSERR_CONTROLUNAVAIL && !secondary, "IDirectSound_CreateSoundBuffer() "
|
||||
"should have returned DSERR_CONTROLUNAVAIL and NULL, returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
else
|
||||
ok(rc==DS_OK && secondary!=NULL,
|
||||
"IDirectSound_CreateSoundBuffer() failed to create a secondary "
|
||||
"buffer %s\n",DXGetErrorString8(rc));
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
secondary = NULL;
|
||||
|
||||
bufdesc.lpwfxFormat=(WAVEFORMATEX*)&wfxe;
|
||||
wfxe.Format = wfx;
|
||||
wfxe.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
|
||||
wfxe.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
|
||||
wfxe.Format.cbSize = 1;
|
||||
wfxe.Samples.wValidBitsPerSample = wfx.wBitsPerSample;
|
||||
wfxe.dwChannelMask = (wfx.nChannels == 1 ? KSAUDIO_SPEAKER_MONO : KSAUDIO_SPEAKER_STEREO);
|
||||
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DSERR_INVALIDPARAM && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
|
||||
wfxe.Format.cbSize = sizeof(wfxe) - sizeof(wfx) + 1;
|
||||
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(DSERR_CONTROLUNAVAIL && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
|
||||
wfxe.Format.cbSize = sizeof(wfxe) - sizeof(wfx);
|
||||
wfxe.SubFormat = GUID_NULL;
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DSERR_INVALIDPARAM && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
wfxe.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
|
||||
|
||||
++wfxe.Samples.wValidBitsPerSample;
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DSERR_INVALIDPARAM && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
--wfxe.Samples.wValidBitsPerSample;
|
||||
|
||||
wfxe.Samples.wValidBitsPerSample = 0;
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DS_OK && secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
wfxe.Samples.wValidBitsPerSample = wfxe.Format.wBitsPerSample;
|
||||
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DS_OK && secondary!=NULL,
|
||||
"IDirectSound_CreateSoundBuffer() failed to create a secondary "
|
||||
"buffer %s\n",DXGetErrorString8(rc));
|
||||
"IDirectSound_CreateSoundBuffer() failed to create a secondary "
|
||||
"buffer %s\n",DXGetErrorString8(rc));
|
||||
|
||||
if (rc==DS_OK && secondary!=NULL) {
|
||||
if (winetest_interactive) {
|
||||
trace(" Testing a secondary buffer at %dx%dx%d "
|
||||
"with a primary buffer at %dx%dx%d\n",
|
||||
wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
|
||||
wfx1.nSamplesPerSec,wfx1.wBitsPerSample,wfx1.nChannels);
|
||||
}
|
||||
test_buffer(dso,&secondary,0,FALSE,0,FALSE,0,
|
||||
winetest_interactive,1.0,0,NULL,0,0,FALSE,0);
|
||||
|
||||
|
|
|
@ -32,6 +32,9 @@
|
|||
#include "dsound.h"
|
||||
#include "dxerr8.h"
|
||||
#include "dsconf.h"
|
||||
#include "mmreg.h"
|
||||
#include "ks.h"
|
||||
#include "ksmedia.h"
|
||||
|
||||
#include "dsound_test.h"
|
||||
|
||||
|
@ -727,6 +730,7 @@ static HRESULT test_secondary8(LPGUID lpGuid)
|
|||
goto EXIT1;
|
||||
|
||||
for (f=0;f<NB_FORMATS;f++) {
|
||||
WAVEFORMATEXTENSIBLE wfxe;
|
||||
init_format(&wfx,WAVE_FORMAT_PCM,formats[f][0],formats[f][1],
|
||||
formats[f][2]);
|
||||
secondary=NULL;
|
||||
|
@ -749,18 +753,83 @@ static HRESULT test_secondary8(LPGUID lpGuid)
|
|||
bufdesc.dwBufferBytes=align(wfx.nAvgBytesPerSec*BUFFER_LEN/1000,
|
||||
wfx.nBlockAlign);
|
||||
bufdesc.lpwfxFormat=&wfx;
|
||||
if (winetest_interactive) {
|
||||
trace(" Testing a secondary buffer at %dx%dx%d "
|
||||
"with a primary buffer at %dx%dx%d\n",
|
||||
wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
|
||||
wfx1.nSamplesPerSec,wfx1.wBitsPerSample,wfx1.nChannels);
|
||||
}
|
||||
rc=IDirectSound8_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
if (wfx.wBitsPerSample != 8 && wfx.wBitsPerSample != 16)
|
||||
ok(rc == DSERR_CONTROLUNAVAIL && !secondary, "IDirectSound_CreateSoundBuffer() "
|
||||
"should have returned DSERR_CONTROLUNAVAIL and NULL, returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
else
|
||||
ok(rc==DS_OK && secondary!=NULL,
|
||||
"IDirectSound_CreateSoundBuffer() failed to create a secondary "
|
||||
"buffer %s\n",DXGetErrorString8(rc));
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
secondary = NULL;
|
||||
|
||||
bufdesc.lpwfxFormat=(WAVEFORMATEX*)&wfxe;
|
||||
wfxe.Format = wfx;
|
||||
wfxe.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
|
||||
wfxe.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
|
||||
wfxe.Format.cbSize = 1;
|
||||
wfxe.Samples.wValidBitsPerSample = wfx.wBitsPerSample;
|
||||
wfxe.dwChannelMask = (wfx.nChannels == 1 ? KSAUDIO_SPEAKER_MONO : KSAUDIO_SPEAKER_STEREO);
|
||||
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DSERR_INVALIDPARAM && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
|
||||
wfxe.Format.cbSize = sizeof(wfxe) - sizeof(wfx) + 1;
|
||||
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(DSERR_CONTROLUNAVAIL && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
|
||||
wfxe.Format.cbSize = sizeof(wfxe) - sizeof(wfx);
|
||||
wfxe.SubFormat = GUID_NULL;
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DSERR_INVALIDPARAM && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
wfxe.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
|
||||
|
||||
++wfxe.Samples.wValidBitsPerSample;
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DSERR_INVALIDPARAM && !secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
--wfxe.Samples.wValidBitsPerSample;
|
||||
|
||||
wfxe.Samples.wValidBitsPerSample = 0;
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DS_OK && secondary,
|
||||
"IDirectSound_CreateSoundBuffer() returned: %s %p\n",
|
||||
DXGetErrorString8(rc), secondary);
|
||||
if (secondary)
|
||||
IDirectSoundBuffer_Release(secondary);
|
||||
wfxe.Samples.wValidBitsPerSample = wfxe.Format.wBitsPerSample;
|
||||
|
||||
rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL);
|
||||
ok(rc==DS_OK && secondary!=NULL,
|
||||
"IDirectSound8_CreateSoundBuffer() failed to create a secondary "
|
||||
"buffer: %s\n",DXGetErrorString8(rc));
|
||||
"IDirectSound_CreateSoundBuffer() failed to create a secondary "
|
||||
"buffer %s\n",DXGetErrorString8(rc));
|
||||
|
||||
if (rc==DS_OK && secondary!=NULL) {
|
||||
if (winetest_interactive) {
|
||||
trace(" Testing a secondary buffer at %dx%dx%d "
|
||||
"with a primary buffer at %dx%dx%d\n",
|
||||
wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels,
|
||||
wfx1.nSamplesPerSec,wfx1.wBitsPerSample,wfx1.nChannels);
|
||||
}
|
||||
test_buffer8(dso,&secondary,0,FALSE,0,FALSE,0,
|
||||
winetest_interactive,1.0,0,NULL,0,0);
|
||||
|
||||
|
|
|
@ -23,26 +23,50 @@ static const unsigned int formats[][4]={
|
|||
{ 8000, 8, 2, 0 },
|
||||
{ 8000, 16, 1, 0 },
|
||||
{ 8000, 16, 2, 0 },
|
||||
{ 8000, 24, 1, 0 },
|
||||
{ 8000, 24, 2, 0 },
|
||||
{ 8000, 32, 1, 0 },
|
||||
{ 8000, 32, 2, 0 },
|
||||
{11025, 8, 1, WAVE_FORMAT_1M08 },
|
||||
{11025, 8, 2, WAVE_FORMAT_1S08 },
|
||||
{11025, 16, 1, WAVE_FORMAT_1M16 },
|
||||
{11025, 16, 2, WAVE_FORMAT_1S16 },
|
||||
{11025, 24, 1, 0 },
|
||||
{11025, 24, 2, 0 },
|
||||
{11025, 32, 1, 0 },
|
||||
{11025, 32, 2, 0 },
|
||||
{22050, 8, 1, WAVE_FORMAT_2M08 },
|
||||
{22050, 8, 2, WAVE_FORMAT_2S08 },
|
||||
{22050, 16, 1, WAVE_FORMAT_2M16 },
|
||||
{22050, 16, 2, WAVE_FORMAT_2S16 },
|
||||
{22050, 24, 1, 0 },
|
||||
{22050, 24, 2, 0 },
|
||||
{22050, 32, 1, 0 },
|
||||
{22050, 32, 2, 0 },
|
||||
{44100, 8, 1, WAVE_FORMAT_4M08 },
|
||||
{44100, 8, 2, WAVE_FORMAT_4S08 },
|
||||
{44100, 16, 1, WAVE_FORMAT_4M16 },
|
||||
{44100, 16, 2, WAVE_FORMAT_4S16 },
|
||||
{44100, 24, 1, 0 },
|
||||
{44100, 24, 2, 0 },
|
||||
{44100, 32, 1, 0 },
|
||||
{44100, 32, 2, 0 },
|
||||
{48000, 8, 1, WAVE_FORMAT_48M08 },
|
||||
{48000, 8, 2, WAVE_FORMAT_48S08 },
|
||||
{48000, 16, 1, WAVE_FORMAT_48M16 },
|
||||
{48000, 16, 2, WAVE_FORMAT_48S16 },
|
||||
{48000, 24, 1, 0 },
|
||||
{48000, 24, 2, 0 },
|
||||
{48000, 32, 1, 0 },
|
||||
{48000, 32, 2, 0 },
|
||||
{96000, 8, 1, WAVE_FORMAT_96M08 },
|
||||
{96000, 8, 2, WAVE_FORMAT_96S08 },
|
||||
{96000, 16, 1, WAVE_FORMAT_96M16 },
|
||||
{96000, 16, 2, WAVE_FORMAT_96S16 }
|
||||
{96000, 16, 2, WAVE_FORMAT_96S16 },
|
||||
{96000, 24, 1, 0 },
|
||||
{96000, 24, 2, 0 },
|
||||
{96000, 32, 1, 0 },
|
||||
{96000, 32, 2, 0 }
|
||||
};
|
||||
#define NB_FORMATS (sizeof(formats)/sizeof(*formats))
|
||||
|
||||
|
|
Loading…
Reference in New Issue