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/pulseaudio.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/pulseaudio.c')
-rw-r--r-- | plugins/dfsound/pulseaudio.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/plugins/dfsound/pulseaudio.c b/plugins/dfsound/pulseaudio.c index 8ffd58f..0f4e32e 100644 --- a/plugins/dfsound/pulseaudio.c +++ b/plugins/dfsound/pulseaudio.c @@ -288,34 +288,32 @@ static void pulse_finish(void) } //////////////////////////////////////////////////////////////////////// -// GET BYTES BUFFERED +// GET BUFFER AVAILABLE //////////////////////////////////////////////////////////////////////// -static int pulse_busy(void) +static float pulse_capacity(void) { int free_space; if ((device.mainloop == NULL) || (device.api == NULL) || ( device.context == NULL) || (device.stream == NULL)) - return 1; + return 0; pa_threaded_mainloop_lock (device.mainloop); free_space = pa_stream_writable_size (device.stream); pa_threaded_mainloop_unlock (device.mainloop); + if (free_space == 0) return 0; - //fprintf (stderr, "Free space: %d\n", free_space); - //fprintf (stderr, "Used space: %d\n", maxlength - free_space); - if (free_space < mixlen * 3) - { - // Don't buffer anymore, just play - //fprintf (stderr, "Not buffering.\n"); - return 1; - } - else - { - // Buffer some sound - //fprintf (stderr, "Buffering.\n"); - return 0; - } + return (float)free_space / mixlen; +} + + +//////////////////////////////////////////////////////////////////////// +// GET BYTES BUFFERED +//////////////////////////////////////////////////////////////////////// + +static int pulse_busy(void) +{ + return pulse_capacity() < 0.33; } //////////////////////////////////////////////////////////////////////// @@ -346,4 +344,5 @@ void out_register_pulse(struct out_driver *drv) drv->finish = pulse_finish; drv->busy = pulse_busy; drv->feed = pulse_feed; + drv->capacity = pulse_capacity; } |