diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-03-02 00:01:18 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-04-19 23:04:32 +0100 |
| commit | 080051edd655be1a8aa4b8dc21d0c262282d8444 (patch) | |
| tree | bdd62a36982ee78c098938206909ca3d8be13b2c /test | |
| parent | 6996f3e291aec986adb1589808a54d09b8647520 (diff) | |
Handle end-trim correctly in player; there is scope to make this more efficient by adjusting decoders.
Diffstat (limited to 'test')
| -rw-r--r-- | test/torture_test.cc | 82 |
1 files changed, 71 insertions, 11 deletions
diff --git a/test/torture_test.cc b/test/torture_test.cc index 7d85f5d7d..21494e5d8 100644 --- a/test/torture_test.cc +++ b/test/torture_test.cc @@ -40,26 +40,36 @@ using boost::shared_ptr; /** Test a fairly complex arrangement of content */ BOOST_AUTO_TEST_CASE (torture_test1) { - shared_ptr<Film> film = new_test_film ("player_torture_test"); + shared_ptr<Film> film = new_test_film ("torture_test"); film->set_dcp_content_type (DCPContentType::from_isdcf_name ("FTR")); - film->set_name ("player_torture_test"); + film->set_name ("torture_test"); film->set_container (Ratio::from_id ("185")); film->set_sequence (false); /* Staircase at an offset of 2000 samples, trimmed both start and end, with a gain of 6dB */ - shared_ptr<Content> staircase = content_factory(film, "test/data/staircase.mov").front (); + shared_ptr<Content> staircase = content_factory(film, "test/data/staircase.wav").front (); film->examine_and_add_content (staircase); wait_for_jobs (); staircase->set_position (DCPTime::from_frames (2000, film->audio_frame_rate())); staircase->set_trim_start (ContentTime::from_frames (12, 48000)); staircase->set_trim_end (ContentTime::from_frames (35, 48000)); -// staircase->audio->set_gain (20 * log10(2)); + staircase->audio->set_gain (20 * log10(2)); + + /* And again at an offset of 50000 samples, trimmed both start and end, with a gain of 6dB */ + staircase = content_factory(film, "test/data/staircase.wav").front (); + film->examine_and_add_content (staircase); + wait_for_jobs (); + staircase->set_position (DCPTime::from_frames (50000, film->audio_frame_rate())); + staircase->set_trim_start (ContentTime::from_frames (12, 48000)); + staircase->set_trim_end (ContentTime::from_frames (35, 48000)); + staircase->audio->set_gain (20 * log10(2)); film->set_video_frame_rate (24); + film->write_metadata (); film->make_dcp (); wait_for_jobs (); - dcp::DCP dcp ("build/test/player_torture_test/" + film->dcp_name(false)); + dcp::DCP dcp ("build/test/torture_test/" + film->dcp_name(false)); dcp.read (); list<shared_ptr<dcp::CPL> > cpls = dcp.cpls (); @@ -82,7 +92,7 @@ BOOST_AUTO_TEST_CASE (torture_test1) } } - /* The staircase is 4800 - 12 - 35 = 4753 samples. One frame is 2000 samples, so we span 3 frames */ + /* The first staircase is 4800 - 12 - 35 = 4753 samples. One frame is 2000 samples, so we span 3 frames */ BOOST_REQUIRE_EQUAL (fr->samples(), 2000); @@ -92,10 +102,10 @@ BOOST_AUTO_TEST_CASE (torture_test1) for (int i = 0; i < fr->samples(); ++i) { for (int j = 0; j < 6; ++j) { if (j == 2) { - BOOST_CHECK_EQUAL (fr->get(j, i) >> 8, stair); + BOOST_CHECK_EQUAL ((fr->get(j, i) + 128) >> 8, stair * 2); ++stair; } else { - BOOST_CHECK_EQUAL ((fr->get(j, i) + 128) >> 8, 0); + BOOST_CHECK_EQUAL (fr->get(j, i), 0); } } } @@ -104,7 +114,7 @@ BOOST_AUTO_TEST_CASE (torture_test1) for (int i = 0; i < fr->samples(); ++i) { for (int j = 0; j < 6; ++j) { if (j == 2) { - BOOST_CHECK_EQUAL (fr->get(j, i) >> 8, stair); + BOOST_CHECK_EQUAL ((fr->get(j, i) + 128) >> 8, stair * 2); ++stair; } else { BOOST_CHECK_EQUAL (fr->get(j, i), 0); @@ -113,10 +123,60 @@ BOOST_AUTO_TEST_CASE (torture_test1) } fr = sound_reader->get_frame (3); - for (int i = 0; i < 4753 - (2000 * 2); ++i) { + for (int i = 0; i < fr->samples(); ++i) { + for (int j = 0; j < 6; ++j) { + if (j == 2 && i < (4753 - (2000 * 2))) { + BOOST_CHECK_EQUAL ((fr->get(j, i) + 128) >> 8, stair * 2); + ++stair; + } else { + BOOST_CHECK_EQUAL (fr->get(j, i), 0); + } + } + } + + /* Then some silence */ + + for (int i = 4; i < 24; ++i) { + fr = sound_reader->get_frame (i); + for (int j = 0; j < fr->samples(); ++j) { + for (int k = 0; k < 6; ++k) { + BOOST_CHECK_EQUAL (fr->get(k, j), 0); + } + } + } + + /* Then the same thing again */ + stair = 12; + + fr = sound_reader->get_frame (25); + for (int i = 0; i < fr->samples(); ++i) { + for (int j = 0; j < 6; ++j) { + if (j == 2) { + BOOST_CHECK_EQUAL ((fr->get(j, i) + 128) >> 8, stair * 2); + ++stair; + } else { + BOOST_CHECK_EQUAL (fr->get(j, i), 0); + } + } + } + + fr = sound_reader->get_frame (26); + for (int i = 0; i < fr->samples(); ++i) { for (int j = 0; j < 6; ++j) { if (j == 2) { - BOOST_CHECK_EQUAL (fr->get(j, i) >> 8, stair); + BOOST_CHECK_EQUAL ((fr->get(j, i) + 128) >> 8, stair * 2); + ++stair; + } else { + BOOST_CHECK_EQUAL (fr->get(j, i), 0); + } + } + } + + fr = sound_reader->get_frame (27); + for (int i = 0; i < fr->samples(); ++i) { + for (int j = 0; j < 6; ++j) { + if (j == 2 && i < (4753 - (2000 * 2))) { + BOOST_CHECK_EQUAL ((fr->get(j, i) + 128) >> 8, stair * 2); ++stair; } else { BOOST_CHECK_EQUAL (fr->get(j, i), 0); |
