From 759cdf6159d8aab8bcfb129d9733821ca0206938 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 1 Nov 2023 00:39:51 -0400 Subject: [PATCH] audio: Fixed GetFirstAudioDeviceAdded(). It forgot to check for the type of device needed. --- src/audio/SDL_audio.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index a46f4efa53..bb6acbe2bf 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -761,9 +761,11 @@ static SDL_AudioDevice *GetFirstAddedAudioDevice(const SDL_bool iscapture) void *iter = NULL; while (SDL_IterateHashTable(current_audio.device_hash, &key, &value, &iter)) { const SDL_AudioDeviceID devid = (SDL_AudioDeviceID) (uintptr_t) key; + // bit #0 of devid is set for output devices and unset for capture. // bit #1 of devid is set for physical devices and unset for logical. - const SDL_bool isphysical = (devid & (1<<1)) ? SDL_TRUE : SDL_FALSE; - if (isphysical && (devid < highest)) { + const SDL_bool devid_iscapture = (devid & (1 << 0)) ? SDL_FALSE : SDL_TRUE; + const SDL_bool isphysical = (devid & (1 << 1)) ? SDL_TRUE : SDL_FALSE; + if (isphysical && (devid_iscapture == iscapture) && (devid < highest)) { highest = devid; retval = (SDL_AudioDevice *) value; }