66 FIXME(
"Unknown MMSYS error %d\n",
err);
104 HKEY hkey, appkey = 0;
120 if ((
p =
strrchr( appname,
'/' ))) appname =
p + 1;
121 if ((
p =
strrchr( appname,
'\\' ))) appname =
p + 1;
122 strcat( appname,
"\\DirectSound" );
123 TRACE(
"appname = [%s]\n", appname);
124 if (
RegOpenKeyA( tmpkey, appname, &appkey )) appkey = 0;
176 TRACE(
"ds_hw_accel = %s\n",
192 return "DSDEVID_DefaultPlayback";
193 else if (
IsEqualGUID(&DSDEVID_DefaultVoicePlayback, pGuid))
194 return "DSDEVID_DefaultVoicePlayback";
195 else if (
IsEqualGUID(&DSDEVID_DefaultCapture, pGuid))
196 return "DSDEVID_DefaultCapture";
197 else if (
IsEqualGUID(&DSDEVID_DefaultVoiceCapture, pGuid))
198 return "DSDEVID_DefaultVoiceCapture";
226 if ( pGuidSrc ==
NULL) {
227 WARN(
"invalid parameter: pGuidSrc == NULL\n");
231 if ( pGuidDest ==
NULL ) {
232 WARN(
"invalid parameter: pGuidDest == NULL\n");
236 if (
IsEqualGUID( &DSDEVID_DefaultPlayback, pGuidSrc ) ||
237 IsEqualGUID( &DSDEVID_DefaultVoicePlayback, pGuidSrc ) ) {
243 if (
IsEqualGUID( &DSDEVID_DefaultCapture, pGuidSrc ) ||
244 IsEqualGUID( &DSDEVID_DefaultVoiceCapture, pGuidSrc ) ) {
250 *pGuidDest = *pGuidSrc;
292 if (lpDSEnumCallback ==
NULL) {
293 WARN(
"invalid parameter: lpDSEnumCallback == NULL\n");
297 context.callA = lpDSEnumCallback;
327 TRACE(
"lpDSEnumCallback = %p, lpContext = %p\n",
328 lpDSEnumCallback, lpContext);
330 if (lpDSEnumCallback ==
NULL) {
331 WARN(
"invalid parameter: lpDSEnumCallback == NULL\n");
341 for (wod = 0; wod < devs; ++wod) {
345 TRACE(
"calling lpDSEnumCallback(NULL,\"%s\",\"%s\",%p)\n",
346 "Primary Sound Driver",
desc.szDrvname,lpContext);
348 wDesc,
sizeof(wDesc)/
sizeof(
WCHAR) );
357 for (wod = 0; wod < devs; ++wod) {
360 TRACE(
"calling lpDSEnumCallback(%s,\"%s\",\"%s\",%p)\n",
363 wDesc,
sizeof(wDesc)/
sizeof(
WCHAR) );
364 wDesc[(
sizeof(wDesc)/
sizeof(
WCHAR)) - 1] =
'\0';
367 wName,
sizeof(wName)/
sizeof(
WCHAR) );
368 wName[(
sizeof(wName)/
sizeof(
WCHAR)) - 1] =
'\0';
396 if (lpDSEnumCallback ==
NULL) {
397 WARN(
"invalid parameter: lpDSEnumCallback == NULL\n");
401 context.callA = lpDSEnumCallback;
432 TRACE(
"(%p,%p)\n", lpDSEnumCallback, lpContext );
434 if (lpDSEnumCallback ==
NULL) {
435 WARN(
"invalid parameter: lpDSEnumCallback == NULL\n");
444 for (wid = 0; wid < devs; ++wid) {
448 TRACE(
"calling lpDSEnumCallback(NULL,\"%s\",\"%s\",%p)\n",
449 "Primary Sound Capture Driver",
desc.szDrvname,lpContext);
451 wDesc,
sizeof(wDesc)/
sizeof(
WCHAR) );
453 wName,
sizeof(wName)/
sizeof(
WCHAR) );
454 wName[(
sizeof(wName)/
sizeof(
WCHAR)) - 1] =
'\0';
456 if (lpDSEnumCallback(
NULL, wDesc, wName, lpContext) ==
FALSE)
464 for (wid = 0; wid < devs; ++wid) {
467 TRACE(
"calling lpDSEnumCallback(%s,\"%s\",\"%s\",%p)\n",
470 wDesc,
sizeof(wDesc)/
sizeof(
WCHAR) );
471 wDesc[(
sizeof(wDesc)/
sizeof(
WCHAR)) - 1] =
'\0';
474 wName,
sizeof(wName)/
sizeof(
WCHAR) );
475 wName[(
sizeof(wName)/
sizeof(
WCHAR)) - 1] =
'\0';
513 IUnknown_AddRef(iface);
532 LPCLASSFACTORY iface,
544 WARN(
"invalid parameter\n");
548 return This->pfnCreateInstance(
riid, ppobj);
599 WARN(
"invalid parameter\n");
639 #define INIT_GUID(guid, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 640 guid.Data1 = l; guid.Data2 = w1; guid.Data3 = w2; \ 641 guid.Data4[0] = b1; guid.Data4[1] = b2; guid.Data4[2] = b3; \ 642 guid.Data4[3] = b4; guid.Data4[4] = b5; guid.Data4[5] = b6; \ 643 guid.Data4[6] = b7; guid.Data4[7] = b8; 655 TRACE(
"DLL_PROCESS_ATTACH\n");
659 INIT_GUID(
DSOUND_renderer_guids[
i], 0xbd6dd71a, 0x3deb, 0x11d1, 0xb1, 0x71, 0x00, 0xc0, 0x4f, 0xc2, 0x00, 0x00 +
i);
660 INIT_GUID(
DSOUND_capture_guids[
i], 0xbd6dd71b, 0x3deb, 0x11d1, 0xb1, 0x71, 0x00, 0xc0, 0x4f, 0xc2, 0x00, 0x00 +
i);
668 TRACE(
"DLL_PROCESS_DETACH\n");
671 TRACE(
"UNKNOWN REASON\n");
void setup_dsound_options(void)
static DWORD get_config_key(HKEY defkey, HKEY appkey, const char *name, char *buffer, DWORD size)
HRESULT(* FnCreateInstance)(REFIID riid, LPVOID *ppobj)
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
HRESULT WINAPI DllRegisterServer(void)
#define WideCharToMultiByte
char * strcat(char *DstString, const char *SrcString)
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
UINT WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA lpDSEnumCallback, LPVOID lpContext)
#define HKEY_CURRENT_USER
HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA lpDSEnumCallback, LPVOID lpContext)
HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest)
HRESULT DSOUND_Create8(REFIID riid, LPDIRECTSOUND8 *ppDS)
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
HRESULT WINAPI DllUnregisterServer(void)
#define DLL_PROCESS_ATTACH
#define MMSYSERR_INVALHANDLE
_Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
static BOOL CALLBACK a_to_w_callback(LPGUID guid, LPCWSTR descW, LPCWSTR modW, LPVOID data)
#define CLASS_E_CLASSNOTAVAILABLE
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
static IN DWORD IN LPVOID lpvReserved
UINT WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
HRESULT DSOUND_CaptureCreate8(REFIID riid, LPDIRECTSOUNDCAPTURE8 *ppDSC8)
struct tagIClassFactoryImpl IClassFactoryImpl
HRESULT IKsPrivatePropertySetImpl_Create(REFIID riid, IKsPropertySet **piks) DECLSPEC_HIDDEN
HRESULT DSOUND_Create(REFIID riid, LPDIRECTSOUND *ppDS)
static int ds_default_playback
static HINSTANCE instance
#define DSERR_OUTOFMEMORY
LONG WINAPI RegCloseKey(HKEY hKey)
#define MMSYSERR_NODRIVER
#define DSERR_INVALIDPARAM
HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW lpDSEnumCallback, LPVOID lpContext)
#define INIT_GUID(guid, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8)
#define WAVERR_STILLPLAYING
BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
GUID DSOUND_capture_guids[MAXWAVEDRIVERS]
static const WCHAR desc[]
DirectSoundDevice * DSOUND_renderer[MAXWAVEDRIVERS]
UINT WINAPI waveOutGetNumDevs(void)
#define DS_HW_ACCEL_EMULATION
static HRESULT WINAPI DSCF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppobj)
#define ERROR_FILE_NOT_FOUND
static HRESULT WINAPI DSCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
FnCreateInstance pfnCreateInstance
#define DLL_PROCESS_DETACH
HRESULT DSOUND_CaptureCreate(REFIID riid, LPDIRECTSOUNDCAPTURE *ppDSC)
static HRESULT WINAPI DSCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
#define MMSYSERR_ALLOCATED
#define UlongToHandle(ul)
static ULONG WINAPI DSCF_AddRef(LPCLASSFACTORY iface)
#define MMSYSERR_NOTSUPPORTED
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
static ULONG WINAPI DSCF_Release(LPCLASSFACTORY iface)
#define DSERR_UNSUPPORTED
HRESULT WINAPI DllCanUnloadNow(void)
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
static IClassFactoryImpl DSOUND_CF[]
#define DS_HW_ACCEL_STANDARD
HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW lpDSEnumCallback, LPVOID lpContext)
#define CLASS_E_NOAGGREGATION
static const WCHAR modW[]
int ds_default_sample_rate
BOOL WINAPI GetModuleHandleExW(IN DWORD dwFlags, IN LPCWSTR lpwModuleName OPTIONAL, OUT HMODULE *phModule)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define MMSYSERR_INVALPARAM
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
BOOL(CALLBACK * LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID)
#define MultiByteToWideChar
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
static int ds_default_capture
#define WAVERR_UNPREPARED
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
int strcmp(const char *String1, const char *String2)
UINT WINAPI waveInGetNumDevs(void)
int ds_snd_shadow_maxsize
int ds_default_bits_per_sample
static const char * get_device_id(LPCGUID pGuid)
GUID DSOUND_renderer_guids[MAXWAVEDRIVERS]
#define DS_HW_ACCEL_BASIC
static const IClassFactoryVtbl DSCF_Vtbl
const GUID IID_IClassFactory
HRESULT DSOUND_FullDuplexCreate(REFIID riid, LPDIRECTSOUNDFULLDUPLEX *ppDSFD) DECLSPEC_HIDDEN
BOOL(CALLBACK * LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID)
#define IsEqualIID(riid1, riid2)
DirectSoundCaptureDevice * DSOUND_capture[MAXWAVEDRIVERS]