[vlc-commits] PulseAudio: correct tlength value w.r.t. to VLC behavior

Rémi Denis-Courmont git at videolan.org
Tue Jul 19 17:11:30 CEST 2011


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Jul 19 18:11:11 2011 +0300| [981005b0e1d9c015166280e7509305c5951c1518] | committer: Rémi Denis-Courmont

PulseAudio: correct tlength value w.r.t. to VLC behavior

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=981005b0e1d9c015166280e7509305c5951c1518
---

 modules/audio_output/pulse.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/modules/audio_output/pulse.c b/modules/audio_output/pulse.c
index 13494cb..1381559 100644
--- a/modules/audio_output/pulse.c
+++ b/modules/audio_output/pulse.c
@@ -489,7 +489,13 @@ static int Open(vlc_object_t *obj)
     const uint32_t byterate = pa_bytes_per_second(&ss);
     struct pa_buffer_attr attr;
     attr.maxlength = -1;
-    attr.tlength = byterate * AOUT_MAX_PREPARE_TIME / CLOCK_FREQ;
+    /* PulseAudio assumes that tlength bytes are available in the buffer. Thus
+     * we need to be conservative and set the minimum value that the VLC
+     * audio decoder thread warrants. Otherwise, PulseAudio buffers will
+     * underrun on hardware with large buffers. VLC keeps at least
+     * AOUT_MIN_PREPARE and at most AOUT_MAX_PREPARE worth of audio buffers.
+     * TODO? tlength could be adaptively increased to reduce wakeups. */
+    attr.tlength = byterate * AOUT_MIN_PREPARE_TIME / CLOCK_FREQ;
     attr.prebuf = 0; /* trigger manually */
     attr.minreq = -1;
     attr.fragsize = 0; /* not used for output */



More information about the vlc-commits mailing list