ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

propset.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.