[pulseaudio-discuss] [PATCH] alsa: Fix device reservation fails when a device string has seperator(, )
KimJeongYeon
jeongyeon.kim at samsung.com
Fri Mar 25 06:34:29 UTC 2016
For example, the device parameter of pa_alsa_get_reserve_name() is "hw:USB,0",
snd_card_get_index() always fails. Because seperator(,) wasn't regarded.
Therefore, JACK couldn't obtain audio device from Pulseaudio.
Signed-off-by: KimJeongYeon <jeongyeon.kim at samsung.com>
---
src/modules/alsa/alsa-util.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index a4bb449..73e0365 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1344,23 +1344,36 @@ char *pa_alsa_get_driver_name_by_pcm(snd_pcm_t *pcm) {
}
char *pa_alsa_get_reserve_name(const char *device) {
- const char *t;
+ char *card_name, *start, *end;
int i;
pa_assert(device);
- if ((t = strchr(device, ':')))
- device = t+1;
+ card_name = pa_xstrdup(device);
+
+ if ((start = strchr(card_name, ':'))) {
+ start++;
+
+ if ((end = strchr(start, ','))) {
+ *end = '\0';
+ }
+
+ strcpy(card_name, start);
+ }
- if ((i = snd_card_get_index(device)) < 0) {
+ if ((i = snd_card_get_index(card_name)) < 0) {
int32_t k;
- if (pa_atoi(device, &k) < 0)
+ if (pa_atoi(device, &k) < 0) {
+ pa_xfree(card_name);
return NULL;
+ }
i = (int) k;
}
+ pa_xfree(card_name);
+
return pa_sprintf_malloc("Audio%i", i);
}
--
2.7.4
More information about the pulseaudio-discuss
mailing list