summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-11-01 11:25:20 +0100
committerCarl Hetherington <cth@carlh.net>2019-11-11 14:12:33 +0100
commitb1f03ef090dd57d8d33b814184583865a92c1d48 (patch)
tree1b54f018761ca1bbb5f6d0c75f7bcd7a1773ad1e
parente6a4cb97059f9b4683b00da893dc07bef59ad1e4 (diff)
Increase fudge factor at the boundary between audio signal and silence.
-rw-r--r--src/lib/player.cc7
m---------test/data0
-rw-r--r--test/player_test.cc16
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());
+}