source-output: Fix rewinding bug
authorGeorg Chini <georg@chini.tk>
Wed, 3 Jul 2019 10:32:16 +0000 (12:32 +0200)
committerArun Raghavan <arun@arunraghavan.net>
Wed, 3 Jul 2019 10:52:20 +0000 (10:52 +0000)
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

index 1ab90ab..f5005ab 100644 (file)
@@ -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 */