From a69f168dff3ec01833d487b830a06589e5b24e88 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 20 Dec 2014 17:18:50 +0100 Subject: ao_alsa: fix setting mono channel map When setting the ALSA channel map, we never actually set the map we got from ALSA directly, but convert it to mpv's, and then back to ALSA's. mpv and ALSA use different conventions for mono, and there is already an exception for ALSA->mpv, but not mpv->ALSA. --- audio/out/ao_alsa.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'audio/out') diff --git a/audio/out/ao_alsa.c b/audio/out/ao_alsa.c index 80f6ebf099..5a0c9071ec 100644 --- a/audio/out/ao_alsa.c +++ b/audio/out/ao_alsa.c @@ -538,6 +538,10 @@ static int init_device(struct ao *ao) for (int c = 0; c < dev_chmap.num; c++) alsa_chmap->pos[c] = find_alsa_channel(dev_chmap.speaker[c]); + // mpv and ALSA use different conventions for mono + if (dev_chmap.num == 1 && dev_chmap.speaker[0] == MP_SP(FC)) + alsa_chmap->pos[0] = SND_CHMAP_MONO; + char tmp[128]; if (snd_pcm_chmap_print(alsa_chmap, sizeof(tmp), tmp) > 0) MP_VERBOSE(ao, "trying to set ALSA channel map: %s\n", tmp); @@ -603,6 +607,7 @@ static int init_device(struct ao *ao) MP_WARN(ao, "Got unknown channel map from ALSA.\n"); } + // mpv and ALSA use different conventions for mono if (ao->channels.num == 1) ao->channels.speaker[0] = MP_SP(FC); -- cgit v1.2.3