summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2023-03-05 14:06:11 +0100
committerCarl Hetherington <cth@carlh.net>2023-03-05 14:06:11 +0100
commit86515d34200fa2a387e48b117eed9b02cabde30d (patch)
tree9701523cfd0b6a6c19823c1ff4306b99a3f073df
parent79f957a6f37276f71cf98d4fa1ae5e0ab3beb76d (diff)
Fix error when padding is needed in 3D encodes (#2476).
-rw-r--r--src/lib/player.cc7
-rw-r--r--test/threed_test.cc19
2 files changed, 25 insertions, 1 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 018571fe2..abcefcab5 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -770,7 +770,12 @@ Player::pass ()
}
case BLACK:
LOG_DEBUG_PLAYER ("Emit black for gap at %1", to_string(_black.position()));
- emit_video (black_player_video_frame(Eyes::BOTH), _black.position());
+ if (film->three_d()) {
+ emit_video(black_player_video_frame(Eyes::LEFT), _black.position());
+ emit_video(black_player_video_frame(Eyes::RIGHT), _black.position());
+ } else {
+ emit_video(black_player_video_frame(Eyes::BOTH), _black.position());
+ }
_black.set_position (_black.position() + one_video_frame());
break;
case SILENT:
diff --git a/test/threed_test.cc b/test/threed_test.cc
index a2e116f9a..87ddd25ae 100644
--- a/test/threed_test.cc
+++ b/test/threed_test.cc
@@ -339,3 +339,22 @@ BOOST_AUTO_TEST_CASE(threed_passthrough_test, * boost::unit_test::depends_on("th
}
}
+/* #2476 was a writer error when 3D picture padding is needed */
+BOOST_AUTO_TEST_CASE(threed_test_when_padding_needed)
+{
+ auto left = content_factory("test/data/flat_red.png").front();
+ auto right = content_factory("test/data/flat_red.png").front();
+ auto sound = content_factory("test/data/sine_440.wav").front();
+ auto film = new_test_film2("threed_test_when_padding_needed", { left, right, sound });
+
+ left->video->set_frame_type(VideoFrameType::THREE_D_LEFT);
+ left->set_position(film, dcpomatic::DCPTime());
+ left->video->set_length(23);
+ right->video->set_frame_type(VideoFrameType::THREE_D_RIGHT);
+ right->set_position(film, dcpomatic::DCPTime());
+ right->video->set_frame_type(VideoFrameType::THREE_D_RIGHT);
+ right->video->set_length(23);
+ film->set_three_d(true);
+
+ make_and_verify_dcp(film);
+}