From: Dzmitry Keremsha <vyro@lumencoil.com> --- dlls/winepulse.drv/pulse.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c index 7c8d872c604..93f10499c01 100644 --- a/dlls/winepulse.drv/pulse.c +++ b/dlls/winepulse.drv/pulse.c @@ -1180,7 +1180,7 @@ static NTSTATUS pulse_create_stream(void *args) stream->bufsize_frames = ceil((params->duration / 10000000.) * params->fmt->nSamplesPerSec); bufsize_bytes = stream->bufsize_frames * pa_frame_size(&stream->ss); - stream->mmdev_period_usec = params->period / 10; + stream->mmdev_period_usec = params->period / 50; stream->share = params->share; stream->flags = params->flags; @@ -1451,6 +1451,9 @@ static void pulse_write(struct pulse_stream *stream) to_write = stream->real_bufsize_bytes - stream->pa_offs_bytes; TRACE("writing small chunk of %u bytes\n", to_write); write_buffer(stream, buf, to_write); + stream->held_bytes -= to_write; + stream->lcl_offs_bytes += to_write; + stream->lcl_offs_bytes %= stream->real_bufsize_bytes; stream->pa_held_bytes -= to_write; to_write = bytes - to_write; stream->pa_offs_bytes = 0; @@ -1461,6 +1464,9 @@ static void pulse_write(struct pulse_stream *stream) TRACE("writing main chunk of %u bytes\n", to_write); write_buffer(stream, buf, to_write); + stream->held_bytes -= to_write; + stream->lcl_offs_bytes += to_write; + stream->lcl_offs_bytes %= stream->real_bufsize_bytes; stream->pa_offs_bytes += to_write; stream->pa_offs_bytes %= stream->real_bufsize_bytes; stream->pa_held_bytes -= to_write; @@ -1572,7 +1578,6 @@ static NTSTATUS pulse_timer_loop(void *args) struct pulse_stream *stream = handle_get_stream(params->stream); LARGE_INTEGER delay; pa_usec_t last_time; - UINT32 adv_bytes; int success; pulse_lock(); @@ -1634,12 +1639,6 @@ static NTSTATUS pulse_timer_loop(void *args) if (stream->dataflow == eRender) { pulse_write(stream); - - /* regardless of what PA does, advance one period */ - adv_bytes = min(stream->period_bytes, stream->held_bytes); - stream->lcl_offs_bytes += adv_bytes; - stream->lcl_offs_bytes %= stream->real_bufsize_bytes; - stream->held_bytes -= adv_bytes; } else if(stream->dataflow == eCapture) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9840