summaryrefslogtreecommitdiffstats
path: root/audio/out
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-11-14 21:19:04 +0100
committerwm4 <wm4@nowhere>2013-11-14 21:19:04 +0100
commit53c6d978735c1cf1bd391c7f9ad49485dfbbd4bc (patch)
treec767a5403cf92863581db0c301df05b838c65efd /audio/out
parente91edf9aed3fde6f0038d7db8acfc1653d8fe9d7 (diff)
downloadmpv-53c6d978735c1cf1bd391c7f9ad49485dfbbd4bc.tar.bz2
mpv-53c6d978735c1cf1bd391c7f9ad49485dfbbd4bc.tar.xz
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.
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 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;