}
+/** Verify Interop subtitle-only stuff */
+void
+verify_interop_subtitle_asset(shared_ptr<const InteropSubtitleAsset> asset, vector<VerificationNote>& notes)
+{
+ if (asset->subtitles().empty()) {
+ notes.push_back({VerificationNote::Type::ERROR, VerificationNote::Code::MISSING_SUBTITLE, asset->id(), asset->file().get() });
+ }
+}
+
+
/** Verify SMPTE subtitle-only stuff */
void
verify_smpte_subtitle_asset (
notes.push_back ({VerificationNote::Type::WARNING, VerificationNote::Code::MISSED_CHECK_OF_ENCRYPTED});
}
+ auto interop = dynamic_pointer_cast<const InteropSubtitleAsset>(asset);
+ if (interop) {
+ verify_interop_subtitle_asset(interop, notes);
+ }
+
auto smpte = dynamic_pointer_cast<const SMPTESubtitleAsset>(asset);
if (smpte) {
verify_smpte_timed_text_asset (smpte, reel_asset_duration, notes);
return String::compose("The PKL %1 has more than one asset with the same ID", note.note().get());
case VerificationNote::Code::DUPLICATE_ASSET_ID_IN_ASSETMAP:
return String::compose("The ASSETMAP %1 has more than one asset with the same ID", note.note().get());
+ case VerificationNote::Code::MISSING_SUBTITLE:
+ return String::compose("The subtitle asset %1 has no subtitles", note.note().get());
}
return "";
* note contains the ASSETMAP ID
* file contains the ASSETMAP filename
*/
- DUPLICATE_ASSET_ID_IN_ASSETMAP
+ DUPLICATE_ASSET_ID_IN_ASSETMAP,
+ /** An Interop subtitle asset has no subtitles.
+ * note contains the asset ID
+ * file contains the asset filename
+ */
+ MISSING_SUBTITLE
};
VerificationNote (Type type, Code code)
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<DCSubtitle Version="1.0">
+ <SubtitleID>cab5c268-222b-41d2-88ae-6d6999441b17</SubtitleID>
+ <MovieTitle>Movie Title</MovieTitle>
+ <ReelNumber>1</ReelNumber>
+ <Language>French</Language>
+ <LoadFont Id="theFontId" URI="arial.ttf"/>
+</DCSubtitle>
}
+BOOST_AUTO_TEST_CASE(verify_interop_subtitle_asset_with_no_subtitles)
+{
+ path const dir("build/test/verify_interop_subtitle_asset_with_no_subtitles");
+ prepare_directory(dir);
+ copy_file("test/data/subs4.xml", dir / "subs.xml");
+ auto asset = make_shared<dcp::InteropSubtitleAsset>(dir / "subs.xml");
+ auto reel_asset = make_shared<dcp::ReelInteropSubtitleAsset>(asset, dcp::Fraction(24, 1), 16 * 24, 0);
+ write_dcp_with_single_asset(dir, reel_asset, dcp::Standard::INTEROP);
+
+ check_verify_result (
+ { dir },
+ {
+ { dcp::VerificationNote::Type::BV21_ERROR, dcp::VerificationNote::Code::INVALID_STANDARD },
+ { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISSING_SUBTITLE, asset->id(), boost::filesystem::canonical(asset->file().get()) },
+ });
+
+}
+
+
BOOST_AUTO_TEST_CASE (verify_valid_smpte_subtitles)
{
path const dir("build/test/verify_valid_smpte_subtitles");