diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-11-01 11:25:20 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-11-11 14:12:33 +0100 |
| commit | b1f03ef090dd57d8d33b814184583865a92c1d48 (patch) | |
| tree | 1b54f018761ca1bbb5f6d0c75f7bcd7a1773ad1e | |
| parent | e6a4cb97059f9b4683b00da893dc07bef59ad1e4 (diff) | |
Increase fudge factor at the boundary between audio signal and silence.
| -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 cc8556f3d..0cef941f8 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -635,12 +635,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 1736bfc7e..6812ddbb0 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. @@ -343,3 +343,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()); +} |
