diff options
author | neonloop | 2021-03-14 18:54:30 +0000 |
---|---|---|
committer | neonloop | 2021-03-14 19:28:36 +0000 |
commit | cc67e49563096e4367881e8bbe4554f1a7d21595 (patch) | |
tree | 393883d80d2b417d67a4fb2150dbd37392017802 /plugins/dfsound/alsa.c | |
parent | 34c62fb129becec9e61a48227d9ed89867cdd470 (diff) | |
download | pcsx_rearmed-cc67e49563096e4367881e8bbe4554f1a7d21595.tar.gz pcsx_rearmed-cc67e49563096e4367881e8bbe4554f1a7d21595.tar.bz2 pcsx_rearmed-cc67e49563096e4367881e8bbe4554f1a7d21595.zip |
Adds frameskip based on free audio buffer space
Diffstat (limited to 'plugins/dfsound/alsa.c')
-rw-r--r-- | plugins/dfsound/alsa.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/plugins/dfsound/alsa.c b/plugins/dfsound/alsa.c index 6b9f83e..9873655 100644 --- a/plugins/dfsound/alsa.c +++ b/plugins/dfsound/alsa.c @@ -166,20 +166,22 @@ static void alsa_finish(void) } } -// GET BYTES BUFFERED -static int alsa_busy(void) -{ +static float alsa_capacity(void) { int l; - if (handle == NULL) // failed to open? - return 1; + if (handle == NULL) return 0; + if (buffer_size == 0) return 0; + l = snd_pcm_avail(handle); if (l < 0) return 0; - if (l < buffer_size / 2) // can we write in at least the half of fragments? - l = 1; // -> no? wait - else l = 0; // -> else go on - return l; + return (float)l / buffer_size; +} + +// GET BYTES BUFFERED +static int alsa_busy(void) +{ + return alsa_capacity() < 0.5; } // FEED SOUND DATA @@ -219,4 +221,5 @@ void out_register_alsa(struct out_driver *drv) drv->finish = alsa_finish; drv->busy = alsa_busy; drv->feed = alsa_feed; + drv->capacity = alsa_capacity; } |