X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Faudio_merger_test.cc;fp=test%2Faudio_merger_test.cc;h=a03d3b30fab575ec0a161ceb1e78bcb8101abfcb;hb=ee70e6c7c5c6a14605f3b7b17c01e2f41f0f10dd;hp=0000000000000000000000000000000000000000;hpb=130577d2e4e67de15ac8f5d6447729736d4bcac6;p=dcpomatic.git diff --git a/test/audio_merger_test.cc b/test/audio_merger_test.cc new file mode 100644 index 000000000..a03d3b30f --- /dev/null +++ b/test/audio_merger_test.cc @@ -0,0 +1,103 @@ +/* + Copyright (C) 2013-2017 Carl Hetherington + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see . + +*/ + +#include "lib/audio_merger.h" +#include "lib/audio_buffers.h" +#include +#include +#include +#include + +using std::pair; +using boost::shared_ptr; +using boost::bind; + +static shared_ptr last_audio; + +int const sampling_rate = 48000; + +BOOST_AUTO_TEST_CASE (audio_merger_test1) +{ + AudioMerger merger (1, sampling_rate); + + /* Push 64 samples, 0 -> 63 at time 0 */ + shared_ptr buffers (new AudioBuffers (1, 64)); + for (int i = 0; i < 64; ++i) { + buffers->data()[0][i] = i; + } + merger.push (buffers, DCPTime()); + + /* Push 64 samples, 0 -> 63 at time 22 */ + merger.push (buffers, DCPTime::from_frames (22, sampling_rate)); + + pair, DCPTime> tb = merger.pull (DCPTime::from_frames (22, sampling_rate)); + BOOST_CHECK (tb.first != shared_ptr ()); + BOOST_CHECK_EQUAL (tb.first->frames(), 22); + BOOST_CHECK_EQUAL (tb.second.get(), 0); + + /* And they should be a staircase */ + for (int i = 0; i < 22; ++i) { + BOOST_CHECK_EQUAL (tb.first->data()[0][i], i); + } + + tb = merger.pull (DCPTime::from_frames (22 + 64, sampling_rate)); + + BOOST_CHECK_EQUAL (tb.first->frames(), 64); + BOOST_CHECK_EQUAL (tb.second.get(), DCPTime::from_frames(22, sampling_rate).get()); + + /* Check the sample values */ + for (int i = 0; i < 64; ++i) { + int correct = i; + if (i < (64 - 22)) { + correct += i + 22; + } + BOOST_CHECK_EQUAL (tb.first->data()[0][i], correct); + } +} + +BOOST_AUTO_TEST_CASE (audio_merger_test2) +{ + AudioMerger merger (1, sampling_rate); + + /* Push 64 samples, 0 -> 63 at time 9 */ + shared_ptr buffers (new AudioBuffers (1, 64)); + for (int i = 0; i < 64; ++i) { + buffers->data()[0][i] = i; + } + merger.push (buffers, DCPTime::from_frames (9, sampling_rate)); + + pair, DCPTime> tb = merger.pull (DCPTime::from_frames (9, sampling_rate)); + BOOST_CHECK_EQUAL (tb.first->frames(), 9); + BOOST_CHECK_EQUAL (tb.second.get(), 0); + + for (int i = 0; i < 9; ++i) { + BOOST_CHECK_EQUAL (tb.first->data()[0][i], 0); + } + + tb = merger.pull (DCPTime::from_frames (9 + 64, sampling_rate)); + + BOOST_CHECK_EQUAL (tb.first->frames(), 64); + BOOST_CHECK_EQUAL (tb.second.get(), DCPTime::from_frames(9, sampling_rate).get()); + + /* Check the sample values */ + for (int i = 0; i < 64; ++i) { + BOOST_CHECK_EQUAL (tb.first->data()[0][i], i); + } +}