summaryrefslogtreecommitdiffstats
path: root/audio/out
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-12-20 17:18:50 +0100
committerwm4 <wm4@nowhere>2014-12-20 17:18:50 +0100
commita69f168dff3ec01833d487b830a06589e5b24e88 (patch)
tree3425b8c55b47cdf48fbdfe36681ef808ecffbcf9 /audio/out
parent0dc455eb16320b602f2e670d9173f3b6b826b249 (diff)
downloadmpv-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/out')
-rw-r--r--audio/out/ao_alsa.c5
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);