Rename j2k_bandwidth -> video_bit_rate.
[dcpomatic.git] / test / reels_test.cc
index 5bee4a81918462bb45b3c26d260bd4698b04669d..5fcddfe781378ade48ce2ad86be6d5f4efeee13f 100644 (file)
@@ -54,6 +54,14 @@ using std::vector;
 using namespace dcpomatic;
 
 
+static
+void
+filter_ok(std::vector<dcp::VerificationNote>& notes)
+{
+       notes.erase(std::remove_if(notes.begin(), notes.end(), [](dcp::VerificationNote const& note) { return note.type() == dcp::VerificationNote::Type::OK; }), notes.end());
+}
+
+
 /** Test Film::reels() */
 BOOST_AUTO_TEST_CASE (reels_test1)
 {
@@ -80,7 +88,7 @@ BOOST_AUTO_TEST_CASE (reels_test1)
        BOOST_CHECK_EQUAL (r.back().from.get(), 288000);
        BOOST_CHECK_EQUAL (r.back().to.get(), 288000 * 2);
 
-       film->set_j2k_bandwidth (100000000);
+       film->set_video_bit_rate(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);
@@ -110,21 +118,21 @@ BOOST_AUTO_TEST_CASE (reels_test2)
        film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST"));
 
        {
-               shared_ptr<ImageContent> c (new ImageContent("test/data/flat_red.png"));
+               auto c = make_shared<ImageContent>("test/data/flat_red.png");
                film->examine_and_add_content (c);
                BOOST_REQUIRE (!wait_for_jobs());
                c->video->set_length (24);
        }
 
        {
-               shared_ptr<ImageContent> c (new ImageContent("test/data/flat_green.png"));
+               auto c = make_shared<ImageContent>("test/data/flat_green.png");
                film->examine_and_add_content (c);
                BOOST_REQUIRE (!wait_for_jobs());
                c->video->set_length (24);
        }
 
        {
-               shared_ptr<ImageContent> c (new ImageContent("test/data/flat_blue.png"));
+               auto c = make_shared<ImageContent>("test/data/flat_blue.png");
                film->examine_and_add_content (c);
                BOOST_REQUIRE (!wait_for_jobs());
                c->video->set_length (24);
@@ -134,6 +142,8 @@ BOOST_AUTO_TEST_CASE (reels_test2)
        BOOST_CHECK_EQUAL (film->reels().size(), 3U);
        BOOST_REQUIRE (!wait_for_jobs());
 
+       film->set_audio_channels(16);
+
        make_and_verify_dcp (film);
 
        check_dcp ("test/data/reels_test2", film->dir (film->dcp_name()));
@@ -141,6 +151,7 @@ BOOST_AUTO_TEST_CASE (reels_test2)
        auto c = make_shared<DCPContent>(film->dir(film->dcp_name()));
        auto film2 = new_test_film2 ("reels_test2b", {c});
        film2->set_reel_type (ReelType::BY_VIDEO_CONTENT);
+       film2->set_audio_channels(16);
 
        auto r = film2->reels ();
        BOOST_CHECK_EQUAL (r.size(), 3U);
@@ -157,7 +168,7 @@ BOOST_AUTO_TEST_CASE (reels_test2)
        c->set_reference_video (true);
        c->set_reference_audio (true);
 
-       make_and_verify_dcp (film2, {dcp::VerificationNote::Code::EXTERNAL_ASSET});
+       make_and_verify_dcp(film2, {dcp::VerificationNote::Code::EXTERNAL_ASSET}, false);
 }
 
 
@@ -200,7 +211,7 @@ BOOST_AUTO_TEST_CASE (reels_test4)
        /* 4 piece of 1s-long content */
        shared_ptr<ImageContent> content[4];
        for (int i = 0; i < 4; ++i) {
-               content[i].reset (new ImageContent("test/data/flat_green.png"));
+               content[i] = make_shared<ImageContent>("test/data/flat_green.png");
                film->examine_and_add_content (content[i]);
                BOOST_REQUIRE (!wait_for_jobs());
                content[i]->video->set_length (24);
@@ -210,6 +221,8 @@ BOOST_AUTO_TEST_CASE (reels_test4)
        film->examine_and_add_content (subs);
        BOOST_REQUIRE (!wait_for_jobs());
 
+       film->set_audio_channels(16);
+
        auto reels = film->reels();
        BOOST_REQUIRE_EQUAL (reels.size(), 4U);
        auto i = reels.begin ();
@@ -258,7 +271,7 @@ BOOST_AUTO_TEST_CASE (reels_test5)
        }
 
        {
-               dcp->set_trim_start (ContentTime::from_seconds (0.5));
+               dcp->set_trim_start(film, ContentTime::from_seconds(0.5));
                auto p = dcp->reels (film);
                BOOST_REQUIRE_EQUAL (p.size(), 4U);
                auto i = p.begin();
@@ -280,7 +293,7 @@ BOOST_AUTO_TEST_CASE (reels_test5)
        }
 
        {
-               dcp->set_trim_start (ContentTime::from_seconds (1.5));
+               dcp->set_trim_start(film, ContentTime::from_seconds(1.5));
                auto p = dcp->reels (film);
                BOOST_REQUIRE_EQUAL (p.size(), 3U);
                auto i = p.begin();
@@ -297,16 +310,20 @@ BOOST_AUTO_TEST_CASE (reels_test6)
        auto A = make_shared<FFmpegContent>("test/data/test2.mp4");
        auto film = new_test_film2 ("reels_test6", {A});
 
-       film->set_j2k_bandwidth (100000000);
+       film->set_video_bit_rate(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);
+       /* dcp_inspect and clairmeta both give errors about reel <1s in length */
        make_and_verify_dcp (
                film,
                {
                        dcp::VerificationNote::Code::INVALID_INTRINSIC_DURATION,
                        dcp::VerificationNote::Code::INVALID_DURATION,
-               });
+               },
+               false,
+               false
+               );
 }
 
 
@@ -315,8 +332,8 @@ BOOST_AUTO_TEST_CASE (reels_test6)
  */
 BOOST_AUTO_TEST_CASE (reels_test7)
 {
-       auto A = content_factory("test/data/flat_red.png").front();
-       auto B = content_factory("test/data/awkward_length.wav").front();
+       auto A = content_factory("test/data/flat_red.png")[0];
+       auto B = content_factory("test/data/awkward_length.wav")[0];
        auto film = new_test_film2 ("reels_test7", { A, B });
        film->set_video_frame_rate (24);
        A->video->set_length (2 * 24);
@@ -351,7 +368,7 @@ BOOST_AUTO_TEST_CASE (reels_test9)
        make_and_verify_dcp (film);
 
        auto B = make_shared<DCPContent>(film->dir(film->dcp_name()));
-       auto film2 = new_test_film2("reels_test9b", {B, content_factory("test/data/dcp_sub4.xml").front()});
+       auto film2 = new_test_film2("reels_test9b", {B, content_factory("test/data/dcp_sub4.xml")[0]});
        B->set_reference_video(true);
        B->set_reference_audio(true);
        film2->set_reel_type(ReelType::BY_VIDEO_CONTENT);
@@ -386,7 +403,7 @@ BOOST_AUTO_TEST_CASE (reels_test10)
 
        /* Now try to make the VF; this used to fail */
        auto ov_dcp = make_shared<DCPContent>(ov->dir(ov->dcp_name()));
-       auto vf = new_test_film2("reels_test10_vf", {ov_dcp, content_factory("test/data/15s.srt").front()});
+       auto vf = new_test_film2("reels_test10_vf", {ov_dcp, content_factory("test/data/15s.srt")[0]});
        vf->set_reel_type (ReelType::BY_VIDEO_CONTENT);
        ov_dcp->set_reference_video (true);
        ov_dcp->set_reference_audio (true);
@@ -398,7 +415,8 @@ BOOST_AUTO_TEST_CASE (reels_test10)
                        dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE,
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME,
                        dcp::VerificationNote::Code::INVALID_SUBTITLE_DURATION,
-               });
+               },
+               false);
 }
 
 
@@ -411,7 +429,7 @@ BOOST_AUTO_TEST_CASE (reels_test11)
        auto film = new_test_film2 ("reels_test11", {A});
        film->set_video_frame_rate (24);
        A->video->set_length (240);
-       A->set_video_frame_rate (24);
+       A->set_video_frame_rate(film, 24);
        A->set_position (film, DCPTime::from_seconds(1));
        film->set_reel_type (ReelType::BY_VIDEO_CONTENT);
        make_and_verify_dcp (film);
@@ -440,11 +458,11 @@ BOOST_AUTO_TEST_CASE (reels_test12)
        film->set_sequence (false);
 
        A->video->set_length (240);
-       A->set_video_frame_rate (24);
+       A->set_video_frame_rate(film, 24);
        A->set_position (film, DCPTime::from_seconds(1));
 
        B->video->set_length (120);
-       B->set_video_frame_rate (24);
+       B->set_video_frame_rate(film, 24);
        B->set_position (film, DCPTime::from_seconds(14));
 
        auto r = film->reels ();
@@ -498,9 +516,10 @@ BOOST_AUTO_TEST_CASE (reels_should_not_be_short1)
        make_and_verify_dcp (film);
 
        vector<boost::filesystem::path> dirs = { film->dir(film->dcp_name(false)) };
-       auto notes = dcp::verify(dirs, boost::bind(&no_op), boost::bind(&no_op), TestPaths::xsd());
-       dump_notes (notes);
-       BOOST_REQUIRE (notes.empty());
+       auto result = dcp::verify(dirs, {}, boost::bind(&no_op), boost::bind(&no_op), {}, TestPaths::xsd());
+       filter_ok(result.notes);
+       dump_notes(result.notes);
+       BOOST_REQUIRE(result.notes.empty());
 }
 
 
@@ -523,9 +542,10 @@ BOOST_AUTO_TEST_CASE (reels_should_not_be_short2)
        make_and_verify_dcp (film);
 
        vector<boost::filesystem::path> dirs = { film->dir(film->dcp_name(false)) };
-       auto const notes = dcp::verify(dirs, boost::bind(&no_op), boost::bind(&no_op), TestPaths::xsd());
-       dump_notes (notes);
-       BOOST_REQUIRE (notes.empty());
+       auto result = dcp::verify(dirs, {}, boost::bind(&no_op), boost::bind(&no_op), {}, TestPaths::xsd());
+       filter_ok(result.notes);
+       dump_notes(result.notes);
+       BOOST_REQUIRE(result.notes.empty());
 }
 
 
@@ -544,9 +564,10 @@ BOOST_AUTO_TEST_CASE (reels_should_not_be_short3)
 
        make_and_verify_dcp (film);
 
-       auto const notes = dcp::verify({}, boost::bind(&no_op), boost::bind(&no_op), TestPaths::xsd());
-       dump_notes (notes);
-       BOOST_REQUIRE (notes.empty());
+       auto result = dcp::verify({}, {}, boost::bind(&no_op), boost::bind(&no_op), {}, TestPaths::xsd());
+       filter_ok(result.notes);
+       dump_notes(result.notes);
+       BOOST_REQUIRE(result.notes.empty());
 }
 
 
@@ -574,9 +595,10 @@ BOOST_AUTO_TEST_CASE (reels_should_not_be_short4)
        BOOST_REQUIRE (!wait_for_jobs());
 
        vector<boost::filesystem::path> dirs = { film->dir(film->dcp_name(false)) };
-       auto const notes = dcp::verify(dirs, boost::bind(&no_op), boost::bind(&no_op), TestPaths::xsd());
-       dump_notes (notes);
-       BOOST_REQUIRE (notes.empty());
+       auto result = dcp::verify(dirs, {}, boost::bind(&no_op), boost::bind(&no_op), {}, TestPaths::xsd());
+       filter_ok(result.notes);
+       dump_notes(result.notes);
+       BOOST_REQUIRE(result.notes.empty());
 }
 
 
@@ -617,13 +639,13 @@ BOOST_AUTO_TEST_CASE (repeated_dcp_into_reels)
 
        for (int i = 0; i < 4; ++i) {
                original_dcp[i]->set_position(film2, DCPTime::from_frames(total_frames * i / 4, frame_rate));
-               original_dcp[i]->set_trim_start(ContentTime::from_frames(total_frames * i / 4, frame_rate));
+               original_dcp[i]->set_trim_start(film2, ContentTime::from_frames(total_frames * i / 4, frame_rate));
                original_dcp[i]->set_trim_end  (ContentTime::from_frames(total_frames * (4 - i - 1) / 4, frame_rate));
                original_dcp[i]->set_reference_video(true);
                original_dcp[i]->set_reference_audio(true);
        }
 
-       make_and_verify_dcp(film2, { dcp::VerificationNote::Code::EXTERNAL_ASSET });
+       make_and_verify_dcp(film2, { dcp::VerificationNote::Code::EXTERNAL_ASSET }, false);
 
        dcp::DCP check1(film1->dir(film1->dcp_name()));
        check1.read();