diff options
author | Chris Robinson <[email protected]> | 2012-10-04 23:24:40 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2012-10-04 23:36:59 -0700 |
commit | 468759e6abe90c0a6c8e2b445eb54275d7571265 (patch) | |
tree | d60d471b18151df6a410cbe72294c27c6d17d86b /Alc | |
parent | f138774d78c5ae43dd43fdf8e63ae48bafa600fd (diff) |
Scale and round NumUpdates when PulseAudio changes the sample rate
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/backends/pulseaudio.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/Alc/backends/pulseaudio.c b/Alc/backends/pulseaudio.c index 10e2fa6c..07b10c10 100644 --- a/Alc/backends/pulseaudio.c +++ b/Alc/backends/pulseaudio.c @@ -1100,12 +1100,10 @@ static ALCboolean pulse_reset_playback(ALCdevice *device) /* Server updated our playback rate, so modify the buffer attribs * accordingly. */ - device->UpdateSize = (ALuint64)device->UpdateSize * data->spec.rate / - device->Frequency; - if((CPUCapFlags&CPU_CAP_SSE)) - device->UpdateSize = (device->UpdateSize+3)&~3; + device->NumUpdates = (ALuint)((ALdouble)device->NumUpdates / device->Frequency * + data->spec.rate + 0.5); data->attr.minreq = device->UpdateSize * pa_frame_size(&data->spec); - data->attr.tlength = data->attr.minreq * maxu(device->NumUpdates, 2); + data->attr.tlength = data->attr.minreq * clampu(device->NumUpdates, 2, 16); data->attr.maxlength = -1; data->attr.prebuf = 0; @@ -1124,8 +1122,10 @@ static ALCboolean pulse_reset_playback(ALCdevice *device) stream_buffer_attr_callback(data->stream, device); len = data->attr.minreq / pa_frame_size(&data->spec); - device->NumUpdates = (device->UpdateSize*device->NumUpdates + len/2) / len; - device->NumUpdates = maxu(device->NumUpdates, 2); + if((CPUCapFlags&CPU_CAP_SSE)) + len = (len+3)&~3; + device->NumUpdates = (ALuint)((ALdouble)device->NumUpdates/len*device->UpdateSize + 0.5); + device->NumUpdates = clampu(device->NumUpdates, 2, 16); device->UpdateSize = len; pa_threaded_mainloop_unlock(data->loop); |