diff options
| -rw-r--r-- | src/lib/player.cc | 7 | ||||
| m--------- | test/data | 0 | ||||
| -rw-r--r-- | test/player_test.cc | 16 |
3 files changed, 20 insertions, 3 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc index b3fba1aec..2bf9b1860 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -648,12 +648,15 @@ Player::pass () if (_last_audio_time) { /* Sometimes the thing that happened last finishes fractionally before or after this silence. Bodge the start time of the silence to fix it. + I think is nothing too bad to worry about since we will just add or + remove a little silence at the end of some content. */ int64_t const error = labs(period.from.get() - _last_audio_time->get()); - if (error >= 2) { + int64_t const too_much_error = 4; + if (error >= too_much_error) { _film->log()->log(String::compose("Silence starting before or after last audio by %1", error), LogEntry::TYPE_ERROR); } - DCPOMATIC_ASSERT (error < 2); + DCPOMATIC_ASSERT (error < too_much_error); period.from = *_last_audio_time; } if (period.duration() > one_video_frame()) { diff --git a/test/data b/test/data -Subproject eda45cf0736a897f944a8c38e9aed9ca98d4c3c +Subproject 6ca8ac639cd63e909237badb5b564e09d54ee90 diff --git a/test/player_test.cc b/test/player_test.cc index a7e944cd4..30b1a56dd 100644 --- a/test/player_test.cc +++ b/test/player_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2014-2018 Carl Hetherington <cth@carlh.net> + Copyright (C) 2014-2019 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -344,3 +344,17 @@ BOOST_AUTO_TEST_CASE (player_trim_crash) butler->rethrow (); } + +/** Test a crash when the gap between the last audio and the start of a silent period is more than 1 sample */ +BOOST_AUTO_TEST_CASE (player_silence_crash) +{ + shared_ptr<Film> film = new_test_film2 ("player_silence_crash"); + shared_ptr<Content> sine = content_factory("test/data/impulse_train.wav").front(); + film->examine_and_add_content (sine); + BOOST_REQUIRE (!wait_for_jobs()); + + sine->set_video_frame_rate (23.976); + film->write_metadata (); + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs()); +} |
