|
@@ -278,10 +278,18 @@ static int SDL_ResampleAudio(const int chans, const int inrate, const int outrat
|
|
|
const float *inbuf, const int inbuflen,
|
|
|
float *outbuf, const int outbuflen)
|
|
|
{
|
|
|
+ /* !!! FIXME: this produces artifacts if we don't work at double precision, but this turns out to
|
|
|
+ be a big performance hit. Until we can resolve this better, we force this to double
|
|
|
+ for amd64 CPUs, which should be able to take the hit for now, vs small embedded
|
|
|
+ things that might end up in a software fallback here. */
|
|
|
/* Note that this used to be double, but it looks like we can get by with float in most cases at
|
|
|
almost twice the speed on Intel processors, and orders of magnitude more
|
|
|
on CPUs that need a software fallback for double calculations. */
|
|
|
+ #if defined(_M_X64) || defined(__x86_64__)
|
|
|
+ typedef double ResampleFloatType;
|
|
|
+ #else
|
|
|
typedef float ResampleFloatType;
|
|
|
+ #endif
|
|
|
|
|
|
const ResampleFloatType finrate = (ResampleFloatType)inrate;
|
|
|
const ResampleFloatType ratio = ((float)outrate) / ((float)inrate);
|