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.henningsson@canonical.com>
This commit is contained in:
David Henningsson 2013-03-25 09:20:15 +01:00 committed by Tanu Kaskinen
parent 2026c41be6
commit 5f326b705d

View file

@ -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;