if (reel_asset->language()) {
verify_language_tag (*reel_asset->language(), notes);
}
+
+ if (!reel_asset->entry_point()) {
+ notes.push_back ({VerificationNote::VERIFY_BV21_ERROR, VerificationNote::MISSING_SUBTITLE_ENTRY_POINT });
+ } else if (reel_asset->entry_point().get()) {
+ notes.push_back ({VerificationNote::VERIFY_BV21_ERROR, VerificationNote::SUBTITLE_ENTRY_POINT_NON_ZERO });
+ }
}
if (reel_asset->language()) {
verify_language_tag (*reel_asset->language(), notes);
}
+
+ if (!reel_asset->entry_point()) {
+ notes.push_back ({VerificationNote::VERIFY_BV21_ERROR, VerificationNote::MISSING_CLOSED_CAPTION_ENTRY_POINT });
+ } else if (reel_asset->entry_point().get()) {
+ notes.push_back ({VerificationNote::VERIFY_BV21_ERROR, VerificationNote::CLOSED_CAPTION_ENTRY_POINT_NON_ZERO });
+ }
}
return "At least one reel contains a subtitle asset, but some reel(s) do not";
case dcp::VerificationNote::CLOSED_CAPTION_ASSET_COUNTS_DIFFER:
return "At least one reel has closed captions, but reels have different numbers of closed caption assets.";
+ case dcp::VerificationNote::MISSING_SUBTITLE_ENTRY_POINT:
+ return "Subtitle assets must have an <EntryPoint> tag.";
+ case dcp::VerificationNote::SUBTITLE_ENTRY_POINT_NON_ZERO:
+ return "Subtitle assets must have an <EntryPoint> of 0.";
+ case dcp::VerificationNote::MISSING_CLOSED_CAPTION_ENTRY_POINT:
+ return "Closed caption assets must have an <EntryPoint> tag.";
+ case dcp::VerificationNote::CLOSED_CAPTION_ENTRY_POINT_NON_ZERO:
+ return "Closed caption assets must have an <EntryPoint> of 0.";
}
return "";
MAIN_SUBTITLE_NOT_IN_ALL_REELS,
/** If one reel has at least one ClosedCaption, all reels must have the same number of ClosedCaptions */
CLOSED_CAPTION_ASSET_COUNTS_DIFFER,
+ /** MainSubtitle in reels must have <EntryPoint> Bv2.1_8.3.2 */
+ MISSING_SUBTITLE_ENTRY_POINT,
+ /** MainSubtitle <EntryPoint> must be zero Bv2.1_8.3.2 */
+ SUBTITLE_ENTRY_POINT_NON_ZERO,
+ /** Closed caption in reels must have <EntryPoint> Bv2.1_8.3.2 */
+ MISSING_CLOSED_CAPTION_ENTRY_POINT,
+ /** Closed caption MainSubtitle <EntryPoint> must be zero Bv2.1_8.3.2 */
+ CLOSED_CAPTION_ENTRY_POINT_NON_ZERO,
};
VerificationNote (Type type, Code code)
}
}
+
+template <class T>
+void
+verify_text_entry_point_check (boost::filesystem::path dir, dcp::VerificationNote::Code code, boost::function<void (shared_ptr<T>)> adjust)
+{
+ boost::filesystem::remove_all (dir);
+ boost::filesystem::create_directories (dir);
+ auto dcp = make_shared<dcp::DCP>(dir);
+ auto cpl = make_shared<dcp::CPL>("A Test DCP", dcp::FEATURE);
+
+ auto subs = make_shared<dcp::SMPTESubtitleAsset>();
+ subs->set_language (dcp::LanguageTag("de-DE"));
+ subs->set_start_time (dcp::Time());
+ subs->add (simple_subtitle());
+ subs->write (dir / "subs.mxf");
+ auto reel_text = make_shared<T>(subs, dcp::Fraction(24, 1), 240, 0);
+ adjust (reel_text);
+
+ auto reel = make_shared<dcp::Reel>(
+ make_shared<dcp::ReelMonoPictureAsset>(simple_picture(dir, "", 240), 0),
+ make_shared<dcp::ReelSoundAsset>(simple_sound(dir, "", dcp::MXFMetadata(), "en-US", 240), 0)
+ );
+
+ reel->add (reel_text);
+
+ cpl->add (reel);
+
+ dcp->add (cpl);
+ dcp->write_xml (dcp::SMPTE);
+
+ check_verify_result ({dir}, {{ dcp::VerificationNote::VERIFY_BV21_ERROR, code }});
+}
+
+
+BOOST_AUTO_TEST_CASE (verify_text_entry_point)
+{
+ verify_text_entry_point_check<dcp::ReelSubtitleAsset> (
+ "build/test/verify_subtitle_entry_point_must_be_present",
+ dcp::VerificationNote::MISSING_SUBTITLE_ENTRY_POINT,
+ [](shared_ptr<dcp::ReelSubtitleAsset> asset) {
+ asset->unset_entry_point ();
+ }
+ );
+
+ verify_text_entry_point_check<dcp::ReelSubtitleAsset> (
+ "build/test/verify_subtitle_entry_point_must_be_zero",
+ dcp::VerificationNote::SUBTITLE_ENTRY_POINT_NON_ZERO,
+ [](shared_ptr<dcp::ReelSubtitleAsset> asset) {
+ asset->set_entry_point (4);
+ }
+ );
+
+ verify_text_entry_point_check<dcp::ReelClosedCaptionAsset> (
+ "build/test/verify_closed_caption_entry_point_must_be_present",
+ dcp::VerificationNote::MISSING_CLOSED_CAPTION_ENTRY_POINT,
+ [](shared_ptr<dcp::ReelClosedCaptionAsset> asset) {
+ asset->unset_entry_point ();
+ }
+ );
+
+ verify_text_entry_point_check<dcp::ReelClosedCaptionAsset> (
+ "build/test/verify_closed_caption_entry_point_must_be_zero",
+ dcp::VerificationNote::CLOSED_CAPTION_ENTRY_POINT_NON_ZERO,
+ [](shared_ptr<dcp::ReelClosedCaptionAsset> asset) {
+ asset->set_entry_point (9);
+ }
+ );
+}