MTDM ();
int process (size_t len, float *inp, float *out);
- int resolve (void);
- void invert (void) { _inv ^= 1; }
- int inv (void) { return _inv; }
- double del (void) { return _del; }
- double err (void) { return _err; }
+ int resolve ();
+ void invert () { _inv ^= 1; }
+ int inv () { return _inv; }
+ double del () { return _del; }
+ double err () { return _err; }
private:
class Freq {
#include "ardour/mtdm.h"
-MTDM::MTDM (void)
+MTDM::MTDM ()
: _cnt (0)
, _inv (0)
{
void
PortInsert::start_latency_detection ()
{
- if (_mtdm != 0) {
- delete _mtdm;
- }
-
+ delete _mtdm;
_mtdm = new MTDM;
_latency_flush_frames = false;
_latency_detect = true;
Sample* out = outbuf.data();
_mtdm->process (nframes, in, out);
-
+
outbuf.set_is_silent (false);
}
--- /dev/null
+#include <cstring>
+#include <cmath>
+#include "ardour/mtdm.h"
+#include "mtdm_test.h"
+
+CPPUNIT_TEST_SUITE_REGISTRATION (MTDMTest);
+
+using namespace std;
+
+void
+MTDMTest::basicTest ()
+{
+ float in[256];
+ float out[256];
+
+ memset (in, 0, 256 * sizeof (float));
+ MTDM* mtdm = new MTDM;
+ mtdm->process (256, in, out);
+ memcpy (in, out, 256 * sizeof (float));
+
+ for (int i = 0; i < 64; ++i) {
+ mtdm->process (256, in, out);
+ memcpy (in, out, 256 * sizeof (float));
+
+ CPPUNIT_ASSERT_EQUAL (0, mtdm->resolve ());
+ CPPUNIT_ASSERT (mtdm->err() < 1);
+ CPPUNIT_ASSERT_EQUAL (256.0, rint (mtdm->del()));
+ }
+}
--- /dev/null
+#include <sigc++/sigc++.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+class MTDMTest : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE (MTDMTest);
+ CPPUNIT_TEST (basicTest);
+ CPPUNIT_TEST_SUITE_END ();
+
+public:
+ void setUp () {}
+ void tearDown () {}
+
+ void basicTest ();
+};
+
test/playlist_layering_test.cc
test/playlist_read_test.cc
test/control_surfaces_test.cc
+ test/mtdm_test.cc
test/testrunner.cc
'''.split()