summaryrefslogtreecommitdiffstats
path: root/audio/out/ao_alsa.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-12-01 15:28:06 +0100
committerwm4 <wm4@nowhere>2014-12-01 15:28:06 +0100
commitb0ed93d87ddf351a6983d3cb87063c75efa04281 (patch)
tree192ce677bd3159c1820eb9bc71bbc1a047621287 /audio/out/ao_alsa.c
parent98da9afb8fcadca2a015a5aa44df2f37ada84f52 (diff)
downloadmpv-b0ed93d87ddf351a6983d3cb87063c75efa04281.tar.bz2
mpv-b0ed93d87ddf351a6983d3cb87063c75efa04281.tar.xz
audio: allow more than 20 channel map entries
This could trigger an assertion when using ao_alsa or ao_coreaudio. The code was simply assuming the number of channel maps was bounded statically (which was true at first in both AOs). Fix by using dynamic memory allocation. It needs to be explicitly enabled by the AOs by setting a temp context, because otherwise the memory couldn't be freed. (Or at least this seems to be the most elegant solution.) Fixes #1306.
Diffstat (limited to 'audio/out/ao_alsa.c')
-rw-r--r--audio/out/ao_alsa.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/audio/out/ao_alsa.c b/audio/out/ao_alsa.c
index 86745c6e80..4e54f161fe 100644
--- a/audio/out/ao_alsa.c
+++ b/audio/out/ao_alsa.c
@@ -279,7 +279,7 @@ static int find_alsa_channel(int mp_channel)
static bool query_chmaps(struct ao *ao, struct mp_chmap *chmap)
{
struct priv *p = ao->priv;
- struct mp_chmap_sel chmap_sel = {0};
+ struct mp_chmap_sel chmap_sel = {.tmp = p};
snd_pcm_chmap_query_t **maps = snd_pcm_query_chmaps(p->alsa);
if (!maps)