mirror of https://github.com/encounter/SDL.git
Audio hotplug fixes for winmm and XAudio2 backends.
This commit is contained in:
parent
c1091f32fb
commit
182a7768e1
|
@ -299,7 +299,7 @@ add_audio_device(const char *name, void *handle, SDL_AudioDeviceItem **devices,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_assert(handle != NULL);
|
SDL_assert(handle != NULL); /* we reserve NULL, audio backends can't use it. */
|
||||||
|
|
||||||
item->handle = handle;
|
item->handle = handle;
|
||||||
SDL_strlcpy(item->name, name, size - sizeof (SDL_AudioDeviceItem));
|
SDL_strlcpy(item->name, name, size - sizeof (SDL_AudioDeviceItem));
|
||||||
|
|
|
@ -46,7 +46,7 @@ static void DetectWave##typ##Devs(void) { \
|
||||||
if (wave##typ##GetDevCaps(i,&caps,sizeof(caps))==MMSYSERR_NOERROR) { \
|
if (wave##typ##GetDevCaps(i,&caps,sizeof(caps))==MMSYSERR_NOERROR) { \
|
||||||
char *name = WIN_StringToUTF8(caps.szPname); \
|
char *name = WIN_StringToUTF8(caps.szPname); \
|
||||||
if (name != NULL) { \
|
if (name != NULL) { \
|
||||||
SDL_AddAudioDevice((int) iscapture, name, (void *) ((size_t) i)); \
|
SDL_AddAudioDevice((int) iscapture, name, (void *) ((size_t) i+1)); \
|
||||||
SDL_free(name); \
|
SDL_free(name); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
|
@ -228,7 +228,8 @@ WINMM_OpenDevice(_THIS, void *handle, const char *devname, int iscapture)
|
||||||
UINT i;
|
UINT i;
|
||||||
|
|
||||||
if (handle != NULL) { /* specific device requested? */
|
if (handle != NULL) { /* specific device requested? */
|
||||||
const size_t val = (size_t) handle;
|
/* -1 because we increment the original value to avoid NULL. */
|
||||||
|
const size_t val = ((size_t) handle) - 1;
|
||||||
devId = (UINT) val;
|
devId = (UINT) val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ XAUDIO2_DetectDevices(void)
|
||||||
if (IXAudio2_GetDeviceDetails(ixa2, i, &details) == S_OK) {
|
if (IXAudio2_GetDeviceDetails(ixa2, i, &details) == S_OK) {
|
||||||
char *str = WIN_StringToUTF8(details.DisplayName);
|
char *str = WIN_StringToUTF8(details.DisplayName);
|
||||||
if (str != NULL) {
|
if (str != NULL) {
|
||||||
SDL_AddAudioDevice(SDL_FALSE, str, (void *) ((size_t) i));
|
SDL_AddAudioDevice(SDL_FALSE, str, (void *) ((size_t) i+1));
|
||||||
SDL_free(str); /* SDL_AddAudioDevice made a copy of the string. */
|
SDL_free(str); /* SDL_AddAudioDevice made a copy of the string. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -297,7 +297,7 @@ XAUDIO2_OpenDevice(_THIS, void *handle, const char *devname, int iscapture)
|
||||||
#if defined(SDL_XAUDIO2_WIN8)
|
#if defined(SDL_XAUDIO2_WIN8)
|
||||||
LPCWSTR devId = NULL;
|
LPCWSTR devId = NULL;
|
||||||
#else
|
#else
|
||||||
UINT32 devId = (UINT32) ((size_t) handle); /* 0 == system default device. */
|
UINT32 devId = 0; /* 0 == system default device. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static IXAudio2VoiceCallbackVtbl callbacks_vtable = {
|
static IXAudio2VoiceCallbackVtbl callbacks_vtable = {
|
||||||
|
@ -312,6 +312,16 @@ XAUDIO2_OpenDevice(_THIS, void *handle, const char *devname, int iscapture)
|
||||||
|
|
||||||
static IXAudio2VoiceCallback callbacks = { &callbacks_vtable };
|
static IXAudio2VoiceCallback callbacks = { &callbacks_vtable };
|
||||||
|
|
||||||
|
#if defined(SDL_XAUDIO2_WIN8)
|
||||||
|
/* !!! FIXME: hook up hotplugging. */
|
||||||
|
#else
|
||||||
|
if (handle != NULL) { /* specific device requested? */
|
||||||
|
/* -1 because we increment the original value to avoid NULL. */
|
||||||
|
const size_t val = ((size_t) handle) - 1;
|
||||||
|
devId = (UINT32) val;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (XAudio2Create(&ixa2, 0, XAUDIO2_DEFAULT_PROCESSOR) != S_OK) {
|
if (XAudio2Create(&ixa2, 0, XAUDIO2_DEFAULT_PROCESSOR) != S_OK) {
|
||||||
return SDL_SetError("XAudio2: XAudio2Create() failed at open.");
|
return SDL_SetError("XAudio2: XAudio2Create() failed at open.");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue