From 11cffe1dc9b358edd5c36613d40355704e7b9fff Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 19 Mar 2015 15:43:00 -0400 Subject: [PATCH] SDL_RemoveAudioDevice() should specify capture vs output. This lets us reuse values between the two categories without conflicting, etc. --- src/audio/SDL_audio.c | 9 ++++++--- src/audio/SDL_sysaudio.h | 2 +- src/audio/coreaudio/SDL_coreaudio.c | 2 +- src/audio/winmm/SDL_winmm.c | 7 +------ 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index af9175333e660..eafeb337a4db2 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -400,11 +400,14 @@ mark_device_removed(void *handle, SDL_AudioDeviceItem *devices, SDL_bool *remove /* The audio backends call this when a device is removed from the system. */ void -SDL_RemoveAudioDevice(void *handle) +SDL_RemoveAudioDevice(const int iscapture, void *handle) { SDL_LockMutex(current_audio.detectionLock); - mark_device_removed(handle, current_audio.inputDevices, ¤t_audio.captureDevicesRemoved); - mark_device_removed(handle, current_audio.outputDevices, ¤t_audio.outputDevicesRemoved); + if (iscapture) { + mark_device_removed(handle, current_audio.inputDevices, ¤t_audio.captureDevicesRemoved); + } else { + mark_device_removed(handle, current_audio.outputDevices, ¤t_audio.outputDevicesRemoved); + } SDL_UnlockMutex(current_audio.detectionLock); current_audio.impl.FreeDeviceHandle(handle); } diff --git a/src/audio/SDL_sysaudio.h b/src/audio/SDL_sysaudio.h index a339f8166357e..2b4e95688948f 100644 --- a/src/audio/SDL_sysaudio.h +++ b/src/audio/SDL_sysaudio.h @@ -37,7 +37,7 @@ extern void SDL_AddAudioDevice(const int iscapture, const char *name, void *hand /* Audio targets should call this as devices are removed, so SDL can update its list of available devices. */ -extern void SDL_RemoveAudioDevice(void *handle); +extern void SDL_RemoveAudioDevice(const int iscapture, void *handle); /* Audio targets should call this if an opened audio device is lost while being used. This can happen due to i/o errors, or a device being unplugged, diff --git a/src/audio/coreaudio/SDL_coreaudio.c b/src/audio/coreaudio/SDL_coreaudio.c index afd2565dde226..22210b0501a05 100644 --- a/src/audio/coreaudio/SDL_coreaudio.c +++ b/src/audio/coreaudio/SDL_coreaudio.c @@ -246,7 +246,7 @@ reprocess_device_list(const int iscapture, AudioDeviceList **list) if (item->alive) { prev = item; } else { - SDL_RemoveAudioDevice((void *) ((size_t) item->devid)); + SDL_RemoveAudioDevice(iscapture, (void *) ((size_t) item->devid)); if (prev) { prev->next = item->next; } else { diff --git a/src/audio/winmm/SDL_winmm.c b/src/audio/winmm/SDL_winmm.c index bd795cf34fc68..8bc86b8fc7d29 100644 --- a/src/audio/winmm/SDL_winmm.c +++ b/src/audio/winmm/SDL_winmm.c @@ -47,7 +47,7 @@ static void DetectWave##typ##Devs(void) { \ if (wave##typ##GetDevCaps(i,&caps,sizeof(caps))==MMSYSERR_NOERROR) { \ char *name = WIN_StringToUTF8(caps.szPname); \ if (name != NULL) { \ - SDL_AddAudioDevice((int) iscapture, name, (void *) ((size_t) i|(iscap<<31))); \ + SDL_AddAudioDevice((int) iscapture, name, (void *) ((size_t) i)); \ SDL_free(name); \ } \ } \ @@ -232,11 +232,6 @@ WINMM_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) if (handle != NULL) { /* specific device requested? */ const size_t val = (size_t) handle; devId = (UINT) val; - if (iscapture) { - /* we use the top bit to make value unique vs output indices. */ - SDL_assert((devId & (1<<31)) != 0); - devId &= ~(1<<31); - } } /* Initialize all variables that we clean on shutdown */