From 53c6d978735c1cf1bd391c7f9ad49485dfbbd4bc Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 14 Nov 2013 21:19:04 +0100 Subject: ao_alsa: non-interleaved access is not always available I thought this would always work... how disappointing. Revert to interleaved format if requesting non-interleaved fails. --- 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 2ef35db6cf..86c813c143 100644 --- a/audio/out/ao_alsa.c +++ b/audio/out/ao_alsa.c @@ -458,6 +458,11 @@ static int init(struct ao *ao) ? SND_PCM_ACCESS_RW_NONINTERLEAVED : SND_PCM_ACCESS_RW_INTERLEAVED; err = snd_pcm_hw_params_set_access(p->alsa, alsa_hwparams, access); + if (err < 0 && af_fmt_is_planar(ao->format)) { + ao->format = af_fmt_from_planar(ao->format); + access = SND_PCM_ACCESS_RW_INTERLEAVED; + err = snd_pcm_hw_params_set_access(p->alsa, alsa_hwparams, access); + } CHECK_ALSA_ERROR("Unable to set access type"); int num_channels = ao->channels.num; -- cgit v1.2.3