{
auto reel = make_shared<dcp::Reel>();
reel->add (reel_asset);
+ reel->add (simple_markers());
+
auto cpl = make_shared<dcp::CPL>("hello", dcp::TRAILER);
cpl->add (reel);
auto dcp = make_shared<dcp::DCP>(dir);
auto notes = dcp::verify (directories, &stage, &progress, xsd_test);
boost::filesystem::path const cpl_file = "build/test/verify_test1/cpl_81fb54df-e1bf-4647-8788-ea7ba154375b.xml";
- boost::filesystem::path const pkl_file = "build/test/verify_test1/pkl_cd49971e-bf4c-4594-8474-54ebef09a40c.xml";
+ boost::filesystem::path const pkl_file = "build/test/verify_test1/pkl_63c3aece-c581-4603-b612-75e43f0c0430.xml";
boost::filesystem::path const assetmap_file = "build/test/verify_test1/ASSETMAP.xml";
auto st = stages.begin();
auto directories = setup (1, 3);
{
- Editor e ("build/test/verify_test3/pkl_cd49971e-bf4c-4594-8474-54ebef09a40c.xml");
+ Editor e ("build/test/verify_test3/pkl_63c3aece-c581-4603-b612-75e43f0c0430.xml");
e.replace ("<Hash>", "<Hash>x");
}
boost::filesystem::path
pkl (int n)
{
- return dcp::String::compose("build/test/verify_test%1/pkl_cd49971e-bf4c-4594-8474-54ebef09a40c.xml", n);
+ return dcp::String::compose("build/test/verify_test%1/pkl_63c3aece-c581-4603-b612-75e43f0c0430.xml", n);
}
static
{
check_verify_result_after_replace (
11, &pkl,
- "<Id>urn:uuid:cd4", "<Id>urn:uuid:xd4",
+ "<Id>urn:uuid:63c", "<Id>urn:uuid:x3c",
{ dcp::VerificationNote::XML_VALIDATION_ERROR }
);
}
auto reel_asset = make_shared<dcp::ReelSubtitleAsset>(asset, dcp::Fraction(24, 1), 16 * 24, 0);
write_dcp_with_single_asset (dir, reel_asset);
- auto notes = dcp::verify ({dir}, &stage, &progress, xsd_test);
- BOOST_REQUIRE_EQUAL (notes.size(), 0);
+ check_verify_result ({dir}, {});
}
auto reel = make_shared<dcp::Reel>();
reel->add (reel_asset);
+
+ reel->add (simple_markers(16 * 24 - 1));
+
auto cpl = make_shared<dcp::CPL>("hello", dcp::TRAILER);
cpl->add (reel);
cpl->set_main_sound_configuration ("L,C,R,Lfe,-,-");
dcp.add (cpl);
dcp.write_xml (dcp::SMPTE);
- auto notes = dcp::verify ({dir}, &stage, &progress, xsd_test);
- BOOST_CHECK (notes.empty());
+ check_verify_result ({dir}, {});
}
cpl->set_main_picture_stored_area (dcp::Size(1998, 1080));
cpl->set_main_picture_active_area (dcp::Size(1440, 1080));
+ reel->add (simple_markers());
+
dcp::DCP dcp (dir);
dcp.add (cpl);
dcp.write_xml (dcp::SMPTE);
auto sound = simple_sound (dir, "foo", dcp::MXFMetadata(), "frobozz");
auto reel_sound = make_shared<dcp::ReelSoundAsset>(sound, 0);
reel->add (reel_sound);
+ reel->add (simple_markers());
+
auto cpl = make_shared<dcp::CPL>("hello", dcp::TRAILER);
cpl->add (reel);
cpl->_additional_subtitle_languages.push_back("this-is-wrong");
reel->add (make_shared<dcp::ReelMonoPictureAsset>(std::dynamic_pointer_cast<dcp::MonoPictureAsset>(mp), 0));
}
+ reel->add (simple_markers(frame_rate));
+
cpl->add (reel);
d->add (cpl);
auto reel_asset1 = make_shared<dcp::ReelSubtitleAsset>(asset1, dcp::Fraction(24, 1), 16 * 24, 0);
auto reel1 = make_shared<dcp::Reel>();
reel1->add (reel_asset1);
+ auto markers1 = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 16 * 24, 0);
+ markers1->set (dcp::Marker::FFOC, dcp::Time(1, 24, 24));
+ reel1->add (markers1);
auto asset2 = make_shared<dcp::SMPTESubtitleAsset>();
asset2->set_start_time (dcp::Time());
auto reel_asset2 = make_shared<dcp::ReelSubtitleAsset>(asset2, dcp::Fraction(24, 1), 16 * 24, 0);
auto reel2 = make_shared<dcp::Reel>();
reel2->add (reel_asset2);
+ auto markers2 = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 16 * 24, 0);
+ markers2->set (dcp::Marker::LFOC, dcp::Time(16 * 24 - 1, 24, 24));
+ reel2->add (markers2);
auto cpl = make_shared<dcp::CPL>("hello", dcp::TRAILER);
cpl->add (reel1);
auto sound = simple_sound (dir, "foo", dcp::MXFMetadata(), "de-DE", 24, 96000);
auto reel_sound = make_shared<dcp::ReelSoundAsset>(sound, 0);
reel->add (reel_sound);
+ reel->add (simple_markers());
auto cpl = make_shared<dcp::CPL>("hello", dcp::TRAILER);
cpl->add (reel);
auto dcp = make_shared<dcp::DCP>(dir);
shared_ptr<dcp::MonoPictureAsset> mp = simple_picture (dir, "", 24);
shared_ptr<dcp::SoundAsset> ms = simple_sound (dir, "", dcp::MXFMetadata(), "en-US", 25);
- cpl->add (
- make_shared<dcp::Reel>(
- make_shared<dcp::ReelMonoPictureAsset>(mp, 0),
- make_shared<dcp::ReelSoundAsset>(ms, 0)
- )
- );
+ auto reel = make_shared<dcp::Reel>(
+ make_shared<dcp::ReelMonoPictureAsset>(mp, 0),
+ make_shared<dcp::ReelSoundAsset>(ms, 0)
+ );
+
+ reel->add (simple_markers());
+ cpl->add (reel);
dcp->add (cpl);
dcp->write_xml (dcp::SMPTE);
reel1->add (make_shared<dcp::ReelSubtitleAsset>(subs, dcp::Fraction(24, 1), 240, 0));
}
- cpl->add (reel1);
+ auto markers1 = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 240, 0);
+ markers1->set (dcp::Marker::FFOC, dcp::Time(1, 24, 24));
+ reel1->add (markers1);
+ cpl->add (reel1);
auto reel2 = make_shared<dcp::Reel>(
make_shared<dcp::ReelMonoPictureAsset>(simple_picture(dir, "", 240), 0),
reel2->add (make_shared<dcp::ReelSubtitleAsset>(subs, dcp::Fraction(24, 1), 240, 0));
}
+ auto markers2 = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 240, 0);
+ markers2->set (dcp::Marker::LFOC, dcp::Time(239, 24, 24));
+ reel2->add (markers2);
+
cpl->add (reel2);
dcp->add (cpl);
reel1->add (make_shared<dcp::ReelClosedCaptionAsset>(subs, dcp::Fraction(24, 1), 240, 0));
}
+ auto markers1 = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 240, 0);
+ markers1->set (dcp::Marker::FFOC, dcp::Time(1, 24, 24));
+ reel1->add (markers1);
+
cpl->add (reel1);
auto reel2 = make_shared<dcp::Reel>(
reel2->add (make_shared<dcp::ReelClosedCaptionAsset>(subs, dcp::Fraction(24, 1), 240, 0));
}
+ auto markers2 = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 240, 0);
+ markers2->set (dcp::Marker::LFOC, dcp::Time(239, 24, 24));
+ reel2->add (markers2);
+
cpl->add (reel2);
dcp->add (cpl);
reel->add (reel_text);
+ reel->add (simple_markers(240));
+
cpl->add (reel);
dcp->add (cpl);
}
-
-BOOST_AUTO_TEST_CASE (verify_features_must_have_ffec_ffmc1)
+static
+void
+verify_markers_test (
+ boost::filesystem::path dir,
+ vector<pair<dcp::Marker, dcp::Time>> markers,
+ vector<std::pair<dcp::VerificationNote::Type, dcp::VerificationNote::Code>> types_and_codes
+ )
{
- boost::filesystem::path const dir("build/test/verify_features_must_have_ffec_ffmc1");
auto dcp = make_simple (dir);
dcp->cpls()[0]->set_content_kind (dcp::FEATURE);
- auto markers = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 0);
- markers->set (dcp::Marker::FFEC, dcp::Time(0, 0, 4, 0, 24));
- markers->set (dcp::Marker::FFMC, dcp::Time(0, 0, 5, 0, 24));
- dcp->cpls()[0]->reels()[0]->add(markers);
+ auto markers_asset = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 24, 0);
+ for (auto const& i: markers) {
+ markers_asset->set (i.first, i.second);
+ }
+ dcp->cpls()[0]->reels()[0]->add(markers_asset);
dcp->write_xml (dcp::SMPTE);
- check_verify_result ({dir}, {});
+ check_verify_result ({dir}, types_and_codes);
}
-BOOST_AUTO_TEST_CASE (verify_features_must_have_ffec_ffmc2)
+BOOST_AUTO_TEST_CASE (verify_markers)
{
- boost::filesystem::path const dir("build/test/verify_features_must_have_ffec_ffmc2");
- auto dcp = make_simple (dir);
- dcp->cpls()[0]->set_content_kind (dcp::FEATURE);
- auto markers = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 0);
- markers->set (dcp::Marker::FFEC, dcp::Time(0, 0, 4, 0, 24));
- dcp->cpls()[0]->reels()[0]->add(markers);
- dcp->write_xml (dcp::SMPTE);
- check_verify_result ({dir}, {{dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::MISSING_FFMC_IN_FEATURE}});
-}
+ verify_markers_test (
+ "build/test/verify_markers_all_correct",
+ {
+ { dcp::Marker::FFEC, dcp::Time(12, 24, 24) },
+ { dcp::Marker::FFMC, dcp::Time(13, 24, 24) },
+ { dcp::Marker::FFOC, dcp::Time(1, 24, 24) },
+ { dcp::Marker::LFOC, dcp::Time(23, 24, 24) }
+ },
+ {}
+ );
+ verify_markers_test (
+ "build/test/verify_markers_missing_ffec",
+ {
+ { dcp::Marker::FFMC, dcp::Time(13, 24, 24) },
+ { dcp::Marker::FFOC, dcp::Time(1, 24, 24) },
+ { dcp::Marker::LFOC, dcp::Time(23, 24, 24) }
+ },
+ {
+ { dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::MISSING_FFEC_IN_FEATURE }
+ });
-BOOST_AUTO_TEST_CASE (verify_features_must_have_ffec_ffmc3)
-{
- boost::filesystem::path const dir("build/test/verify_features_must_have_ffec_ffmc3");
- auto dcp = make_simple (dir);
- dcp->cpls()[0]->set_content_kind (dcp::FEATURE);
- auto markers = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 0);
- markers->set (dcp::Marker::FFMC, dcp::Time(0, 0, 4, 0, 24));
- dcp->cpls()[0]->reels()[0]->add(markers);
- dcp->write_xml (dcp::SMPTE);
- check_verify_result ({dir}, {{dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::MISSING_FFEC_IN_FEATURE}});
-}
+ verify_markers_test (
+ "build/test/verify_markers_missing_ffmc",
+ {
+ { dcp::Marker::FFEC, dcp::Time(12, 24, 24) },
+ { dcp::Marker::FFOC, dcp::Time(1, 24, 24) },
+ { dcp::Marker::LFOC, dcp::Time(23, 24, 24) }
+ },
+ {
+ { dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::MISSING_FFMC_IN_FEATURE }
+ });
+
+ verify_markers_test (
+ "build/test/verify_markers_missing_ffoc",
+ {
+ { dcp::Marker::FFEC, dcp::Time(12, 24, 24) },
+ { dcp::Marker::FFMC, dcp::Time(13, 24, 24) },
+ { dcp::Marker::LFOC, dcp::Time(23, 24, 24) }
+ },
+ {
+ { dcp::VerificationNote::VERIFY_WARNING, dcp::VerificationNote::MISSING_FFOC}
+ });
+ verify_markers_test (
+ "build/test/verify_markers_missing_lfoc",
+ {
+ { dcp::Marker::FFEC, dcp::Time(12, 24, 24) },
+ { dcp::Marker::FFMC, dcp::Time(13, 24, 24) },
+ { dcp::Marker::FFOC, dcp::Time(1, 24, 24) }
+ },
+ {
+ { dcp::VerificationNote::VERIFY_WARNING, dcp::VerificationNote::MISSING_LFOC }
+ });
-BOOST_AUTO_TEST_CASE (verify_features_must_have_ffec_ffmc4)
-{
- boost::filesystem::path const dir("build/test/verify_features_must_have_ffec_ffmc4");
- auto dcp = make_simple (dir);
- dcp->cpls()[0]->set_content_kind (dcp::FEATURE);
- auto markers = make_shared<dcp::ReelMarkersAsset>(dcp::Fraction(24, 1), 0);
- dcp->cpls()[0]->reels()[0]->add(markers);
- dcp->write_xml (dcp::SMPTE);
- check_verify_result (
- {dir},
+ verify_markers_test (
+ "build/test/verify_markers_incorrect_ffoc",
{
- { dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::MISSING_FFEC_IN_FEATURE },
- { dcp::VerificationNote::VERIFY_BV21_ERROR, dcp::VerificationNote::MISSING_FFMC_IN_FEATURE }
+ { dcp::Marker::FFEC, dcp::Time(12, 24, 24) },
+ { dcp::Marker::FFMC, dcp::Time(13, 24, 24) },
+ { dcp::Marker::FFOC, dcp::Time(3, 24, 24) },
+ { dcp::Marker::LFOC, dcp::Time(23, 24, 24) }
+ },
+ {
+ { dcp::VerificationNote::VERIFY_WARNING, dcp::VerificationNote::INCORRECT_FFOC }
+ });
+
+ verify_markers_test (
+ "build/test/verify_markers_incorrect_lfoc",
+ {
+ { dcp::Marker::FFEC, dcp::Time(12, 24, 24) },
+ { dcp::Marker::FFMC, dcp::Time(13, 24, 24) },
+ { dcp::Marker::FFOC, dcp::Time(1, 24, 24) },
+ { dcp::Marker::LFOC, dcp::Time(18, 24, 24) }
+ },
+ {
+ { dcp::VerificationNote::VERIFY_WARNING, dcp::VerificationNote::INCORRECT_LFOC }
});
}