winepulse.drv: Stop writing the same data again on underflow.

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 <rbernon@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Rémi Bernon 2021-12-16 18:20:24 +01:00 committed by Alexandre Julliard
parent 91fb87b289
commit 6995b77a6d
1 changed files with 0 additions and 3 deletions

View File

@ -260,9 +260,6 @@ static void pulse_underflow_callback(pa_stream *s, void *userdata)
struct pulse_stream *stream = userdata; struct pulse_stream *stream = userdata;
WARN("%p: Underflow\n", userdata); WARN("%p: Underflow\n", userdata);
stream->just_underran = TRUE; 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) static void pulse_started_callback(pa_stream *s, void *userdata)