diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-11-01 11:25:20 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-11-01 11:25:20 +0100 |
| commit | 1b81a1ee7c4eba533fd49939f8e76744f94038b6 (patch) | |
| tree | cdf96204744084f51f2131effcdd00c0eb6a01fc | |
| parent | c0d9ec5d4c7a75448ec36501c2764073b1f12116 (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 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()); +} |
