X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fmarkers_test.cc;h=a3c46af44109e237de0aad77f390b418905f1ec3;hb=67cc6717aeb5f3b96448b206d1b85d68cbb26767;hp=f187057321ff92db311d1e484ea754fd8cf8e486;hpb=d330522cb1a0504e5f85c2346344e04916c68a4f;p=dcpomatic.git diff --git a/test/markers_test.cc b/test/markers_test.cc index f18705732..a3c46af44 100644 --- a/test/markers_test.cc +++ b/test/markers_test.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2020 Carl Hetherington + Copyright (C) 2020-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -37,34 +37,32 @@ using std::string; using boost::optional; -using boost::shared_ptr; /** Check that FFOC and LFOC are automatically added if not specified */ BOOST_AUTO_TEST_CASE (automatic_ffoc_lfoc_markers_test1) { string const name = "automatic_ffoc_lfoc_markers_test1"; - shared_ptr film = new_test_film2 (name); - film->examine_and_add_content (content_factory("test/data/flat_red.png").front()); + auto film = new_test_film2 (name); + film->examine_and_add_content (content_factory("test/data/flat_red.png")[0]); BOOST_REQUIRE (!wait_for_jobs()); film->set_interop (false); - film->make_dcp (); - BOOST_REQUIRE (!wait_for_jobs()); + make_and_verify_dcp (film); dcp::DCP dcp (String::compose("build/test/%1/%2", name, film->dcp_name())); dcp.read (); - BOOST_REQUIRE_EQUAL (dcp.cpls().size(), 1); - shared_ptr cpl = dcp.cpls().front(); - BOOST_REQUIRE_EQUAL (cpl->reels().size(), 1); - shared_ptr reel = cpl->reels().front(); - shared_ptr markers = reel->main_markers(); + BOOST_REQUIRE_EQUAL (dcp.cpls().size(), 1U); + auto cpl = dcp.cpls().front(); + BOOST_REQUIRE_EQUAL (cpl->reels().size(), 1U); + auto reel = cpl->reels()[0]; + auto markers = reel->main_markers(); BOOST_REQUIRE (markers); - optional ffoc = markers->get (dcp::Marker::FFOC); + auto ffoc = markers->get (dcp::Marker::FFOC); BOOST_REQUIRE (ffoc); - BOOST_CHECK (*ffoc == dcp::Time (0, 0, 0, 0, 24)); - optional lfoc = markers->get (dcp::Marker::LFOC); + BOOST_CHECK (*ffoc == dcp::Time(0, 0, 0, 1, 24)); + auto lfoc = markers->get (dcp::Marker::LFOC); BOOST_REQUIRE (lfoc); BOOST_CHECK (*lfoc == dcp::Time(0, 0, 9, 23, 24)); } @@ -74,30 +72,83 @@ BOOST_AUTO_TEST_CASE (automatic_ffoc_lfoc_markers_test1) BOOST_AUTO_TEST_CASE (automatic_ffoc_lfoc_markers_test2) { string const name = "automatic_ffoc_lfoc_markers_test2"; - shared_ptr film = new_test_film2 (name); - film->examine_and_add_content (content_factory("test/data/flat_red.png").front()); + auto film = new_test_film2 (name); + film->examine_and_add_content (content_factory("test/data/flat_red.png")[0]); BOOST_REQUIRE (!wait_for_jobs()); film->set_interop (false); film->set_marker (dcp::Marker::FFOC, dcpomatic::DCPTime::from_seconds(1)); film->set_marker (dcp::Marker::LFOC, dcpomatic::DCPTime::from_seconds(9)); - film->make_dcp (); - BOOST_REQUIRE (!wait_for_jobs()); + make_and_verify_dcp ( + film, + { + dcp::VerificationNote::Code::INCORRECT_FFOC, + dcp::VerificationNote::Code::INCORRECT_LFOC + }); dcp::DCP dcp (String::compose("build/test/%1/%2", name, film->dcp_name())); dcp.read (); - BOOST_REQUIRE_EQUAL (dcp.cpls().size(), 1); - shared_ptr cpl = dcp.cpls().front(); - BOOST_REQUIRE_EQUAL (cpl->reels().size(), 1); - shared_ptr reel = cpl->reels().front(); - shared_ptr markers = reel->main_markers(); + BOOST_REQUIRE_EQUAL (dcp.cpls().size(), 1U); + auto cpl = dcp.cpls().front(); + BOOST_REQUIRE_EQUAL (cpl->reels().size(), 1U); + auto reel = cpl->reels()[0]; + auto markers = reel->main_markers(); BOOST_REQUIRE (markers); - optional ffoc = markers->get (dcp::Marker::FFOC); + auto ffoc = markers->get (dcp::Marker::FFOC); BOOST_REQUIRE (ffoc); BOOST_CHECK (*ffoc == dcp::Time (0, 0, 1, 0, 24)); - optional lfoc = markers->get (dcp::Marker::LFOC); + auto lfoc = markers->get (dcp::Marker::LFOC); BOOST_REQUIRE (lfoc); BOOST_CHECK (*lfoc == dcp::Time(0, 0, 9, 0, 24)); } + + +BOOST_AUTO_TEST_CASE(markers_correct_with_reels) +{ + string const name = "markers_correct_with_reels"; + auto content1 = content_factory("test/data/flat_red.png")[0]; + auto content2 = content_factory("test/data/flat_red.png")[0]; + auto film = new_test_film2(name, { content1, content2}); + + film->set_interop(false); + film->set_reel_type(ReelType::BY_VIDEO_CONTENT); + make_and_verify_dcp(film); + + dcp::DCP dcp(String::compose("build/test/%1/%2", name, film->dcp_name())); + dcp.read (); + BOOST_REQUIRE_EQUAL(dcp.cpls().size(), 1U); + auto cpl = dcp.cpls()[0]; + BOOST_REQUIRE_EQUAL(cpl->reels().size(), 2U); + + auto markers1 = cpl->reels()[0]->main_markers(); + BOOST_REQUIRE(markers1); + auto ffoc = markers1->get(dcp::Marker::FFOC); + BOOST_REQUIRE(ffoc); + BOOST_CHECK(*ffoc == dcp::Time(0, 0, 0, 1, 24)); + auto no_lfoc = markers1->get(dcp::Marker::LFOC); + BOOST_CHECK(!no_lfoc); + + auto markers2 = cpl->reels()[1]->main_markers(); + BOOST_REQUIRE(markers2); + auto no_ffoc = markers2->get(dcp::Marker::FFOC); + BOOST_REQUIRE(!no_ffoc); + auto lfoc = markers2->get(dcp::Marker::LFOC); + BOOST_REQUIRE(lfoc); + BOOST_CHECK(*lfoc == dcp::Time(0, 0, 9, 23, 24)); +} + + +BOOST_AUTO_TEST_CASE(no_markers_with_interop) +{ + string const name = "no_markers_with_interop"; + auto film = new_test_film2(name, content_factory("test/data/flat_red.png")); + + film->set_interop(true); + make_and_verify_dcp(film, { dcp::VerificationNote::Code::INVALID_STANDARD }); + + auto cpl = find_file(film->dir(film->dcp_name()), "cpl_"); + BOOST_CHECK(dcp::file_to_string(cpl).find("MainMarkers") == std::string::npos); +} +