From 99cebd529d5126fc5dfb7e8ff4b5050a8e18a6f3 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 12 Jul 2017 23:21:25 +0100 Subject: Don't emit black to fill up to a frame that we're not going to emit. --- src/lib/player.cc | 16 ++++++++-------- test/reels_test.cc | 17 +++++++++++++++++ test/wscript | 1 + 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/lib/player.cc b/src/lib/player.cc index 3ed0e4f45..5e888f110 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -620,6 +620,14 @@ Player::video (weak_ptr wp, ContentVideo video) DCPTime const time = content_video_to_dcp (piece, video.frame); DCPTimePeriod const period (time, time + one_video_frame()); + /* Discard if it's outside the content's period or if it's before the last accurate seek */ + if ( + time < piece->content->position() || + time >= piece->content->end() || + (_last_video_time && time < *_last_video_time)) { + return; + } + /* Fill gaps that we discover now that we have some video which needs to be emitted */ if (_last_video_time) { @@ -635,14 +643,6 @@ Player::video (weak_ptr wp, ContentVideo video) } } - /* Discard if it's outside the content's period or if it's before the last accurate seek */ - if ( - time < piece->content->position() || - time >= piece->content->end() || - (_last_video_time && time < *_last_video_time)) { - return; - } - _last_video[wp].reset ( new PlayerVideo ( video.image, diff --git a/test/reels_test.cc b/test/reels_test.cc index 72a3fe7d3..79b4c5af2 100644 --- a/test/reels_test.cc +++ b/test/reels_test.cc @@ -326,3 +326,20 @@ BOOST_AUTO_TEST_CASE (reels_test7) film->make_dcp (); BOOST_REQUIRE (!wait_for_jobs ()); } + +/** Check a reels-related error; make_dcp() would raise a ProgrammingError */ +BOOST_AUTO_TEST_CASE (reels_test8) +{ + shared_ptr film = new_test_film ("reels_test8"); + film->set_name ("reels_test8"); + film->set_container (Ratio::from_id ("185")); + film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST")); + shared_ptr A (new FFmpegContent (film, "test/data/test2.mp4")); + film->examine_and_add_content (A); + BOOST_REQUIRE (!wait_for_jobs ()); + + A->set_trim_end (ContentTime::from_seconds (1)); + cout << to_string(A->length_after_trim()) << "\n"; + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs ()); +} diff --git a/test/wscript b/test/wscript index 7dcd6a9cc..e4a391f8b 100644 --- a/test/wscript +++ b/test/wscript @@ -49,6 +49,7 @@ def build(bld): audio_processor_test.cc audio_processor_delay_test.cc audio_ring_buffers_test.cc + butler_test.cc client_server_test.cc colour_conversion_test.cc content_test.cc -- cgit v1.2.3