Fix export, which has been broken since the boost::signals2 changes. Also update Audiographer, bacause of its incomplete sndfile handling. Audiographer is equal to revision 74

git-svn-id: svn://localhost/ardour2/branches/3.0@6760 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Sakari Bergen 2010-03-15 19:11:48 +00:00
parent 44f4b84551
commit 830911f6f9
72 changed files with 2182 additions and 1090 deletions

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/chunker.h"
#include "tests/utils.h"
#include "audiographer/general/chunker.h"
#include <cassert>
@ -7,9 +8,12 @@ using namespace AudioGrapher;
class ChunkerTest : public CppUnit::TestFixture
{
// TODO: Test EndOfInput handling
CPPUNIT_TEST_SUITE (ChunkerTest);
CPPUNIT_TEST (testSynchronousProcess);
CPPUNIT_TEST (testAsynchronousProcess);
CPPUNIT_TEST (testChoppingProcess);
CPPUNIT_TEST_SUITE_END ();
public:
@ -99,6 +103,38 @@ class ChunkerTest : public CppUnit::TestFixture
CPPUNIT_ASSERT (TestUtils::array_equals (random_data, &sink->get_array()[frames / 2], frames));
CPPUNIT_ASSERT (TestUtils::array_equals (random_data, &sink->get_array()[ 3 * frames / 2], frames / 2));
}
void testChoppingProcess()
{
sink.reset (new AppendingVectorSink<float>());
assert (frames % 2 == 0);
chunker.reset (new Chunker<float>(frames / 4));
chunker->add_output (sink);
nframes_t frames_output = 0;
ProcessContext<float> const half_context (random_data, frames / 2, 1);
ProcessContext<float> const context (random_data, frames, 1);
// 0.5
chunker->process (half_context);
frames_output = sink->get_data().size();
CPPUNIT_ASSERT_EQUAL ((nframes_t) frames / 2, frames_output);
// 1.5
chunker->process (context);
frames_output = sink->get_data().size();
CPPUNIT_ASSERT_EQUAL ((nframes_t) frames / 2 * 3, frames_output);
// 2.5
chunker->process (context);
frames_output = sink->get_data().size();
CPPUNIT_ASSERT_EQUAL (frames / 2 * 5, frames_output);
CPPUNIT_ASSERT (TestUtils::array_equals (random_data, sink->get_array(), frames / 2));
CPPUNIT_ASSERT (TestUtils::array_equals (random_data, &sink->get_array()[frames / 2], frames));
CPPUNIT_ASSERT (TestUtils::array_equals (random_data, &sink->get_array()[ 3 * frames / 2], frames / 2));
}
private:
boost::shared_ptr<Chunker<float> > chunker;

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/deinterleaver.h"
#include "tests/utils.h"
#include "audiographer/general/deinterleaver.h"
using namespace AudioGrapher;
@ -48,19 +49,16 @@ class DeInterleaverTest : public CppUnit::TestFixture
{
deinterleaver->init (channels, frames_per_channel);
ProcessContext<float> c (random_data, 0, channels);
ProcessContext<float> c (random_data, 2 * total_frames, channels);
// Too many, frames % channels == 0
c.frames() = total_frames + channels;
CPPUNIT_ASSERT_THROW (deinterleaver->process (c), Exception);
CPPUNIT_ASSERT_THROW (deinterleaver->process (c.beginning (total_frames + channels)), Exception);
// Too many, frames % channels != 0
c.frames() = total_frames + 1;
CPPUNIT_ASSERT_THROW (deinterleaver->process (c), Exception);
CPPUNIT_ASSERT_THROW (deinterleaver->process (c.beginning (total_frames + 1)), Exception);
// Too few, frames % channels != 0
c.frames() = total_frames - 1;
CPPUNIT_ASSERT_THROW (deinterleaver->process (c), Exception);
CPPUNIT_ASSERT_THROW (deinterleaver->process (c.beginning (total_frames - 1)), Exception);
}
void assert_outputs (nframes_t expected_frames)
@ -92,8 +90,7 @@ class DeInterleaverTest : public CppUnit::TestFixture
// Now with less frames
nframes_t const less_frames = frames_per_channel / 4;
c.frames() = less_frames * channels;
deinterleaver->process (c);
deinterleaver->process (c.beginning (less_frames * channels));
assert_outputs (less_frames);
}
@ -106,11 +103,10 @@ class DeInterleaverTest : public CppUnit::TestFixture
deinterleaver->output (2)->add_output (sink_c);
// Input zero frames
ProcessContext<float> c (random_data, 0, channels);
deinterleaver->process (c);
ProcessContext<float> c (random_data, total_frames, channels);
deinterleaver->process (c.beginning (0));
// ...and now test regular input
c.frames() = total_frames;
deinterleaver->process (c);
assert_outputs (frames_per_channel);
}

View file

@ -1,6 +1,7 @@
#include "utils.h"
#include "audiographer/interleaver.h"
#include "audiographer/deinterleaver.h"
#include "tests/utils.h"
#include "audiographer/general/interleaver.h"
#include "audiographer/general/deinterleaver.h"
using namespace AudioGrapher;
@ -55,8 +56,7 @@ class InterleaverDeInterleaverTest : public CppUnit::TestFixture
// And a second round...
nframes_t less_frames = (frames_per_channel / 10) * channels;
c.frames() = less_frames;
deinterleaver->process (c);
deinterleaver->process (c.beginning (less_frames));
CPPUNIT_ASSERT (TestUtils::array_equals (random_data_a, sink_a->get_array(), less_frames));
}
@ -86,12 +86,9 @@ class InterleaverDeInterleaverTest : public CppUnit::TestFixture
// And a second round...
nframes_t less_frames = frames_per_channel / 5;
c_a.frames() = less_frames;
c_b.frames() = less_frames;
c_c.frames() = less_frames;
interleaver->input (0)->process (c_a);
interleaver->input (1)->process (c_b);
interleaver->input (2)->process (c_c);
interleaver->input (0)->process (c_a.beginning (less_frames));
interleaver->input (1)->process (c_b.beginning (less_frames));
interleaver->input (2)->process (c_c.beginning (less_frames));
CPPUNIT_ASSERT (TestUtils::array_equals (random_data_a, sink_a->get_array(), less_frames));
CPPUNIT_ASSERT (TestUtils::array_equals (random_data_b, sink_b->get_array(), less_frames));

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/interleaver.h"
#include "tests/utils.h"
#include "audiographer/general/interleaver.h"
using namespace AudioGrapher;
@ -50,16 +51,13 @@ class InterleaverTest : public CppUnit::TestFixture
ProcessContext<float> c (random_data, frames + 1, 1);
CPPUNIT_ASSERT_THROW (interleaver->input (0)->process (c), Exception);
c.frames() = frames;
interleaver->input (0)->process (c);
interleaver->input (1)->process (c);
c.frames() = frames -1;
CPPUNIT_ASSERT_THROW (interleaver->input (2)->process (c), Exception);
interleaver->input (0)->process (c.beginning (frames));
interleaver->input (1)->process (c.beginning (frames));
CPPUNIT_ASSERT_THROW (interleaver->input (2)->process (c.beginning (frames - 1)), Exception);
interleaver->input (0)->process (c);
interleaver->input (1)->process (c);
c.frames() = frames;
CPPUNIT_ASSERT_THROW (interleaver->input (2)->process (c), Exception);
interleaver->input (0)->process (c.beginning (frames - 1));
interleaver->input (1)->process (c.beginning (frames - 1));
CPPUNIT_ASSERT_THROW (interleaver->input (2)->process (c.beginning (frames)), Exception);
}
void testOutputSize()
@ -76,10 +74,9 @@ class InterleaverTest : public CppUnit::TestFixture
CPPUNIT_ASSERT_EQUAL (expected_frames, generated_frames);
nframes_t less_frames = frames / 2;
c.frames() = less_frames;
interleaver->input (0)->process (c);
interleaver->input (1)->process (c);
interleaver->input (2)->process (c);
interleaver->input (0)->process (c.beginning (less_frames));
interleaver->input (1)->process (c.beginning (less_frames));
interleaver->input (2)->process (c.beginning (less_frames));
expected_frames = less_frames * channels;
generated_frames = sink->get_data().size();
@ -91,15 +88,14 @@ class InterleaverTest : public CppUnit::TestFixture
interleaver->add_output (sink);
// input zero frames to all inputs
ProcessContext<float> c (random_data, 0, 1);
interleaver->input (0)->process (c);
interleaver->input (1)->process (c);
interleaver->input (2)->process (c);
ProcessContext<float> c (random_data, frames, 1);
interleaver->input (0)->process (c.beginning (0));
interleaver->input (1)->process (c.beginning (0));
interleaver->input (2)->process (c.beginning (0));
// NOTE zero input is allowed to be a NOP
// ...now test regular input
c.frames() = frames;
interleaver->input (0)->process (c);
interleaver->input (1)->process (c);
interleaver->input (2)->process (c);

View file

@ -1,7 +1,7 @@
#include "utils.h"
#include "tests/utils.h"
#include "audiographer/normalizer.h"
#include "audiographer/peak_reader.h"
#include "audiographer/general/normalizer.h"
#include "audiographer/general/peak_reader.h"
using namespace AudioGrapher;

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/peak_reader.h"
#include "tests/utils.h"
#include "audiographer/general/peak_reader.h"
using namespace AudioGrapher;

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/sample_format_converter.h"
#include "tests/utils.h"
#include "audiographer/general/sample_format_converter.h"
using namespace AudioGrapher;
@ -192,10 +193,10 @@ class SampleFormatConverterTest : public CppUnit::TestFixture
ProcessContext<float> pc(random_data, 4, 1);
CPPUNIT_ASSERT_THROW (converter->process (pc), Exception);
pc.frames() = frames - (frames % 3);
converter->process (pc);
nframes_t new_frame_count = frames - (frames % 3);
converter->process (ProcessContext<float> (pc.data(), new_frame_count, 3));
frames_output = sink->get_data().size();
CPPUNIT_ASSERT_EQUAL (pc.frames(), frames_output);
CPPUNIT_ASSERT_EQUAL (new_frame_count, frames_output);
CPPUNIT_ASSERT (TestUtils::array_filled(sink->get_array(), pc.frames()));
}

View file

@ -1,6 +1,6 @@
#include "utils.h"
#include "tests/utils.h"
#include "audiographer/silence_trimmer.h"
#include "audiographer/general/silence_trimmer.h"
using namespace AudioGrapher;
@ -29,7 +29,7 @@ class SilenceTrimmerTest : public CppUnit::TestFixture
half_random_data = TestUtils::init_random_data(frames);
memset(half_random_data, 0, (frames / 2) * sizeof(float));
trimmer.reset (new SilenceTrimmer<float>());
trimmer.reset (new SilenceTrimmer<float> (frames / 2));
sink.reset (new AppendingVectorSink<float>());
trimmer->set_trim_beginning (true);
@ -41,14 +41,11 @@ class SilenceTrimmerTest : public CppUnit::TestFixture
delete [] random_data;
delete [] zero_data;
delete [] half_random_data;
AudioGrapher::Utils::free_resources();
}
void testFullBuffers()
{
trimmer->add_output (sink);
AudioGrapher::Utils::init_zeros<float>(frames / 2);
{
ProcessContext<float> c (zero_data, frames, 1);
@ -93,7 +90,9 @@ class SilenceTrimmerTest : public CppUnit::TestFixture
void testPartialBuffers()
{
trimmer->add_output (sink);
AudioGrapher::Utils::init_zeros<float>(frames / 4);
trimmer->reset (frames / 4);
trimmer->set_trim_beginning (true);
trimmer->set_trim_end (true);
{
ProcessContext<float> c (half_random_data, frames, 1);
@ -121,31 +120,14 @@ class SilenceTrimmerTest : public CppUnit::TestFixture
void testExceptions()
{
// TODO more tests here
trimmer->add_output (sink);
{
ProcessContext<float> c (random_data, frames, 1);
trimmer->process (c);
}
{
ProcessContext<float> c (zero_data, frames, 1);
trimmer->process (c);
}
{
// Zeros not inited, so this should throw
ProcessContext<float> c (random_data, frames, 1);
CPPUNIT_ASSERT_THROW (trimmer->process (c), Exception);
CPPUNIT_ASSERT_THROW (trimmer->reset (0), Exception);
}
}
void testAddSilenceBeginning()
{
trimmer->add_output (sink);
AudioGrapher::Utils::init_zeros<float>(frames / 2);
nframes_t silence = frames / 2;
trimmer->add_silence_to_beginning (silence);
@ -162,7 +144,6 @@ class SilenceTrimmerTest : public CppUnit::TestFixture
void testAddSilenceEnd()
{
trimmer->add_output (sink);
AudioGrapher::Utils::init_zeros<float>(frames / 2);
nframes_t silence = frames / 3;
trimmer->add_silence_to_end (silence);
@ -178,6 +159,9 @@ class SilenceTrimmerTest : public CppUnit::TestFixture
trimmer->process (c);
}
nframes_t frames_processed = sink->get_data().size();
nframes_t total_frames = 2 * frames + silence;
CPPUNIT_ASSERT_EQUAL (total_frames, frames_processed);
CPPUNIT_ASSERT (TestUtils::array_equals (sink->get_array(), random_data, frames));
CPPUNIT_ASSERT (TestUtils::array_equals (&sink->get_array()[frames], random_data, frames));
CPPUNIT_ASSERT (TestUtils::array_equals (&sink->get_array()[frames * 2], zero_data, silence));

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/sr_converter.h"
#include "tests/utils.h"
#include "audiographer/general/sr_converter.h"
using namespace AudioGrapher;

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/threader.h"
#include "tests/utils.h"
#include "audiographer/general/threader.h"
using namespace AudioGrapher;

View file

@ -0,0 +1,47 @@
#include "tests/utils.h"
#include "audiographer/sndfile/tmp_file.h"
using namespace AudioGrapher;
class TmpFileTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE (TmpFileTest);
CPPUNIT_TEST (testProcess);
CPPUNIT_TEST_SUITE_END ();
public:
void setUp()
{
frames = 128;
random_data = TestUtils::init_random_data(frames);
}
void tearDown()
{
delete [] random_data;
}
void testProcess()
{
uint channels = 2;
file.reset (new TmpFile<float>(SF_FORMAT_WAV | SF_FORMAT_FLOAT, channels, 44100));
AllocatingProcessContext<float> c (random_data, frames, channels);
c.set_flag (ProcessContext<float>::EndOfInput);
file->process (c);
TypeUtils<float>::zero_fill (c.data (), c.frames());
file->seek (0, SEEK_SET);
file->read (c);
CPPUNIT_ASSERT (TestUtils::array_equals (random_data, c.data(), c.frames()));
}
private:
boost::shared_ptr<TmpFile<float> > file;
float * random_data;
nframes_t frames;
};
CPPUNIT_TEST_SUITE_REGISTRATION (TmpFileTest);

View file

@ -1,42 +0,0 @@
#include "utils.h"
#include "audiographer/sndfile_writer.h"
using namespace AudioGrapher;
class SndfileWriterTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE (SndfileWriterTest);
CPPUNIT_TEST (testProcess);
CPPUNIT_TEST_SUITE_END ();
public:
void setUp()
{
frames = 128;
random_data = TestUtils::init_random_data(frames);
}
void tearDown()
{
delete [] random_data;
}
void testProcess()
{
uint channels = 2;
std::string filename ("test.wav");
writer.reset (new SndfileWriter<float>(channels, 44100, SF_FORMAT_WAV | SF_FORMAT_FLOAT, filename));
ProcessContext<float> c (random_data, frames, channels);
c.set_flag (ProcessContext<float>::EndOfInput);
writer->process (c);
}
private:
boost::shared_ptr<SndfileWriter<float> > writer;
float * random_data;
nframes_t frames;
};
CPPUNIT_TEST_SUITE_REGISTRATION (SndfileWriterTest);

View file

@ -0,0 +1,112 @@
#include "tests/utils.h"
#include "audiographer/type_utils.h"
using namespace AudioGrapher;
class TypeUtilsTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE (TypeUtilsTest);
CPPUNIT_TEST (testZeroFillPod);
CPPUNIT_TEST (testZeroFillNonPod);
CPPUNIT_TEST (testCopy);
CPPUNIT_TEST (testMoveBackward);
CPPUNIT_TEST (testMoveForward);
CPPUNIT_TEST_SUITE_END ();
public:
void setUp()
{
}
void tearDown()
{
}
void testZeroFillPod()
{
unsigned frames = 10;
float buf[frames];
TypeUtils<float>::zero_fill (buf, frames);
float zero = 0.0;
for (unsigned i = 0; i < frames; ++i) {
CPPUNIT_ASSERT_EQUAL (zero, buf[i]);
}
}
void testZeroFillNonPod()
{
unsigned frames = 10;
NonPodType buf[frames];
TypeUtils<NonPodType>::zero_fill (buf, frames);
NonPodType zero;
for (unsigned i = 0; i < frames; ++i) {
CPPUNIT_ASSERT (zero == buf[i]);
}
}
void testMoveBackward()
{
int seq[8] = { 0, 1, 2, 3,
4, 5, 6, 7 };
TypeUtils<int>::move (&seq[4], &seq[2], 4);
for (int i = 2; i < 2 + 4; ++i) {
CPPUNIT_ASSERT_EQUAL (i + 2, seq[i]);
}
}
void testMoveForward()
{
int seq[8] = { 0, 1, 2, 3,
4, 5, 6, 7 };
TypeUtils<int>::move (&seq[2], &seq[4], 4);
for (int i = 4; i < 4 + 4; ++i) {
CPPUNIT_ASSERT_EQUAL (i - 2, seq[i]);
}
}
void testCopy()
{
int const seq1[4] = { 1, 2, 3, 4 };
int const seq2[4] = { 5, 6, 7, 8 };
int seq3[8] = { 0, 0, 0, 0,
0, 0, 0, 0 };
TypeUtils<int>::copy (seq1, seq3, 4);
for (int i = 0; i < 4; ++i) {
CPPUNIT_ASSERT_EQUAL (seq1[i], seq3[i]);
}
for (int i = 4; i < 8; ++i) {
CPPUNIT_ASSERT_EQUAL (0, seq3[i]);
}
TypeUtils<int>::copy (seq2, &seq3[4], 4);
for (int i = 0; i < 4; ++i) {
CPPUNIT_ASSERT_EQUAL (seq1[i], seq3[i]);
}
for (int i = 0; i < 4; ++i) {
CPPUNIT_ASSERT_EQUAL (seq2[i], seq3[4 + i]);
}
}
private:
struct NonPodType {
NonPodType() : data (42) {}
bool operator== (NonPodType const & other) const
{ return data == other.data; }
int data;
};
};
CPPUNIT_TEST_SUITE_REGISTRATION (TypeUtilsTest);

View file

@ -1,5 +1,6 @@
#include "utils.h"
#include "audiographer/identity_vertex.h"
#include "tests/utils.h"
#include "audiographer/utils/identity_vertex.h"
using namespace AudioGrapher;