summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-07-12 23:21:25 +0100
committerCarl Hetherington <cth@carlh.net>2017-07-12 23:21:25 +0100
commit99cebd529d5126fc5dfb7e8ff4b5050a8e18a6f3 (patch)
treefc725f4bb346831f095728113eeba5d96ff5e3dc
parent71ab83292da50b080befd98b01804a120b94f65e (diff)
Don't emit black to fill up to a frame that we're not going to emit.
-rw-r--r--src/lib/player.cc16
-rw-r--r--test/reels_test.cc17
-rw-r--r--test/wscript1
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