src/pulse/def.h | 8 +++++++- src/pulsecore/protocol-native.c | 12 ++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-)
New commits: commit feeec28de481de41fc99f73ccc9bc64ff06235f8 Author: David Henningsson <david.hennings...@canonical.com> Date: Mon Mar 25 09:20:16 2013 +0100 client API: Document buffer_attr.maxlength Let's officially support that people use maxlength to put an upper bound on playback latency. Signed-off-by: David Henningsson <david.hennings...@canonical.com> diff --git a/src/pulse/def.h b/src/pulse/def.h index 495302f..a7f592b 100644 --- a/src/pulse/def.h +++ b/src/pulse/def.h @@ -360,7 +360,13 @@ typedef struct pa_buffer_attr { uint32_t maxlength; /**< Maximum length of the buffer in bytes. Setting this to (uint32_t) -1 * will initialize this to the maximum value supported by server, - * which is recommended. */ + * which is recommended. + * + * In strict low-latency playback scenarios you might want to set this to + * a lower value, likely together with the PA_STREAM_ADJUST_LATENCY flag. + * If you do so, you ensure that the latency doesn't grow beyond what is + * acceptable for the use case, at the cost of getting more underruns if + * the latency is lower than what the server can reliably handle. */ uint32_t tlength; /**< Playback only: target length of the buffer. The server tries commit 5f326b705d8f7f0c14e7e0c7d7c2751f3a5ebe43 Author: David Henningsson <david.hennings...@canonical.com> Date: Mon Mar 25 09:20:15 2013 +0100 protocol-native: Lower default minreq in low-latency scenarios If minreq is not explicitly specified, it was always initialized to 20 ms (DEFAULT_PROCESS_MSEC). However when the total latency is not much higher than 20 ms, this is way too high. Instead use tlength/4 as a measure: this will give a decent sink_usec in all modes (both traditional, adjust latency and early request modes). This greatly improves PulseAudio's ability to ask for data in time in low-latency scenarios. Signed-off-by: David Henningsson <david.hennings...@canonical.com> diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c index e8aa13c..9523e7a 100644 --- a/src/pulsecore/protocol-native.c +++ b/src/pulsecore/protocol-native.c @@ -939,8 +939,14 @@ static void fix_playback_buffer_attr(playback_stream *s) { if (s->buffer_attr.tlength > s->buffer_attr.maxlength) s->buffer_attr.tlength = s->buffer_attr.maxlength; - if (s->buffer_attr.minreq == (uint32_t) -1) - s->buffer_attr.minreq = (uint32_t) pa_usec_to_bytes_round_up(DEFAULT_PROCESS_MSEC*PA_USEC_PER_MSEC, &s->sink_input->sample_spec); + if (s->buffer_attr.minreq == (uint32_t) -1) { + uint32_t process = (uint32_t) pa_usec_to_bytes_round_up(DEFAULT_PROCESS_MSEC*PA_USEC_PER_MSEC, &s->sink_input->sample_spec); + /* With low-latency, tlength/4 gives a decent default in all of traditional, adjust latency and early request modes. */ + uint32_t m = s->buffer_attr.tlength / 4; + if (frame_size) + m -= m % frame_size; + s->buffer_attr.minreq = PA_MIN(process, m); + } if (s->buffer_attr.minreq <= 0) s->buffer_attr.minreq = (uint32_t) frame_size; commit 2026c41be6f4e1a526c94c1368e5e528597df03a Author: David Henningsson <david.hennings...@canonical.com> Date: Mon Mar 25 09:20:14 2013 +0100 protocol-native: Ensure tlength is not set higher than maxlength Tlength should never be set higher than maxlength. While this is corrected by memblockq later, we still need a correct tlength for the subsequent calculations. Signed-off-by: David Henningsson <david.hennings...@canonical.com> diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c index 7095519..e8aa13c 100644 --- a/src/pulsecore/protocol-native.c +++ b/src/pulsecore/protocol-native.c @@ -936,6 +936,8 @@ static void fix_playback_buffer_attr(playback_stream *s) { s->buffer_attr.tlength = (uint32_t) pa_usec_to_bytes_round_up(DEFAULT_TLENGTH_MSEC*PA_USEC_PER_MSEC, &s->sink_input->sample_spec); if (s->buffer_attr.tlength <= 0) s->buffer_attr.tlength = (uint32_t) frame_size; + if (s->buffer_attr.tlength > s->buffer_attr.maxlength) + s->buffer_attr.tlength = s->buffer_attr.maxlength; if (s->buffer_attr.minreq == (uint32_t) -1) s->buffer_attr.minreq = (uint32_t) pa_usec_to_bytes_round_up(DEFAULT_PROCESS_MSEC*PA_USEC_PER_MSEC, &s->sink_input->sample_spec); _______________________________________________ pulseaudio-commits mailing list pulseaudio-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/pulseaudio-commits