specialize isfinite for MSVC compat
authorRobin Gareus <robin@gareus.org>
Sun, 28 Feb 2016 11:07:00 +0000 (12:07 +0100)
committerRobin Gareus <robin@gareus.org>
Sun, 28 Feb 2016 11:07:00 +0000 (12:07 +0100)
libs/ardour/automation_control.cc
libs/vamp-plugins/ebu_r128_proc.cc

index 7e9b55976c79d9554612b3d89ccc594d40334c83..3629345d941e7a9efe06fc805df15080ea07a939 100644 (file)
@@ -18,6 +18,7 @@
 
 */
 
+#include <math.h>
 #include <iostream>
 #include "ardour/automation_control.h"
 #include "ardour/automation_watch.h"
 
 #include "i18n.h"
 
+#ifdef COMPILER_MSVC
+#include <float.h>
+// C99 'isfinite()' is not available in MSVC.
+#define isfinite_local(val) (bool)_finite((double)val)
+#else
+#define isfinite_local isfinite
+#endif
+
 using namespace std;
 using namespace ARDOUR;
 using namespace PBD;
@@ -199,7 +208,7 @@ AutomationControl::internal_to_interface (double val) const
 double
 AutomationControl::interface_to_internal (double val) const
 {
-       if (!isfinite (val)) {
+       if (!isfinite_local (val)) {
                val = 0;
        }
        if (_desc.logarithmic) {
index 5675171e9eef2aede7eb8ada616f2dedba8eb08d..b18b9bc30eabb564a8420e1393d6f42a47d78443 100644 (file)
 #include <math.h>
 #include "ebu_r128_proc.h"
 
+#ifdef COMPILER_MSVC
+#include <float.h>
+// C99 'isfinite()' is not available in MSVC.
+#define isfinite_local(val) (bool)_finite((double)val)
+#else
+#define isfinite_local isfinite
+#endif
+
 namespace Fons {
 
 float Ebu_r128_hist::_bin_power [100] = { 0.0f };
@@ -223,8 +231,8 @@ void Ebu_r128_proc::process (int nfram, const float *const *input)
            _wrind &= 63;
            _loudness_M = addfrags (8);
            _loudness_S = addfrags (60);
-           if (!isfinite(_loudness_M) || _loudness_M < -200.f) _loudness_M = -200.0f;
-           if (!isfinite(_loudness_S) || _loudness_S < -200.f) _loudness_S = -200.0f;
+           if (!isfinite_local(_loudness_M) || _loudness_M < -200.f) _loudness_M = -200.0f;
+           if (!isfinite_local(_loudness_S) || _loudness_S < -200.f) _loudness_S = -200.0f;
             if (_loudness_M > _maxloudn_M) _maxloudn_M = _loudness_M;
             if (_loudness_S > _maxloudn_S) _maxloudn_S = _loudness_S;
            if (_integr)
@@ -329,10 +337,10 @@ float Ebu_r128_proc::detect_process (int nfram)
        }
        if (_nchan == 1) si = 2 * sj;
        else si += _chan_gain [i] * sj;
-       S->_z1 = !isfinite(z1) ? 0 : z1;
-       S->_z2 = !isfinite(z2) ? 0 : z2;
-       S->_z3 = !isfinite(z3) ? 0 : z3;
-       S->_z4 = !isfinite(z4) ? 0 : z4;
+       S->_z1 = !isfinite_local(z1) ? 0 : z1;
+       S->_z2 = !isfinite_local(z2) ? 0 : z2;
+       S->_z3 = !isfinite_local(z3) ? 0 : z3;
+       S->_z4 = !isfinite_local(z4) ? 0 : z4;
     }
     return si;
 }