[1/3] dsound: Add support for 32-bit IEEE float buffers
Chris Robinson
chris.kcat at gmail.com
Mon Sep 13 20:00:44 CDT 2010
On Monday, September 13, 2010 12:55:43 pm Owen Rudge wrote:
> + if (*v < -1.0f) d = -128;
> + if (*v < 0.0f) d = *v * 128.0f;
> + if (*v >= 0.0f) d = *v * 127.0f;
> + if (*v > 1.0f) d = 127;
The way these checks are written out can cause problems, particularly with the
first two because the if(*v < 0.0f) occurs after the if(*v < -1.0f) check, so
it won't properly clamp values below -1.0. Something like this:
if (*v < -1.0f) d = -128;
else if (*v < 0.0f) d = *v * 128.0f;
else if (*v > 1.0f) d = 127;
else if (*v >= 0.0f) d = *v * 127.0f;
should do fine (along with the 16- and 32-bit variants; the 24-bit one looks
fine). You also don't need to keep the float as a pointer, though I imagine
the optimizer can handle that.
More information about the wine-devel
mailing list