From f8d57d03caa39ac1cae593d616ae2402adc4ddb1 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 28 Jan 2021 20:00:48 +0100 Subject: [PATCH] pulse-server: keep separate counter for missing bytes And only increment when consumed from ringbuffer. In underrun we play silence and don't ask for the missing bytes. Fixes #616 --- src/modules/module-protocol-pulse/pulse-server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/module-protocol-pulse/pulse-server.c b/src/modules/module-protocol-pulse/pulse-server.c index 41160e9b2..b74160705 100644 --- a/src/modules/module-protocol-pulse/pulse-server.c +++ b/src/modules/module-protocol-pulse/pulse-server.c @@ -1423,6 +1423,7 @@ struct process_data { uint32_t write_index; uint32_t underrun_for; uint32_t playing_for; + uint32_t missing; unsigned int underrun:1; }; @@ -1460,7 +1461,7 @@ do_process_done(struct spa_loop *loop, else send_stream_started(stream); } - stream->missing += pd->playing_for; + stream->missing += pd->missing; stream->missing = SPA_MIN(stream->missing, stream->attr.tlength); stream->playing_for += pd->playing_for; if (stream->underrun_for != (uint64_t)-1) @@ -1580,6 +1581,7 @@ static void stream_process(void *data) spa_ringbuffer_read_update(&stream->ring, pd.read_index); pd.playing_for = size; + pd.missing = size; pd.underrun = false; } buf->datas[0].chunk->offset = 0;