Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenpropset.c
Go to the documentation of this file.
00001 /* 00002 * Unit tests for CLSID_DirectSoundPrivate property set functions 00003 * (used by dxdiag) 00004 * 00005 * Copyright (c) 2003 Robert Reif 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 */ 00021 00022 #define NONAMELESSSTRUCT 00023 #define NONAMELESSUNION 00024 #define COBJMACROS 00025 #include <windows.h> 00026 00027 #include "wine/test.h" 00028 #include "dsound.h" 00029 #include "initguid.h" 00030 #include "dsconf.h" 00031 #include "dxerr8.h" 00032 00033 #include "dsound_test.h" 00034 00035 #ifndef DSBCAPS_CTRLDEFAULT 00036 #define DSBCAPS_CTRLDEFAULT \ 00037 DSBCAPS_CTRLFREQUENCY|DSBCAPS_CTRLPAN|DSBCAPS_CTRLVOLUME 00038 #endif 00039 00040 DEFINE_GUID(DSPROPSETID_VoiceManager, \ 00041 0x62A69BAE,0xDF9D,0x11D1,0x99,0xA6,0x00,0xC0,0x4F,0xC9,0x9D,0x46); 00042 DEFINE_GUID(DSPROPSETID_EAX20_ListenerProperties, \ 00043 0x306a6a8,0xb224,0x11d2,0x99,0xe5,0x0,0x0,0xe8,0xd8,0xc7,0x22); 00044 DEFINE_GUID(DSPROPSETID_EAX20_BufferProperties, \ 00045 0x306a6a7,0xb224,0x11d2,0x99,0xe5,0x0,0x0,0xe8,0xd8,0xc7,0x22); 00046 DEFINE_GUID(DSPROPSETID_I3DL2_ListenerProperties, \ 00047 0xDA0F0520,0x300A,0x11D3,0x8A,0x2B,0x00,0x60,0x97,0x0D,0xB0,0x11); 00048 DEFINE_GUID(DSPROPSETID_I3DL2_BufferProperties, \ 00049 0xDA0F0521,0x300A,0x11D3,0x8A,0x2B,0x00,0x60,0x97,0x0D,0xB0,0x11); 00050 DEFINE_GUID(DSPROPSETID_ZOOMFX_BufferProperties, \ 00051 0xCD5368E0,0x3450,0x11D3,0x8B,0x6E,0x00,0x10,0x5A,0x9B,0x7B,0xBC); 00052 00053 typedef HRESULT (CALLBACK * MYPROC)(REFCLSID, REFIID, LPVOID *); 00054 00055 static HRESULT (WINAPI *pDirectSoundCreate8)(LPCGUID,LPDIRECTSOUND8*, 00056 LPUNKNOWN)=NULL; 00057 static HRESULT (WINAPI *pDirectSoundCaptureCreate)(LPCGUID, 00058 LPDIRECTSOUNDCAPTURE*,LPUNKNOWN)=NULL; 00059 static HRESULT (WINAPI *pDirectSoundCaptureCreate8)(LPCGUID, 00060 LPDIRECTSOUNDCAPTURE8*,LPUNKNOWN)=NULL; 00061 static HRESULT (WINAPI *pDirectSoundFullDuplexCreate)(LPCGUID,LPCGUID, 00062 LPCDSCBUFFERDESC,LPCDSBUFFERDESC,HWND,DWORD,LPDIRECTSOUNDFULLDUPLEX*, 00063 LPDIRECTSOUNDCAPTUREBUFFER8*,LPDIRECTSOUNDBUFFER8*,LPUNKNOWN)=NULL; 00064 00065 BOOL CALLBACK callback(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_DATA data, 00066 LPVOID context) 00067 { 00068 trace(" found device:\n"); 00069 trace(" Type: %s\n", 00070 data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" : 00071 data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" : 00072 data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown"); 00073 trace(" DataFlow: %s\n", 00074 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" : 00075 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ? 00076 "Capture" : "Unknown"); 00077 trace(" DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", 00078 data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3, 00079 data->DeviceId.Data4[0],data->DeviceId.Data4[1], 00080 data->DeviceId.Data4[2],data->DeviceId.Data4[3], 00081 data->DeviceId.Data4[4],data->DeviceId.Data4[5], 00082 data->DeviceId.Data4[6],data->DeviceId.Data4[7]); 00083 trace(" Description: %s\n", data->Description); 00084 trace(" Module: %s\n", data->Module); 00085 trace(" Interface: %s\n", data->Interface); 00086 trace(" WaveDeviceId: %ld\n", data->WaveDeviceId); 00087 00088 return TRUE; 00089 } 00090 00091 BOOL CALLBACK callback1(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA data, 00092 LPVOID context) 00093 { 00094 char descriptionA[0x100]; 00095 char moduleA[MAX_PATH]; 00096 00097 trace(" found device:\n"); 00098 trace(" Type: %s\n", 00099 data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" : 00100 data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" : 00101 data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown"); 00102 trace(" DataFlow: %s\n", 00103 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" : 00104 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ? 00105 "Capture" : "Unknown"); 00106 trace(" DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", 00107 data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3, 00108 data->DeviceId.Data4[0],data->DeviceId.Data4[1], 00109 data->DeviceId.Data4[2],data->DeviceId.Data4[3], 00110 data->DeviceId.Data4[4],data->DeviceId.Data4[5], 00111 data->DeviceId.Data4[6],data->DeviceId.Data4[7]); 00112 trace(" DescriptionA: %s\n", data->DescriptionA); 00113 WideCharToMultiByte(CP_ACP, 0, data->DescriptionW, -1, descriptionA, sizeof(descriptionA), NULL, NULL); 00114 trace(" DescriptionW: %s\n", descriptionA); 00115 trace(" ModuleA: %s\n", data->ModuleA); 00116 WideCharToMultiByte(CP_ACP, 0, data->ModuleW, -1, moduleA, sizeof(moduleA), NULL, NULL); 00117 trace(" ModuleW: %s\n", moduleA); 00118 trace(" WaveDeviceId: %ld\n", data->WaveDeviceId); 00119 00120 return TRUE; 00121 } 00122 00123 BOOL CALLBACK callbackA(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A_DATA data, 00124 LPVOID context) 00125 { 00126 trace(" found device:\n"); 00127 trace(" Type: %s\n", 00128 data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" : 00129 data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" : 00130 data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown"); 00131 trace(" DataFlow: %s\n", 00132 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" : 00133 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ? 00134 "Capture" : "Unknown"); 00135 trace(" DeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", 00136 data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3, 00137 data->DeviceId.Data4[0],data->DeviceId.Data4[1], 00138 data->DeviceId.Data4[2],data->DeviceId.Data4[3], 00139 data->DeviceId.Data4[4],data->DeviceId.Data4[5], 00140 data->DeviceId.Data4[6],data->DeviceId.Data4[7]); 00141 trace(" Description: %s\n", data->Description); 00142 trace(" Module: %s\n", data->Module); 00143 trace(" Interface: %s\n", data->Interface); 00144 trace(" WaveDeviceId: %ld\n", data->WaveDeviceId); 00145 00146 return TRUE; 00147 } 00148 00149 BOOL CALLBACK callbackW(PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W_DATA data, 00150 LPVOID context) 00151 { 00152 char descriptionA[0x100]; 00153 char moduleA[MAX_PATH]; 00154 char interfaceA[MAX_PATH]; 00155 00156 trace("found device:\n"); 00157 trace("\tType: %s\n", 00158 data->Type == DIRECTSOUNDDEVICE_TYPE_EMULATED ? "Emulated" : 00159 data->Type == DIRECTSOUNDDEVICE_TYPE_VXD ? "VxD" : 00160 data->Type == DIRECTSOUNDDEVICE_TYPE_WDM ? "WDM" : "Unknown"); 00161 trace("\tDataFlow: %s\n", 00162 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_RENDER ? "Render" : 00163 data->DataFlow == DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE ? 00164 "Capture" : "Unknown"); 00165 trace("\tDeviceId: {%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n", 00166 data->DeviceId.Data1,data->DeviceId.Data2,data->DeviceId.Data3, 00167 data->DeviceId.Data4[0],data->DeviceId.Data4[1], 00168 data->DeviceId.Data4[2],data->DeviceId.Data4[3], 00169 data->DeviceId.Data4[4],data->DeviceId.Data4[5], 00170 data->DeviceId.Data4[6],data->DeviceId.Data4[7]); 00171 WideCharToMultiByte(CP_ACP, 0, data->Description, -1, descriptionA, sizeof(descriptionA), NULL, NULL); 00172 WideCharToMultiByte(CP_ACP, 0, data->Module, -1, moduleA, sizeof(moduleA), NULL, NULL); 00173 WideCharToMultiByte(CP_ACP, 0, data->Interface, -1, interfaceA, sizeof(interfaceA), NULL, NULL); 00174 trace("\tDescription: %s\n", descriptionA); 00175 trace("\tModule: %s\n", moduleA); 00176 trace("\tInterface: %s\n", interfaceA); 00177 trace("\tWaveDeviceId: %ld\n", data->WaveDeviceId); 00178 00179 return TRUE; 00180 } 00181 00182 static void propset_private_tests(void) 00183 { 00184 HMODULE hDsound; 00185 HRESULT rc; 00186 IClassFactory * pcf; 00187 IKsPropertySet * pps; 00188 MYPROC fProc; 00189 ULONG support; 00190 00191 hDsound = LoadLibrary("dsound.dll"); 00192 ok(hDsound!=0,"LoadLibrary(dsound.dll) failed\n"); 00193 if (hDsound==0) 00194 return; 00195 00196 fProc = (MYPROC)GetProcAddress(hDsound, "DllGetClassObject"); 00197 00198 /* try direct sound first */ 00199 /* DSOUND: Error: Invalid interface buffer */ 00200 rc = (fProc)(&CLSID_DirectSound, &IID_IClassFactory, (void **)0); 00201 ok(rc==DSERR_INVALIDPARAM,"DllGetClassObject(CLSID_DirectSound, " 00202 "IID_IClassFactory) should have returned DSERR_INVALIDPARAM, " 00203 "returned: %s\n",DXGetErrorString8(rc)); 00204 00205 rc = (fProc)(&CLSID_DirectSound, &IID_IClassFactory, (void **)(&pcf)); 00206 ok(pcf!=0, "DllGetClassObject(CLSID_DirectSound, IID_IClassFactory) " 00207 "failed: %s\n",DXGetErrorString8(rc)); 00208 if (pcf==0) 00209 goto error; 00210 00211 /* direct sound doesn't have an IKsPropertySet */ 00212 /* DSOUND: Error: Invalid interface buffer */ 00213 rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet, 00214 (void **)0); 00215 ok(rc==DSERR_INVALIDPARAM, "CreateInstance(IID_IKsPropertySet) should have " 00216 "returned DSERR_INVALIDPARAM, returned: %s\n",DXGetErrorString8(rc)); 00217 00218 rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet, 00219 (void **)(&pps)); 00220 ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have " 00221 "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc)); 00222 00223 /* and the direct sound 8 version */ 00224 if (pDirectSoundCreate8) { 00225 rc = (fProc)(&CLSID_DirectSound8, &IID_IClassFactory, (void **)(&pcf)); 00226 ok(pcf!=0, "DllGetClassObject(CLSID_DirectSound8, IID_IClassFactory) " 00227 "failed: %s\n",DXGetErrorString8(rc)); 00228 if (pcf==0) 00229 goto error; 00230 00231 /* direct sound 8 doesn't have an IKsPropertySet */ 00232 rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet, 00233 (void **)(&pps)); 00234 ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have " 00235 "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc)); 00236 } 00237 00238 /* try direct sound capture next */ 00239 if (pDirectSoundCaptureCreate) { 00240 rc = (fProc)(&CLSID_DirectSoundCapture, &IID_IClassFactory, 00241 (void **)(&pcf)); 00242 ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundCapture, IID_IClassFactory) " 00243 "failed: %s\n",DXGetErrorString8(rc)); 00244 if (pcf==0) 00245 goto error; 00246 00247 /* direct sound capture doesn't have an IKsPropertySet */ 00248 rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet, 00249 (void **)(&pps)); 00250 ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have " 00251 "returned E_NOINTERFACE,returned: %s\n",DXGetErrorString8(rc)); 00252 } 00253 00254 /* and the direct sound capture 8 version */ 00255 if (pDirectSoundCaptureCreate8) { 00256 rc = (fProc)(&CLSID_DirectSoundCapture8, &IID_IClassFactory, 00257 (void **)(&pcf)); 00258 ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundCapture8, " 00259 "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc)); 00260 if (pcf==0) 00261 goto error; 00262 00263 /* direct sound capture 8 doesn't have an IKsPropertySet */ 00264 rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet, 00265 (void **)(&pps)); 00266 ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have " 00267 "returned E_NOINTERFACE, returned: %s\n",DXGetErrorString8(rc)); 00268 } 00269 00270 /* try direct sound full duplex next */ 00271 if (pDirectSoundFullDuplexCreate) { 00272 rc = (fProc)(&CLSID_DirectSoundFullDuplex, &IID_IClassFactory, 00273 (void **)(&pcf)); 00274 ok(pcf!=0, "DllGetClassObject(CLSID_DirectSoundFullDuplex, " 00275 "IID_IClassFactory) failed: %s\n",DXGetErrorString8(rc)); 00276 if (pcf==0) 00277 goto error; 00278 00279 /* direct sound full duplex doesn't have an IKsPropertySet */ 00280 rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet, 00281 (void **)(&pps)); 00282 ok(rc==E_NOINTERFACE, "CreateInstance(IID_IKsPropertySet) should have " 00283 "returned NOINTERFACE, returned: %s\n",DXGetErrorString8(rc)); 00284 } 00285 00286 /* try direct sound private last */ 00287 rc = (fProc)(&CLSID_DirectSoundPrivate, &IID_IClassFactory, 00288 (void **)(&pcf)); 00289 00290 /* some early versions of Direct Sound do not have this */ 00291 if (pcf==0) 00292 goto error; 00293 00294 /* direct sound private does have an IKsPropertySet */ 00295 rc = IClassFactory_CreateInstance(pcf, NULL, &IID_IKsPropertySet, 00296 (void **)(&pps)); 00297 ok(rc==DS_OK, "CreateInstance(IID_IKsPropertySet) failed: %s\n", 00298 DXGetErrorString8(rc)); 00299 if (rc!=DS_OK) 00300 goto error; 00301 00302 /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION */ 00303 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00304 DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION, 00305 &support); 00306 ok(rc==DS_OK||rc==E_INVALIDARG, 00307 "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00308 "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION) failed: %s\n", 00309 DXGetErrorString8(rc)); 00310 if (rc!=DS_OK) { 00311 if (rc==E_INVALIDARG) 00312 trace(" Not Supported\n"); 00313 goto error; 00314 } 00315 00316 ok(support & KSPROPERTY_SUPPORT_GET, 00317 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION: " 00318 "support = 0x%lx\n",support); 00319 ok(!(support & KSPROPERTY_SUPPORT_SET), 00320 "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION: " 00321 "support = 0x%lx\n",support); 00322 00323 /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1 */ 00324 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00325 DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1, 00326 &support); 00327 ok(rc==DS_OK||rc==E_INVALIDARG, 00328 "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00329 "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1) failed: %s\n", 00330 DXGetErrorString8(rc)); 00331 if (rc!=DS_OK) { 00332 if (rc==E_INVALIDARG) 00333 trace(" Not Supported\n"); 00334 goto error; 00335 } 00336 00337 ok(support & KSPROPERTY_SUPPORT_GET, 00338 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: " 00339 "support = 0x%lx\n",support); 00340 ok(!(support & KSPROPERTY_SUPPORT_SET), 00341 "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1: " 00342 "support = 0x%lx\n",support); 00343 00344 /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A */ 00345 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00346 DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A, 00347 &support); 00348 ok(rc==DS_OK||rc==E_INVALIDARG, 00349 "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00350 "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A) failed: %s\n", 00351 DXGetErrorString8(rc)); 00352 if (rc!=DS_OK) { 00353 if (rc==E_INVALIDARG) 00354 trace(" Not Supported\n"); 00355 goto error; 00356 } 00357 00358 ok(support & KSPROPERTY_SUPPORT_GET, 00359 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: " 00360 "support = 0x%lx\n",support); 00361 ok(!(support & KSPROPERTY_SUPPORT_SET), 00362 "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_A: " 00363 "support = 0x%lx\n",support); 00364 00365 /* test DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W */ 00366 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00367 DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W, 00368 &support); 00369 ok(rc==DS_OK||rc==E_INVALIDARG, 00370 "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00371 "DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W) failed: %s\n", 00372 DXGetErrorString8(rc)); 00373 if (rc!=DS_OK) { 00374 if (rc==E_INVALIDARG) 00375 trace(" Not Supported\n"); 00376 goto error; 00377 } 00378 00379 ok(support & KSPROPERTY_SUPPORT_GET, 00380 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: " 00381 "support = 0x%lx\n",support); 00382 ok(!(support & KSPROPERTY_SUPPORT_SET), 00383 "Shouldn't be able to set DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_W: " 00384 "support = 0x%lx\n",support); 00385 00386 /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING */ 00387 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00388 DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING, &support); 00389 ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00390 "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING) failed: %s\n", 00391 DXGetErrorString8(rc)); 00392 if (rc!=DS_OK) 00393 goto error; 00394 00395 ok(support & KSPROPERTY_SUPPORT_GET, 00396 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING: " 00397 "support = 0x%lx\n",support); 00398 ok(!(support & KSPROPERTY_SUPPORT_SET), "Shouldn't be able to set " 00399 "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING: support = " 00400 "0x%lx\n",support); 00401 00402 /* test DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A */ 00403 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00404 DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A, &support); 00405 ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00406 "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A) failed: %s\n", 00407 DXGetErrorString8(rc)); 00408 if (rc!=DS_OK) 00409 goto error; 00410 00411 ok(support & KSPROPERTY_SUPPORT_GET, 00412 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: " 00413 "support = 0x%lx\n",support); 00414 ok(!(support & KSPROPERTY_SUPPORT_SET), "Shouldn't be able to set " 00415 "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_A: support = " 00416 "0x%lx\n",support); 00417 00418 /* test DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W */ 00419 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00420 DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W, &support); 00421 ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00422 "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W) failed: %s\n", 00423 DXGetErrorString8(rc)); 00424 if (rc!=DS_OK) 00425 goto error; 00426 00427 ok(support & KSPROPERTY_SUPPORT_GET, 00428 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: " 00429 "support = 0x%lx\n",support); 00430 ok(!(support & KSPROPERTY_SUPPORT_SET), "Shouldn't be able to set " 00431 "DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING_W: support = " 00432 "0x%lx\n",support); 00433 00434 /* test generic DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE */ 00435 trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE ***\n"); 00436 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00437 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE, 00438 &support); 00439 ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00440 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE) failed: %s\n", 00441 DXGetErrorString8(rc)); 00442 if (rc!=DS_OK) 00443 goto error; 00444 00445 ok(support & KSPROPERTY_SUPPORT_GET, 00446 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE: " 00447 "support = 0x%lx\n",support); 00448 ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set " 00449 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE: support = 0x%lx\n",support); 00450 00451 if (support & KSPROPERTY_SUPPORT_GET) { 00452 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_DATA data; 00453 ULONG bytes; 00454 00455 data.Callback = callback; 00456 data.Context = 0; 00457 00458 rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, 00459 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE, 00460 NULL, 0, &data, sizeof(data), &bytes); 00461 ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); 00462 } 00463 00464 /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 */ 00465 trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1 ***\n"); 00466 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00467 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1, 00468 &support); 00469 ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00470 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1) failed: %s\n", 00471 DXGetErrorString8(rc)); 00472 if (rc!=DS_OK) 00473 goto error; 00474 00475 ok(support & KSPROPERTY_SUPPORT_GET, 00476 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: " 00477 "support = 0x%lx\n",support); 00478 ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set " 00479 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1: support = 0x%lx\n",support); 00480 00481 if (support & KSPROPERTY_SUPPORT_GET) { 00482 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1_DATA data; 00483 ULONG bytes; 00484 00485 data.Callback = callback1; 00486 data.Context = 0; 00487 00488 rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, 00489 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_1, 00490 NULL, 0, &data, sizeof(data), &bytes); 00491 ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); 00492 } 00493 00494 /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A */ 00495 trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A ***\n"); 00496 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00497 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A, 00498 &support); 00499 ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00500 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A) failed: %s\n", 00501 DXGetErrorString8(rc)); 00502 if (rc!=DS_OK) 00503 goto error; 00504 00505 ok(support & KSPROPERTY_SUPPORT_GET, 00506 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: " 00507 "support = 0x%lx\n",support); 00508 ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set " 00509 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A: support = 0x%lx\n",support); 00510 00511 if (support & KSPROPERTY_SUPPORT_GET) { 00512 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A_DATA data; 00513 ULONG bytes; 00514 00515 data.Callback = callbackA; 00516 data.Context = 0; 00517 00518 rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, 00519 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_A, 00520 NULL, 0, &data, sizeof(data), &bytes); 00521 ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); 00522 } 00523 00524 /* test DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W */ 00525 trace("*** Testing DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W ***\n"); 00526 rc = IKsPropertySet_QuerySupport(pps, &DSPROPSETID_DirectSoundDevice, 00527 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W, 00528 &support); 00529 ok(rc==DS_OK, "QuerySupport(DSPROPSETID_DirectSoundDevice, " 00530 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W) failed: %s\n", 00531 DXGetErrorString8(rc)); 00532 if (rc!=DS_OK) 00533 goto error; 00534 00535 ok(support & KSPROPERTY_SUPPORT_GET, 00536 "Couldn't get DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: " 00537 "support = 0x%lx\n",support); 00538 ok(!(support & KSPROPERTY_SUPPORT_SET),"Shouldn't be able to set " 00539 "DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W: support = 0x%lx\n",support); 00540 00541 if (support & KSPROPERTY_SUPPORT_GET) { 00542 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W_DATA data; 00543 ULONG bytes; 00544 00545 data.Callback = callbackW; 00546 data.Context = 0; 00547 00548 rc = IKsPropertySet_Get(pps, &DSPROPSETID_DirectSoundDevice, 00549 DSPROPERTY_DIRECTSOUNDDEVICE_ENUMERATE_W, 00550 NULL, 0, &data, sizeof(data), &bytes); 00551 ok(rc==DS_OK, "Couldn't enumerate: 0x%lx\n",rc); 00552 } 00553 00554 error: 00555 FreeLibrary(hDsound); 00556 } 00557 00558 static BOOL WINAPI dsenum_callback(LPGUID lpGuid, LPCSTR lpcstrDescription, 00559 LPCSTR lpcstrModule, LPVOID lpContext) 00560 { 00561 HRESULT rc; 00562 LPDIRECTSOUND dso=NULL; 00563 LPDIRECTSOUNDBUFFER primary=NULL,secondary=NULL; 00564 DSBUFFERDESC bufdesc; 00565 WAVEFORMATEX wfx; 00566 int ref; 00567 00568 trace("*** Testing %s - %s ***\n",lpcstrDescription,lpcstrModule); 00569 00570 rc=DirectSoundCreate(lpGuid,&dso,NULL); 00571 ok(rc==DS_OK||rc==DSERR_NODRIVER||rc==DSERR_ALLOCATED||rc==E_FAIL, 00572 "DirectSoundCreate() failed: %s\n",DXGetErrorString8(rc)); 00573 if (rc!=DS_OK) { 00574 if (rc==DSERR_NODRIVER) 00575 trace(" No Driver\n"); 00576 else if (rc == DSERR_ALLOCATED) 00577 trace(" Already In Use\n"); 00578 else if (rc == E_FAIL) 00579 trace(" No Device\n"); 00580 goto EXIT; 00581 } 00582 00583 /* We must call SetCooperativeLevel before calling CreateSoundBuffer */ 00584 /* DSOUND: Setting DirectSound cooperative level to DSSCL_PRIORITY */ 00585 rc=IDirectSound_SetCooperativeLevel(dso,get_hwnd(),DSSCL_PRIORITY); 00586 ok(rc==DS_OK,"IDirectSound_SetCooperativeLevel() failed: %s\n", 00587 DXGetErrorString8(rc)); 00588 if (rc!=DS_OK) 00589 goto EXIT; 00590 00591 /* Testing 3D buffers */ 00592 primary=NULL; 00593 ZeroMemory(&bufdesc, sizeof(bufdesc)); 00594 bufdesc.dwSize=sizeof(bufdesc); 00595 bufdesc.dwFlags=DSBCAPS_PRIMARYBUFFER|DSBCAPS_LOCHARDWARE|DSBCAPS_CTRL3D; 00596 rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&primary,NULL); 00597 ok(rc==DS_OK&&primary!=NULL,"IDirectSound_CreateSoundBuffer() failed to " 00598 "create a hardware 3D primary buffer: %s\n",DXGetErrorString8(rc)); 00599 if (rc==DS_OK&&primary!=NULL) { 00600 ZeroMemory(&wfx, sizeof(wfx)); 00601 wfx.wFormatTag=WAVE_FORMAT_PCM; 00602 wfx.nChannels=1; 00603 wfx.wBitsPerSample=16; 00604 wfx.nSamplesPerSec=44100; 00605 wfx.nBlockAlign=wfx.nChannels*wfx.wBitsPerSample/8; 00606 wfx.nAvgBytesPerSec=wfx.nSamplesPerSec*wfx.nBlockAlign; 00607 ZeroMemory(&bufdesc, sizeof(bufdesc)); 00608 bufdesc.dwSize=sizeof(bufdesc); 00609 bufdesc.dwFlags=DSBCAPS_CTRLDEFAULT|DSBCAPS_GETCURRENTPOSITION2; 00610 bufdesc.dwBufferBytes=wfx.nAvgBytesPerSec; 00611 bufdesc.lpwfxFormat=&wfx; 00612 trace(" Testing a secondary buffer at %ldx%dx%d\n", 00613 wfx.nSamplesPerSec,wfx.wBitsPerSample,wfx.nChannels); 00614 rc=IDirectSound_CreateSoundBuffer(dso,&bufdesc,&secondary,NULL); 00615 ok(rc==DS_OK&&secondary!=NULL,"IDirectSound_CreateSoundBuffer() " 00616 "failed to create a secondary buffer: %s\n",DXGetErrorString8(rc)); 00617 if (rc==DS_OK&&secondary!=NULL) { 00618 IKsPropertySet * pPropertySet=NULL; 00619 rc=IDirectSoundBuffer_QueryInterface(secondary, 00620 &IID_IKsPropertySet, 00621 (void **)&pPropertySet); 00622 /* it's not an error for this to fail */ 00623 if(rc==DS_OK) { 00624 ULONG ulTypeSupport; 00625 trace(" Supports property sets\n"); 00626 /* it's not an error for these to fail */ 00627 rc=IKsPropertySet_QuerySupport(pPropertySet, 00628 &DSPROPSETID_VoiceManager, 00629 0,&ulTypeSupport); 00630 if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| 00631 KSPROPERTY_SUPPORT_SET))) 00632 trace(" DSPROPSETID_VoiceManager supported\n"); 00633 else 00634 trace(" DSPROPSETID_VoiceManager not supported\n"); 00635 rc=IKsPropertySet_QuerySupport(pPropertySet, 00636 &DSPROPSETID_EAX20_ListenerProperties,0,&ulTypeSupport); 00637 if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| 00638 KSPROPERTY_SUPPORT_SET))) 00639 trace(" DSPROPSETID_EAX20_ListenerProperties " 00640 "supported\n"); 00641 else 00642 trace(" DSPROPSETID_EAX20_ListenerProperties not " 00643 "supported\n"); 00644 rc=IKsPropertySet_QuerySupport(pPropertySet, 00645 &DSPROPSETID_EAX20_BufferProperties,0,&ulTypeSupport); 00646 if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| 00647 KSPROPERTY_SUPPORT_SET))) 00648 trace(" DSPROPSETID_EAX20_BufferProperties supported\n"); 00649 else 00650 trace(" DSPROPSETID_EAX20_BufferProperties not " 00651 "supported\n"); 00652 rc=IKsPropertySet_QuerySupport(pPropertySet, 00653 &DSPROPSETID_I3DL2_ListenerProperties,0,&ulTypeSupport); 00654 if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| 00655 KSPROPERTY_SUPPORT_SET))) 00656 trace(" DSPROPSETID_I3DL2_ListenerProperties " 00657 "supported\n"); 00658 else 00659 trace(" DSPROPSETID_I3DL2_ListenerProperties not " 00660 "supported\n"); 00661 rc=IKsPropertySet_QuerySupport(pPropertySet, 00662 &DSPROPSETID_I3DL2_BufferProperties,0,&ulTypeSupport); 00663 if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| 00664 KSPROPERTY_SUPPORT_SET))) 00665 trace(" DSPROPSETID_I3DL2_BufferProperties supported\n"); 00666 else 00667 trace(" DSPROPSETID_I3DL2_BufferProperties not " 00668 "supported\n"); 00669 rc=IKsPropertySet_QuerySupport(pPropertySet, 00670 &DSPROPSETID_ZOOMFX_BufferProperties,0,&ulTypeSupport); 00671 if((rc==DS_OK)&&(ulTypeSupport&(KSPROPERTY_SUPPORT_GET| 00672 KSPROPERTY_SUPPORT_SET))) 00673 trace(" DSPROPSETID_ZOOMFX_BufferProperties " 00674 "supported\n"); 00675 else 00676 trace(" DSPROPSETID_ZOOMFX_BufferProperties not " 00677 "supported\n"); 00678 ref=IKsPropertySet_Release(pPropertySet); 00679 /* try a few common ones */ 00680 ok(ref==0,"IKsPropertySet_Release() secondary has %d " 00681 "references, should have 0\n",ref); 00682 } else 00683 trace(" Doesn't support property sets\n"); 00684 00685 ref=IDirectSoundBuffer_Release(secondary); 00686 ok(ref==0,"IDirectSoundBuffer_Release() secondary has %d " 00687 "references, should have 0\n",ref); 00688 } 00689 00690 ref=IDirectSoundBuffer_Release(primary); 00691 ok(ref==0,"IDirectSoundBuffer_Release() primary has %d references, " 00692 "should have 0\n",ref); 00693 } 00694 00695 EXIT: 00696 if (dso!=NULL) { 00697 ref=IDirectSound_Release(dso); 00698 ok(ref==0,"IDirectSound_Release() has %d references, should have 0\n", 00699 ref); 00700 } 00701 return 1; 00702 } 00703 00704 static void propset_buffer_tests(void) 00705 { 00706 HRESULT rc; 00707 rc=DirectSoundEnumerateA(&dsenum_callback,NULL); 00708 ok(rc==DS_OK,"DirectSoundEnumerateA() failed: %s\n",DXGetErrorString8(rc)); 00709 } 00710 00711 START_TEST(propset) 00712 { 00713 HMODULE hDsound; 00714 00715 CoInitialize(NULL); 00716 00717 hDsound = LoadLibraryA("dsound.dll"); 00718 if (!hDsound) { 00719 trace("dsound.dll not found\n"); 00720 return; 00721 } 00722 00723 trace("DLL Version: %s\n", get_file_version("dsound.dll")); 00724 00725 pDirectSoundCreate8 = (void*)GetProcAddress(hDsound, "DirectSoundCreate8"); 00726 pDirectSoundCaptureCreate=(void*)GetProcAddress(hDsound,"DirectSoundCaptureCreate"); 00727 pDirectSoundCaptureCreate8=(void*)GetProcAddress(hDsound,"DirectSoundCaptureCreate8"); 00728 pDirectSoundFullDuplexCreate=(void*)GetProcAddress(hDsound,"DirectSoundFullDuplexCreate"); 00729 00730 propset_private_tests(); 00731 propset_buffer_tests(); 00732 00733 CoUninitialize(); 00734 } Generated on Sat May 26 2012 04:20:13 for ReactOS by
1.7.6.1
|