X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=test%2Freels_test.cc;h=ef134811672b95c4b8b58bd9fba364e676c4283d;hb=295c425291c9449188106452386b103d970291db;hp=a9ed07e73aadfe6c01f19755498151f4ba6d5c85;hpb=67a68bd971ebe1b35daa3f75873b4ccb53c00ba0;p=dcpomatic.git diff --git a/test/reels_test.cc b/test/reels_test.cc index a9ed07e73..ef1348116 100644 --- a/test/reels_test.cc +++ b/test/reels_test.cc @@ -31,11 +31,13 @@ #include "lib/dcp_content.h" #include "lib/video_content.h" #include "lib/text_subtitle_content.h" +#include "lib/content_factory.h" #include "test.h" #include #include using std::list; +using std::cout; using boost::shared_ptr; /** Test Film::reels() */ @@ -128,7 +130,7 @@ BOOST_AUTO_TEST_CASE (reels_test2) shared_ptr c (new DCPContent (film2, film->dir (film->dcp_name ()))); film2->examine_and_add_content (c); - wait_for_jobs (); + BOOST_REQUIRE (!wait_for_jobs ()); list r = film2->reels (); BOOST_CHECK_EQUAL (r.size(), 3); @@ -234,16 +236,17 @@ BOOST_AUTO_TEST_CASE (reels_test5) film->examine_and_add_content (dcp); wait_for_jobs (); + /* Set to 123 but it will be rounded up to the next frame (4000) */ dcp->set_position(DCPTime(123)); { list p = dcp->reels (); BOOST_REQUIRE_EQUAL (p.size(), 4); list::const_iterator i = p.begin(); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 0), DCPTime(123 + 96000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 96000), DCPTime(123 + 192000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 192000), DCPTime(123 + 288000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 288000), DCPTime(123 + 384000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 0), DCPTime(4000 + 96000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 96000), DCPTime(4000 + 192000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 192000), DCPTime(4000 + 288000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 288000), DCPTime(4000 + 384000))); } { @@ -251,10 +254,10 @@ BOOST_AUTO_TEST_CASE (reels_test5) list p = dcp->reels (); BOOST_REQUIRE_EQUAL (p.size(), 4); list::const_iterator i = p.begin(); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 0), DCPTime(123 + 48000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 48000), DCPTime(123 + 144000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 144000), DCPTime(123 + 240000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 240000), DCPTime(123 + 336000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 0), DCPTime(4000 + 48000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 48000), DCPTime(4000 + 144000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 144000), DCPTime(4000 + 240000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 240000), DCPTime(4000 + 336000))); } { @@ -262,10 +265,10 @@ BOOST_AUTO_TEST_CASE (reels_test5) list p = dcp->reels (); BOOST_REQUIRE_EQUAL (p.size(), 4); list::const_iterator i = p.begin(); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 0), DCPTime(123 + 48000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 48000), DCPTime(123 + 144000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 144000), DCPTime(123 + 240000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 240000), DCPTime(123 + 288000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 0), DCPTime(4000 + 48000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 48000), DCPTime(4000 + 144000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 144000), DCPTime(4000 + 240000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 240000), DCPTime(4000 + 288000))); } { @@ -273,8 +276,71 @@ BOOST_AUTO_TEST_CASE (reels_test5) list p = dcp->reels (); BOOST_REQUIRE_EQUAL (p.size(), 3); list::const_iterator i = p.begin(); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 0), DCPTime(123 + 48000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 48000), DCPTime(123 + 144000))); - BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(123 + 144000), DCPTime(123 + 192000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 0), DCPTime(4000 + 48000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 48000), DCPTime(4000 + 144000))); + BOOST_CHECK (*i++ == DCPTimePeriod (DCPTime(4000 + 144000), DCPTime(4000 + 192000))); } } + +/** Check reel split with a muxed video/audio source */ +BOOST_AUTO_TEST_CASE (reels_test6) +{ + shared_ptr film = new_test_film ("reels_test6"); + film->set_name ("reels_test6"); + 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 ()); + + film->set_j2k_bandwidth (100000000); + film->set_reel_type (REELTYPE_BY_LENGTH); + /* This is just over 2.5s at 100Mbit/s; should correspond to 60 frames */ + film->set_reel_length (31253154); + film->make_dcp (); + BOOST_REQUIRE (!wait_for_jobs ()); +} + +/** Check the case where the last bit of audio hangs over the end of the video + * and we are using REELTYPE_BY_VIDEO_CONTENT. + */ +BOOST_AUTO_TEST_CASE (reels_test7) +{ + shared_ptr film = new_test_film ("reels_test7"); + film->set_name ("reels_test7"); + film->set_container (Ratio::from_id ("185")); + film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST")); + shared_ptr A = content_factory(film, "test/data/flat_red.png").front(); + film->examine_and_add_content (A); + BOOST_REQUIRE (!wait_for_jobs ()); + shared_ptr B = content_factory(film, "test/data/awkward_length.wav").front(); + film->examine_and_add_content (B); + BOOST_REQUIRE (!wait_for_jobs ()); + film->set_video_frame_rate (24); + A->video->set_length (3 * 24); + + film->set_reel_type (REELTYPE_BY_VIDEO_CONTENT); + BOOST_REQUIRE_EQUAL (film->reels().size(), 2); + BOOST_CHECK (film->reels().front() == DCPTimePeriod(DCPTime(0), DCPTime::from_frames(3 * 24, 24))); + BOOST_CHECK (film->reels().back() == DCPTimePeriod(DCPTime::from_frames(3 * 24, 24), DCPTime::from_frames(3 * 24 + 1, 24))); + + 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 ()); +}