📄 propset.c
字号:
ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); } /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A */ trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A ***\n"); rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A, &support); ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A) failed: %s\n", DXGetErrorString8(rc)); if (rc!=DS_OK) goto error; ok(support & KSPROPERTY_SUPPORT_GET, "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: " "support = 0x%lx\n",support); ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set " "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: support = 0x%lx\n",support); if (support & KSPROPERTY_SUPPORT_GET) { DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA data; ULONG bytes; data.Callback = callbackA; data.Context = 0; rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A, NULL, 0, &data, sizeof(data), &bytes); ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); } /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W */ trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W ***\n"); rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W, &support); ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W) failed: %s\n", DXGetErrorString8(rc)); if (rc!=DS_OK) goto error; ok(support & KSPROPERTY_SUPPORT_GET, "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: " "support = 0x%lx\n",support); ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set " "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: support = 0x%lx\n",support); if (support & KSPROPERTY_SUPPORT_GET) { DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA data; ULONG bytes; data.Callback = callbackW; data.Context = 0; rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W, NULL, 0, &data, sizeof(data), &bytes); ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); }error: FreeLibrary(hDsound);}static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription, LPCSTR lpcstrModule, LPVOID lpContext){ HRESULT rc; LPDIRECTSOUND dso=NULL; LPDIRECTSOUNDBUFFER primary=NULL,secondary=NULL; DSBUFFERDESC bufdesc; WAVEFORMATEX wfx; int ref; trace("*** Testing %s - %s ***\n",lpcstrDescription,lpcstrModule); rc=DirectSoundCreate(lpGuid,&dso,NULL); ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL, "DirectSoundCreate() failed: %s\n",DXGetErrorString8(rc)); if (rc!=DS_OK) { if (rc==DSERR_NODRIVER) trace(" No Driver\n"); else if (rc == DSERR_ALLOCATED) trace(" Already In Use\n"); else if (rc == E_FAIL) trace(" No Device\n"); goto EXIT; } /* We must call SetCooperativeLevel before calling CreateSoundBuffer */ /* DSOUND: Setting DirectSound cooperative level to DSSCL_PRIORITY */ rc=IDirectSound_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY); ok(rc==DS_OK,"IDirectSound_SetCooperativeLevel() failed: %s\n", DXGetErrorString8(rc)); if (rc!=DS_OK) goto EXIT; /* Testing 3D buffers */ primary=NULL; ZeroMemory(&bufdesc, sizeof(bufdesc)); bufdesc.dwSize=sizeof(bufdesc); bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_LOCHARDWARE|DSBCAPS_CTRL3D; rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL); ok(rc==DS_OK&&primary!=NULL,"IDirectSound_CreateSoundBuffer() failed to " "create a hardware 3D primary buffer: %s\n",DXGetErrorString8(rc)); if (rc==DS_OK&&primary!=NULL) { ZeroMemory(&wfx, sizeof(wfx)); wfx.wFormatTag=WAVE_FORMAT_PCM; wfx.nChannels=1; wfx.wBitsPerSample=16; wfx.nSamplesPerSec=44100; wfx.nBlockAlign=wfx.nChannels*wfx.wBitsPerSample/8; wfx.nAvgBytesPerSec=wfx.nSamplesPerSec*wfx.nBlockAlign; ZeroMemory(&bufdesc, sizeof(bufdesc)); bufdesc.dwSize=sizeof(bufdesc); bufdesc.dwFlags=DSBCAPS_CTRLDEFAULT|DSBCAPS_GETCURRENTPOSITION2; bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec; bufdesc.lpwfxFormat=&wfx; trace(" Testing a secondary buffer at %ldx%dx%d\n", wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels); 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)); if (rc==DS_OK&&secondary!=NULL) { IKsPropertySet * pPropertySet=NULL; rc=IDirectSoundBuffer_QueryInterface(secondary, &IID_IKsPropertySet, (void **)&pPropertySet); /* it's not an error for this to fail */ if(rc==DS_OK) { ULONG ulTypeSupport; trace(" Supports property sets\n"); /* it's not an error for these to fail */ rc=IKsPropertySet_QuerySupport(pPropertySet, &DSPROPSETID_VoiceManager, 0,&ulTypeSupport); if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| KSPROPERTY_SUPPORT_SET))) trace(" DSPROPSETID_VoiceManager supported\n"); else trace(" DSPROPSETID_VoiceManager not supported\n"); rc=IKsPropertySet_QuerySupport(pPropertySet, &DSPROPSETID_EAX20_ListenerProperties,0,&ulTypeSupport); if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| KSPROPERTY_SUPPORT_SET))) trace(" DSPROPSETID_EAX20_ListenerProperties " "supported\n"); else trace(" DSPROPSETID_EAX20_ListenerProperties not " "supported\n"); rc=IKsPropertySet_QuerySupport(pPropertySet, &DSPROPSETID_EAX20_BufferProperties,0,&ulTypeSupport); if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| KSPROPERTY_SUPPORT_SET))) trace(" DSPROPSETID_EAX20_BufferProperties supported\n"); else trace(" DSPROPSETID_EAX20_BufferProperties not " "supported\n"); rc=IKsPropertySet_QuerySupport(pPropertySet, &DSPROPSETID_I3DL2_ListenerProperties,0,&ulTypeSupport); if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| KSPROPERTY_SUPPORT_SET))) trace(" DSPROPSETID_I3DL2_ListenerProperties " "supported\n"); else trace(" DSPROPSETID_I3DL2_ListenerProperties not " "supported\n"); rc=IKsPropertySet_QuerySupport(pPropertySet, &DSPROPSETID_I3DL2_BufferProperties,0,&ulTypeSupport); if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| KSPROPERTY_SUPPORT_SET))) trace(" DSPROPSETID_I3DL2_BufferProperties supported\n"); else trace(" DSPROPSETID_I3DL2_BufferProperties not " "supported\n"); rc=IKsPropertySet_QuerySupport(pPropertySet, &DSPROPSETID_ZOOMFX_BufferProperties,0,&ulTypeSupport); if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| KSPROPERTY_SUPPORT_SET))) trace(" DSPROPSETID_ZOOMFX_BufferProperties " "supported\n"); else trace(" DSPROPSETID_ZOOMFX_BufferProperties not " "supported\n"); ref=IKsPropertySet_Release(pPropertySet); /* try a few common ones */ ok(ref==0,"IKsPropertySet_Release() secondary has %d " "references, should have 0\n",ref); } else trace(" Doesn't support property sets\n"); ref=IDirectSoundBuffer_Release(secondary); ok(ref==0,"IDirectSoundBuffer_Release() secondary has %d " "references, should have 0\n",ref); } ref=IDirectSoundBuffer_Release(primary); ok(ref==0,"IDirectSoundBuffer_Release() primary has %d references, " "should have 0\n",ref); }EXIT: if (dso!=NULL) { ref=IDirectSound_Release(dso); ok(ref==0,"IDirectSound_Release() has %d references, should have 0\n", ref); } return 1;}static void propset_buffer_tests(void){ HRESULT rc; rc=DirectSoundEnumerateA(&dsenum_callback,NULL); ok(rc==DS_OK,"DirectSoundEnumerateA() failed: %s\n",DXGetErrorString8(rc));}START_TEST(propset){ HMODULE hDsound; CoInitialize(NULL); hDsound = LoadLibraryA("dsound.dll"); if (!hDsound) { trace("dsound.dll not found\n"); return; } trace("DLL Version: %s\n", get_file_version("dsound.dll")); pDirectSoundCreate8 = (void*)GetProcAddress(hDsound, "DirectSoundCreate8"); pDirectSoundCaptureCreate=(void*)GetProcAddress(hDsound,"DirectSoundCaptureCreate"); pDirectSoundCaptureCreate8=(void*)GetProcAddress(hDsound,"DirectSoundCaptureCreate8"); pDirectSoundFullDuplexCreate=(void*)GetProcAddress(hDsound,"DirectSoundFullDuplexCreate"); propset_private_tests(); propset_buffer_tests(); CoUninitialize();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -