diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-07-12 23:21:25 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-07-12 23:21:25 +0100 |
| commit | 99cebd529d5126fc5dfb7e8ff4b5050a8e18a6f3 (patch) | |
| tree | fc725f4bb346831f095728113eeba5d96ff5e3dc | |
| parent | 71ab83292da50b080befd98b01804a120b94f65e (diff) | |
Don't emit black to fill up to a frame that we're not going to emit.
| -rw-r--r-- | src/lib/player.cc | 16 | ||||
| -rw-r--r-- | test/reels_test.cc | 17 | ||||
| -rw-r--r-- | 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<Piece> 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<Piece> 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> 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<FFmpegContent> 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 |
