X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Fupmixer_a_test.cc;h=545f081bacaf2c40c8a8bac15f196bb264cfdf7d;hp=b115db21bff72fe96a3fcddeafc74ef08cddbf3b;hb=54af50c3b8e9082f9751e809d63540c51197a4a1;hpb=5dc2dbdb6639f8d617a40209ad603d2a38f9df2a diff --git a/test/upmixer_a_test.cc b/test/upmixer_a_test.cc index b115db21b..545f081ba 100644 --- a/test/upmixer_a_test.cc +++ b/test/upmixer_a_test.cc @@ -1,34 +1,60 @@ /* - Copyright (C) 2014 Carl Hetherington + Copyright (C) 2014-2015 Carl Hetherington - This program is free software; you can redistribute it and/or modify + 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. - This program is distributed in the hope that it will be useful, + 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 this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ +/** @file test/upmixer_a_test.cc + * @brief Check the Upmixer A against some reference sound files. + * @ingroup specific + */ + #include #include #include "lib/film.h" #include "lib/ratio.h" #include "lib/dcp_content_type.h" -#include "lib/sndfile_content.h" +#include "lib/ffmpeg_content.h" #include "lib/player.h" #include "lib/audio_buffers.h" #include "lib/upmixer_a.h" #include "test.h" using boost::shared_ptr; +using namespace dcpomatic; + +static SNDFILE* L; +static SNDFILE* R; +static SNDFILE* C; +static SNDFILE* Lfe; +static SNDFILE* Ls; +static SNDFILE* Rs; + +static void +write (shared_ptr b, DCPTime) +{ + sf_write_float (L, b->data(0), b->frames()); + sf_write_float (R, b->data(1), b->frames()); + sf_write_float (C, b->data(2), b->frames()); + sf_write_float (Lfe, b->data(3), b->frames()); + sf_write_float (Ls, b->data(4), b->frames()); + sf_write_float (Rs, b->data(5), b->frames()); + +} BOOST_AUTO_TEST_CASE (upmixer_a_test) { @@ -36,33 +62,26 @@ BOOST_AUTO_TEST_CASE (upmixer_a_test) film->set_container (Ratio::from_id ("185")); film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR")); film->set_name ("frobozz"); - shared_ptr content (new SndfileContent (film, "test/data/white.wav")); - content->set_audio_processor (AudioProcessor::from_id ("stereo-5.1-upmix-a")); + film->set_audio_processor (AudioProcessor::from_id ("stereo-5.1-upmix-a")); + shared_ptr content (new FFmpegContent ("test/data/white.wav")); film->examine_and_add_content (content); - wait_for_jobs (); + BOOST_REQUIRE (!wait_for_jobs()); SF_INFO info; info.samplerate = 48000; info.channels = 1; info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; - SNDFILE* L = sf_open ("build/test/upmixer_a_test/L.wav", SFM_WRITE, &info); - SNDFILE* R = sf_open ("build/test/upmixer_a_test/R.wav", SFM_WRITE, &info); - SNDFILE* C = sf_open ("build/test/upmixer_a_test/C.wav", SFM_WRITE, &info); - SNDFILE* Lfe = sf_open ("build/test/upmixer_a_test/Lfe.wav", SFM_WRITE, &info); - SNDFILE* Ls = sf_open ("build/test/upmixer_a_test/Ls.wav", SFM_WRITE, &info); - SNDFILE* Rs = sf_open ("build/test/upmixer_a_test/Rs.wav", SFM_WRITE, &info); - - shared_ptr player = film->make_player (); - for (DCPTime t; t < film->length(); t += DCPTime::from_seconds (1)) { - shared_ptr b = player->get_audio (t, DCPTime::from_seconds (1), true); - sf_write_float (L, b->data(0), b->frames()); - sf_write_float (R, b->data(1), b->frames()); - sf_write_float (C, b->data(2), b->frames()); - sf_write_float (Lfe, b->data(3), b->frames()); - sf_write_float (Ls, b->data(4), b->frames()); - sf_write_float (Rs, b->data(5), b->frames()); - } + L = sf_open ("build/test/upmixer_a_test/L.wav", SFM_WRITE, &info); + R = sf_open ("build/test/upmixer_a_test/R.wav", SFM_WRITE, &info); + C = sf_open ("build/test/upmixer_a_test/C.wav", SFM_WRITE, &info); + Lfe = sf_open ("build/test/upmixer_a_test/Lfe.wav", SFM_WRITE, &info); + Ls = sf_open ("build/test/upmixer_a_test/Ls.wav", SFM_WRITE, &info); + Rs = sf_open ("build/test/upmixer_a_test/Rs.wav", SFM_WRITE, &info); + + shared_ptr player (new Player (film, film->playlist ())); + player->Audio.connect (bind (&write, _1, _2)); + while (!player->pass()) {} sf_close (L); sf_close (R); @@ -71,10 +90,10 @@ BOOST_AUTO_TEST_CASE (upmixer_a_test) sf_close (Ls); sf_close (Rs); - check_audio_file ("test/data/upmixer_a_test/L.wav", "build/test/upmixer_a_test/L.wav"); - check_audio_file ("test/data/upmixer_a_test/R.wav", "build/test/upmixer_a_test/R.wav"); - check_audio_file ("test/data/upmixer_a_test/C.wav", "build/test/upmixer_a_test/C.wav"); - check_audio_file ("test/data/upmixer_a_test/Lfe.wav", "build/test/upmixer_a_test/Lfe.wav"); - check_audio_file ("test/data/upmixer_a_test/Ls.wav", "build/test/upmixer_a_test/Ls.wav"); - check_audio_file ("test/data/upmixer_a_test/Rs.wav", "build/test/upmixer_a_test/Rs.wav"); + check_wav_file ("test/data/upmixer_a_test/L.wav", "build/test/upmixer_a_test/L.wav"); + check_wav_file ("test/data/upmixer_a_test/R.wav", "build/test/upmixer_a_test/R.wav"); + check_wav_file ("test/data/upmixer_a_test/C.wav", "build/test/upmixer_a_test/C.wav"); + check_wav_file ("test/data/upmixer_a_test/Lfe.wav", "build/test/upmixer_a_test/Lfe.wav"); + check_wav_file ("test/data/upmixer_a_test/Ls.wav", "build/test/upmixer_a_test/Ls.wav"); + check_wav_file ("test/data/upmixer_a_test/Rs.wav", "build/test/upmixer_a_test/Rs.wav"); }