From 1240afabfa792c1a3ba2b766c9c7bc0b3aae4b0f Mon Sep 17 00:00:00 2001 From: Georg Chini Date: Wed, 3 Jul 2019 12:32:16 +0200 Subject: [PATCH] source-output: Fix rewinding bug Currently the rewind logic for the source output is broken if the output does not implement a process_rewind() callback. In that case, the read index of the delay memblockq is rewound. This is wrong, because the data that is going to be re-written was not yet read. Instead the write index should be rewound and the read index left untouched. This is the reason for the rewind glitches of monitor sources. --- src/pulsecore/source-output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c index 1ab90abd6..f5005abb6 100644 --- a/src/pulsecore/source-output.c +++ b/src/pulsecore/source-output.c @@ -866,7 +866,7 @@ void pa_source_output_process_rewind(pa_source_output *o, size_t nbytes /* in so pa_resampler_rewind(o->thread_info.resampler, nbytes); } else - pa_memblockq_rewind(o->thread_info.delay_memblockq, nbytes); + pa_memblockq_seek(o->thread_info.delay_memblockq, - ((int64_t) nbytes), PA_SEEK_RELATIVE, true); } /* Called from thread context */