Re: [pulseaudio-discuss] [PATCH 3/3] Fighting rewinds: Make sure there is some headroom after an underrun

2010-12-20 Thread Maarten Bosmans
2010/12/9 David Henningsson david.hennings...@canonical.com:
 If the amount of data in the implementor buffer is very tiny,
 i e even less than what we will likely be asked for, don't ask
 for a rewind as that would lead to another underrun.

In an audio context, the term headroom often refers to the dynamic
room left, i.e. the number of dBs between current (average) volume and
maximum possible volume. In this case something like buffer fill or
buffered data would be more appropriate I think.

The term headroom is not in the code comments, so it's no big deal,
but I thought I'd mention it anyway.

Maarten
___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss


[pulseaudio-discuss] [PATCH 3/3] Fighting rewinds: Make sure there is some headroom after an underrun

2010-12-09 Thread David Henningsson

If the amount of data in the implementor buffer is very tiny,
i e even less than what we will likely be asked for, don't ask
for a rewind as that would lead to another underrun.

--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
From 3c0bf348c3395b3cff0d77fd52a2e1e725c6e4cd Mon Sep 17 00:00:00 2001
From: David Henningsson david.hennings...@canonical.com
Date: Thu, 9 Dec 2010 14:25:58 +0100
Subject: [PATCH 3/3] Fighting rewinds: Make sure there is some headroom after an underrun

If the amount of data in the implementor buffer is very tiny,
i e even less than what we will likely be asked for, don't ask
for a rewind as that would lead to another underrun.

Signed-off-by: David Henningsson david.hennings...@canonical.com
---
 src/pulsecore/protocol-native.c |   15 +--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 5dab80e..378a401 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1321,9 +1321,18 @@ static void handle_seek(playback_stream *s, int64_t indexw) {
 /* pa_log(%lu vs. %lu, (unsigned long) pa_memblockq_get_length(s-memblockq), (unsigned long) pa_memblockq_get_prebuf(s-memblockq)); */
 
 if (pa_memblockq_is_readable(s-memblockq)) {
+if (s-sink_input-sink) {
+pa_usec_t usec = pa_sink_get_latency_within_thread(s-sink_input-sink);
+int latency = pa_usec_to_bytes(usec, s-sink_input-sample_spec);
+if (latency  pa_memblockq_get_length(s-memblockq)) {
+pa_log_debug(Skipping rewind, need at least %d bytes., latency);
+playback_stream_request_bytes(s);
+return;
+}
+}
 
-/* We just ended an underrun, let's ask the sink
- * for a complete rewind rewrite */
+/* We ended an underrun and got some head start,
+ * let's ask the sink for a complete rewind rewrite */
 
 pa_log_debug(Requesting rewind due to end of underrun.);
 pa_sink_input_request_rewind(s-sink_input,
@@ -1524,6 +1533,8 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
 s-is_underrun = TRUE;
 
 playback_stream_request_bytes(s);
+/* Don't return a block here - it confuses the underrun handling in sink-input later */
+return -1;
 }
 
 /* This call will not fail with prebuf=0, hence we check for
-- 
1.7.1

___
pulseaudio-discuss mailing list
pulseaudio-discuss@mail.0pointer.de
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss