diff options
author | Chris Robinson <[email protected]> | 2015-08-14 19:05:16 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2015-08-14 19:05:16 -0700 |
commit | f6e52debb5106dcc6ff99fe005da4501fd56522d (patch) | |
tree | 6abe803f8bf8feef855ca8fd7ee2d83a20a372c7 /Alc/backends | |
parent | c1146d27c6b35a2c18617e11c7b14fc7b1840afa (diff) |
Fix handling of PulseAudio devices that have the same description
Diffstat (limited to 'Alc/backends')
-rw-r--r-- | Alc/backends/pulseaudio.c | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/Alc/backends/pulseaudio.c b/Alc/backends/pulseaudio.c index b8a0b0a1..52b5d29c 100644 --- a/Alc/backends/pulseaudio.c +++ b/Alc/backends/pulseaudio.c @@ -517,6 +517,7 @@ static void ALCpulsePlayback_deviceCallback(pa_context *UNUSED(context), const p pa_threaded_mainloop *loop = pdata; const DevMap *iter; DevMap entry; + int count; if(eol) { @@ -526,18 +527,34 @@ static void ALCpulsePlayback_deviceCallback(pa_context *UNUSED(context), const p #define MATCH_INFO_NAME(iter) (al_string_cmp_cstr((iter)->device_name, info->name) == 0) VECTOR_FIND_IF(iter, const DevMap, PlaybackDevices, MATCH_INFO_NAME); + if(iter != VECTOR_ITER_END(PlaybackDevices)) return; #undef MATCH_INFO_NAME - if(iter != VECTOR_ITER_END(PlaybackDevices)) - return; - - TRACE("Got device \"%s\", \"%s\"\n", info->description, info->name); AL_STRING_INIT(entry.name); AL_STRING_INIT(entry.device_name); - al_string_copy_cstr(&entry.name, info->description); al_string_copy_cstr(&entry.device_name, info->name); + count = 0; + while(1) + { + al_string_copy_cstr(&entry.name, info->description); + if(count != 0) + { + char str[64]; + snprintf(str, sizeof(str), " #%d", count+1); + al_string_append_cstr(&entry.name, str); + } + +#define MATCH_ENTRY(i) (al_string_cmp(entry.name, (i)->name) == 0) + VECTOR_FIND_IF(iter, const DevMap, PlaybackDevices, MATCH_ENTRY); + if(iter == VECTOR_ITER_END(PlaybackDevices)) break; +#undef MATCH_ENTRY + count++; + } + + TRACE("Got device \"%s\", \"%s\"\n", al_string_get_cstr(entry.name), al_string_get_cstr(entry.device_name)); + VECTOR_PUSH_BACK(PlaybackDevices, entry); } @@ -1173,6 +1190,7 @@ static void ALCpulseCapture_deviceCallback(pa_context *UNUSED(context), const pa pa_threaded_mainloop *loop = pdata; const DevMap *iter; DevMap entry; + int count; if(eol) { @@ -1182,18 +1200,34 @@ static void ALCpulseCapture_deviceCallback(pa_context *UNUSED(context), const pa #define MATCH_INFO_NAME(iter) (al_string_cmp_cstr((iter)->device_name, info->name) == 0) VECTOR_FIND_IF(iter, const DevMap, CaptureDevices, MATCH_INFO_NAME); + if(iter != VECTOR_ITER_END(CaptureDevices)) return; #undef MATCH_INFO_NAME - if(iter != VECTOR_ITER_END(CaptureDevices)) - return; - - TRACE("Got device \"%s\", \"%s\"\n", info->description, info->name); AL_STRING_INIT(entry.name); AL_STRING_INIT(entry.device_name); - al_string_copy_cstr(&entry.name, info->description); al_string_copy_cstr(&entry.device_name, info->name); + count = 0; + while(1) + { + al_string_copy_cstr(&entry.name, info->description); + if(count != 0) + { + char str[64]; + snprintf(str, sizeof(str), " #%d", count+1); + al_string_append_cstr(&entry.name, str); + } + +#define MATCH_ENTRY(i) (al_string_cmp(entry.name, (i)->name) == 0) + VECTOR_FIND_IF(iter, const DevMap, CaptureDevices, MATCH_ENTRY); + if(iter == VECTOR_ITER_END(CaptureDevices)) break; +#undef MATCH_ENTRY + count++; + } + + TRACE("Got device \"%s\", \"%s\"\n", al_string_get_cstr(entry.name), al_string_get_cstr(entry.device_name)); + VECTOR_PUSH_BACK(CaptureDevices, entry); } |