diff --git a/src/audio/SDL_audiocvt.c b/src/audio/SDL_audiocvt.c index b431c31f441ca..b82733461d7df 100644 --- a/src/audio/SDL_audiocvt.c +++ b/src/audio/SDL_audiocvt.c @@ -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);