From 6995b77a6d0111bba045ed1dafa348cc465bc5c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Thu, 16 Dec 2021 18:20:24 +0100 Subject: [PATCH] winepulse.drv: Stop writing the same data again on underflow. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Data in [lcl_offs_bytes;lcl_offs_bytes+held_bytes] is the data we've received from the client and that we consider being used by pulse, regardless of how we write it to it. A subset of this is [pa_offs_bytes;pa_offs_bytes+pa_held_bytes], which is the data we have received from the client but not yet written to pulse. If pulsed has underflown it means that it has used all the data we've written already, and resetting pa_offs_bytes and pa_held_bytes like here will only make us write the same data again (in addition to silence) to mend the underflow, ending up with potentially duplicate audio frames being played. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52225 Signed-off-by: RĂ©mi Bernon Signed-off-by: Andrew Eikum Signed-off-by: Alexandre Julliard --- dlls/winepulse.drv/pulse.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c index bce70ac358c..c329e8c423c 100644 --- a/dlls/winepulse.drv/pulse.c +++ b/dlls/winepulse.drv/pulse.c @@ -260,9 +260,6 @@ static void pulse_underflow_callback(pa_stream *s, void *userdata) struct pulse_stream *stream = userdata; WARN("%p: Underflow\n", userdata); stream->just_underran = TRUE; - /* re-sync */ - stream->pa_offs_bytes = stream->lcl_offs_bytes; - stream->pa_held_bytes = stream->held_bytes; } static void pulse_started_callback(pa_stream *s, void *userdata)