]> git.sesse.net Git - vlc/commitdiff
Fixed undenormalise for 64 bits.
authorLaurent Aimar <fenrir@videolan.org>
Sat, 19 Jul 2008 20:39:48 +0000 (22:39 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Sat, 19 Jul 2008 22:53:21 +0000 (00:53 +0200)
modules/audio_filter/spatializer/allpass.hpp
modules/audio_filter/spatializer/comb.hpp
modules/audio_filter/spatializer/denormals.h

index f907667c963992860af28e7789d0c2a942f78633..5a5a85fd75a1ab61515014888833fa7727030920 100644 (file)
@@ -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);
index 2da83db60287d4f6961221e5fcafa0ea74b93c52..8d35e90ce163f22df187cbbccf9d1399f1736d71 100644 (file)
@@ -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;
 
index f8714127144a394d8cad46de3d9c5afe4456c4b9..bab45c6cdb8f6c5cdbd49d16a086f691b4cf6fba 100644 (file)
@@ -8,8 +8,16 @@
 #ifndef _denormals_
 #define _denormals_
 
-#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f
+#include <stdint.h>
+
+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