Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
SDL_RemoveAudioDevice() should specify capture vs output.
This lets us reuse values between the two categories without conflicting, etc.
  • Loading branch information
icculus committed Mar 19, 2015
1 parent 1e78ef2 commit 11cffe1
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 11 deletions.
9 changes: 6 additions & 3 deletions src/audio/SDL_audio.c
Expand Up @@ -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, &current_audio.captureDevicesRemoved);
mark_device_removed(handle, current_audio.outputDevices, &current_audio.outputDevicesRemoved);
if (iscapture) {
mark_device_removed(handle, current_audio.inputDevices, &current_audio.captureDevicesRemoved);
} else {
mark_device_removed(handle, current_audio.outputDevices, &current_audio.outputDevicesRemoved);
}
SDL_UnlockMutex(current_audio.detectionLock);
current_audio.impl.FreeDeviceHandle(handle);
}
Expand Down
2 changes: 1 addition & 1 deletion src/audio/SDL_sysaudio.h
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion src/audio/coreaudio/SDL_coreaudio.c
Expand Up @@ -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 {
Expand Down
7 changes: 1 addition & 6 deletions src/audio/winmm/SDL_winmm.c
Expand Up @@ -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); \
} \
} \
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit 11cffe1

Please sign in to comment.