diff options
| -rw-r--r-- | src/lib/content.cc | 6 | ||||
| -rw-r--r-- | test/content_test.cc | 28 |
2 files changed, 33 insertions, 1 deletions
diff --git a/src/lib/content.cc b/src/lib/content.cc index 2593c01df..4242477d4 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -303,7 +303,11 @@ Content::technical_summary () const DCPTime Content::length_after_trim (shared_ptr<const Film> film) const { - return max(DCPTime(), full_length(film) - DCPTime(trim_start() + trim_end(), film->active_frame_rate_change(position()))).round(film->video_frame_rate()); + DCPTime length = max(DCPTime(), full_length(film) - DCPTime(trim_start() + trim_end(), film->active_frame_rate_change(position()))); + if (video) { + length = length.round(film->video_frame_rate()); + } + return length; } /** @return string which changes when something about this content changes which affects diff --git a/test/content_test.cc b/test/content_test.cc index fb66b2e08..1e143f8e4 100644 --- a/test/content_test.cc +++ b/test/content_test.cc @@ -122,3 +122,31 @@ BOOST_AUTO_TEST_CASE (content_test3) BOOST_CHECK (content->trim_start() == ContentTime::from_seconds (15.0 / 25.0)); } + + +/** Content containing video will have its length rounded to the nearest video frame */ +BOOST_AUTO_TEST_CASE (content_test4) +{ + shared_ptr<Film> film = new_test_film2 ("content_test4"); + + shared_ptr<Content> video = content_factory("test/data/count300bd24.m2ts").front(); + film->examine_and_add_content (video); + BOOST_REQUIRE (!wait_for_jobs()); + + video->set_trim_end (dcpomatic::ContentTime(3000)); + BOOST_CHECK (video->length_after_trim(film) == DCPTime::from_frames(299, 24)); +} + + +/** Content containing no video will not have its length rounded to the nearest video frame */ +BOOST_AUTO_TEST_CASE (content_test5) +{ + shared_ptr<Film> film = new_test_film2 ("content_test5"); + + shared_ptr<Content> audio = content_factory("test/data/sine_16_48_220_10.wav").front(); + film->examine_and_add_content (audio); + BOOST_REQUIRE (!wait_for_jobs()); + + audio->set_trim_end (dcpomatic::ContentTime(3000)); + BOOST_CHECK (audio->length_after_trim(film) == DCPTime(957000)); +} |
