From ecd13dcbef16ccee9ae7785cc60ec63f5772ae19 Mon Sep 17 00:00:00 2001 From: Andrew Eikum Date: Thu, 6 Oct 2011 09:35:07 -0500 Subject: [PATCH] dsound: Fix fragment position calculations. --- dlls/dsound/mixer.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c index 936ea3ed9c8..8adbdff6d1d 100644 --- a/dlls/dsound/mixer.c +++ b/dlls/dsound/mixer.c @@ -788,7 +788,7 @@ static void DSOUND_WaveQueue(DirectSoundDevice *device, BOOL force) device->pwqueue += prebuf_frags; prebuf_frames = ((prebuf_frags + wave_fragpos > device->helfrags) ? - (prebuf_frags + wave_fragpos - device->helfrags) : + (device->helfrags - wave_fragpos) : (prebuf_frags)) * device->fraglen / device->pwfx->nBlockAlign; hr = IAudioRenderClient_GetBuffer(device->render, prebuf_frames, &buffer); @@ -859,8 +859,8 @@ static void DSOUND_PerformMix(DirectSoundDevice *device) return; } - pos_bytes = (clock_pos / (double)clock_freq) * device->pwfx->nSamplesPerSec * - device->pwfx->nBlockAlign; + pos_bytes = ceil(clock_pos * device->pwfx->nBlockAlign * + (clock_freq / (double)device->pwfx->nSamplesPerSec)); delta_frags = (pos_bytes - device->last_pos_bytes) / device->fraglen; if(delta_frags > 0){ -- 2.11.4.GIT