X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Faudio_merger_test.cc;h=2ac42964ad80318732cc6dc5a19e59e2054fcdf2;hp=4a1f689dd9b6bd4a07b6a88105f269c755b0510d;hb=15a83d720780d58f905d40f8493cdcb86596eaee;hpb=c4403784febdbdd42e9c32e67fadb147f11fe566 diff --git a/test/audio_merger_test.cc b/test/audio_merger_test.cc index 4a1f689dd..2ac42964a 100644 --- a/test/audio_merger_test.cc +++ b/test/audio_merger_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2017 Carl Hetherington + Copyright (C) 2013-2020 Carl Hetherington This file is part of DCP-o-matic. @@ -23,8 +23,12 @@ * @ingroup selfcontained */ +#include "lib/cross.h" #include "lib/audio_merger.h" #include "lib/audio_buffers.h" +#include "lib/dcpomatic_time.h" +#include "test.h" +#include #include #include #include @@ -34,6 +38,7 @@ using std::pair; using std::list; using std::cout; +using std::string; using boost::shared_ptr; using boost::bind; using namespace dcpomatic; @@ -135,3 +140,42 @@ BOOST_AUTO_TEST_CASE (audio_merger_test3) BOOST_CHECK_EQUAL (tb.front().first->data()[0][i], i); } } + +/* Reply a sequence of calls to AudioMerger that resulted in a crash */ +BOOST_AUTO_TEST_CASE (audio_merger_test4) +{ + FILE* f = fopen_boost("test/data/audio_merger_bug1.log", "r"); + BOOST_REQUIRE (f); + list tokens; + char buf[64]; + while (fscanf(f, "%63s", buf) == 1) { + tokens.push_back (buf); + } + + shared_ptr merger; + list::const_iterator i = tokens.begin (); + while (i != tokens.end()) { + BOOST_CHECK (*i++ == "I/AM"); + string const cmd = *i++; + if (cmd == "frame_rate") { + BOOST_REQUIRE (i != tokens.end()); + merger.reset (new AudioMerger(dcp::raw_convert(*i++))); + } else if (cmd == "clear") { + merger->clear (); + } else if (cmd == "push") { + BOOST_REQUIRE (i != tokens.end()); + DCPTime time(dcp::raw_convert(*i++)); + BOOST_REQUIRE (i != tokens.end()); + int const frames = dcp::raw_convert(*i++); + shared_ptr buffers(new AudioBuffers(1, frames)); + BOOST_REQUIRE (merger); + merger->push (buffers, time); + } else if (cmd == "pull") { + BOOST_REQUIRE (i != tokens.end()); + DCPTime time(dcp::raw_convert(*i++)); + merger->pull (time); + } + } +} + +