diff options
author | wm4 <wm4@nowhere> | 2014-12-20 17:18:50 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-12-20 17:18:50 +0100 |
commit | a69f168dff3ec01833d487b830a06589e5b24e88 (patch) | |
tree | 3425b8c55b47cdf48fbdfe36681ef808ecffbcf9 /audio | |
parent | 0dc455eb16320b602f2e670d9173f3b6b826b249 (diff) | |
download | mpv-a69f168dff3ec01833d487b830a06589e5b24e88.tar.bz2 mpv-a69f168dff3ec01833d487b830a06589e5b24e88.tar.xz |
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.
Diffstat (limited to 'audio')
-rw-r--r-- | audio/out/ao_alsa.c | 5 |
1 files changed, 5 insertions, 0 deletions
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); |