Fix error when padding is needed in 3D encodes (#2476).
[dcpomatic.git] / test / threed_test.cc
index 4b6b727d411e295d7248abbd12b81c17c9748cfe..87ddd25aec252b75f64a333b4725a08f513f72cd 100644 (file)
@@ -96,7 +96,7 @@ BOOST_AUTO_TEST_CASE (threed_test2)
  */
 BOOST_AUTO_TEST_CASE (threed_test3)
 {
-       shared_ptr<Film> film = new_test_film2 ("threed_test3");
+       auto film = new_test_film2 ("threed_test3");
        auto L = make_shared<FFmpegContent>("test/data/test.mp4");
        film->examine_and_add_content (L);
        auto R = make_shared<FFmpegContent>("test/data/test.mp4");
@@ -227,7 +227,7 @@ BOOST_AUTO_TEST_CASE (threed_test7)
  */
 BOOST_AUTO_TEST_CASE (threed_test_separate_files_slightly_different_lengths)
 {
-       shared_ptr<Film> film = new_test_film2 ("threed_test3");
+       auto film = new_test_film2("threed_test3");
        auto L = make_shared<FFmpegContent>("test/data/test.mp4");
        film->examine_and_add_content (L);
        auto R = make_shared<FFmpegContent>("test/data/test.mp4");
@@ -248,7 +248,7 @@ BOOST_AUTO_TEST_CASE (threed_test_separate_files_slightly_different_lengths)
  */
 BOOST_AUTO_TEST_CASE (threed_test_separate_files_very_different_lengths)
 {
-       shared_ptr<Film> film = new_test_film2 ("threed_test3");
+       auto film = new_test_film2("threed_test3");
        auto L = make_shared<FFmpegContent>("test/data/test.mp4");
        film->examine_and_add_content (L);
        auto R = make_shared<FFmpegContent>("test/data/test.mp4");
@@ -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);
+}