summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Ekström <jeebjp@gmail.com>2018-09-20 20:11:45 +0300
committerJan Ekström <jeebjp@gmail.com>2018-09-29 23:07:19 +0300
commit1dd77e41c1c9b99802c1f46eccee2ed30432df15 (patch)
tree857d539ba3334b70f03f8a32f9ad2fb41118e90f
parent8e0b94e7eb50ecb6a0589bc0729e1c76687e1745 (diff)
downloadmpv-1dd77e41c1c9b99802c1f46eccee2ed30432df15.tar.bz2
mpv-1dd77e41c1c9b99802c1f46eccee2ed30432df15.tar.xz
ao_alsa: early exit get_space if paused or ALSA is not ready
This has been way too long coming, and for me to notice that a whole lot of ao_alsa functions do an early return if the AO is paused. For the STATE_SETUP case, I had this reproduced once, and never since. Still, seems like we can start calling this function before the ALSA device has been fully initialized so we might as well early exit in that case. (cherry picked from commit 3218a5808229b06bd7e2d41a912e7e7031525d56)
-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 32f08bef59..6b93b854c0 100644
--- a/audio/out/ao_alsa.c
+++ b/audio/out/ao_alsa.c
@@ -940,6 +940,11 @@ static int get_space(struct ao *ao)
{
struct priv *p = ao->priv;
+ // in case of pausing or the device still being configured,
+ // just return our buffer size.
+ if (p->paused || snd_pcm_state(p->alsa) == SND_PCM_STATE_SETUP)
+ return p->buffersize;
+
snd_pcm_sframes_t space = snd_pcm_avail(p->alsa);
if (space < 0) {
MP_ERR(ao, "Error received from snd_pcm_avail (%ld, %s)!\n",