From: Laurent Aimar Date: Sat, 19 Jul 2008 20:39:48 +0000 (+0200) Subject: Fixed undenormalise for 64 bits. X-Git-Tag: 0.9.0-test3~356^2~24 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;ds=sidebyside;h=8400d104d4236612af4b31ea1852383dcfe31c7f;p=vlc Fixed undenormalise for 64 bits. --- diff --git a/modules/audio_filter/spatializer/allpass.hpp b/modules/audio_filter/spatializer/allpass.hpp index f907667c96..5a5a85fd75 100644 --- a/modules/audio_filter/spatializer/allpass.hpp +++ b/modules/audio_filter/spatializer/allpass.hpp @@ -32,8 +32,7 @@ inline float allpass::process(float input) float output; float bufout; - bufout = buffer[bufidx]; - undenormalise(bufout); + bufout = undenormalise( buffer[bufidx] ); output = -input + bufout; buffer[bufidx] = input + (bufout*feedback); diff --git a/modules/audio_filter/spatializer/comb.hpp b/modules/audio_filter/spatializer/comb.hpp index 2da83db602..8d35e90ce1 100644 --- a/modules/audio_filter/spatializer/comb.hpp +++ b/modules/audio_filter/spatializer/comb.hpp @@ -37,13 +37,11 @@ inline float comb::process(float input) { float output; - output = buffer[bufidx]; - undenormalise(output); + output = undenormalise( buffer[bufidx] ); - filterstore = (output*damp2) + (filterstore*damp1); - undenormalise(filterstore); + filterstore = undenormalise( output*damp2 + filterstore*damp1 ); - buffer[bufidx] = input + (filterstore*feedback); + buffer[bufidx] = input + filterstore*feedback; if(++bufidx>=bufsize) bufidx = 0; diff --git a/modules/audio_filter/spatializer/denormals.h b/modules/audio_filter/spatializer/denormals.h index f871412714..bab45c6cdb 100644 --- a/modules/audio_filter/spatializer/denormals.h +++ b/modules/audio_filter/spatializer/denormals.h @@ -8,8 +8,16 @@ #ifndef _denormals_ #define _denormals_ -#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f +#include + +static inline float undenormalise( float f ) +{ + union { float f; uint32_t u; } data; + data.f = f; + if( (data.u & 0x7f800000) == 0 ) + return 0.0; + return f; +} #endif//_denormals_ -//ends