فهرست منبع

SDL_RemoveAudioDevice() should specify capture vs output.

This lets us reuse values between the two categories without conflicting, etc.
Ryan C. Gordon 10 سال پیش
والد
کامیت
11cffe1dc9
4فایلهای تغییر یافته به همراه9 افزوده شده و 11 حذف شده
  1. 6 3
      src/audio/SDL_audio.c
  2. 1 1
      src/audio/SDL_sysaudio.h
  3. 1 1
      src/audio/coreaudio/SDL_coreaudio.c
  4. 1 6
      src/audio/winmm/SDL_winmm.c

+ 6 - 3
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, &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);
 }

+ 1 - 1
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,

+ 1 - 1
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 {

+ 1 - 6
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 */