diff options
| -rw-r--r-- | src/dcp.cc | 13 | ||||
| -rw-r--r-- | src/verify.cc | 2 | ||||
| -rw-r--r-- | src/verify.h | 2 | ||||
| -rw-r--r-- | test/verify_test.cc | 37 |
4 files changed, 52 insertions, 2 deletions
@@ -256,8 +256,17 @@ DCP::read (list<dcp::VerificationNote>* notes, bool ignore_incorrect_picture_mxf } } - BOOST_FOREACH (shared_ptr<CPL> i, cpls ()) { - i->resolve_refs (other_assets); + resolve_refs (other_assets); + + /* While we've got the ASSETMAP lets look and see if this DCP refers to things that are not in its ASSETMAP */ + if (notes) { + BOOST_FOREACH (shared_ptr<CPL> i, cpls()) { + BOOST_FOREACH (shared_ptr<const ReelMXF> j, i->reel_mxfs()) { + if (!j->asset_ref().resolved() && paths.find(j->asset_ref().id()) == paths.end()) { + notes->push_back (VerificationNote(VerificationNote::VERIFY_WARNING, VerificationNote::EXTERNAL_ASSET)); + } + } + } } } diff --git a/src/verify.cc b/src/verify.cc index 11eb75d2..0820c7b0 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -659,6 +659,8 @@ dcp::note_to_string (dcp::VerificationNote note) return String::compose("The instantaneous bit rate of the picture asset %1 is larger than the limit of 250Mbit/s in at least one place", note.file()->filename()); case dcp::VerificationNote::PICTURE_FRAME_NEARLY_TOO_LARGE: return String::compose("The instantaneous bit rate of the picture asset %1 is close to the limit of 250Mbit/s in at least one place", note.file()->filename()); + case dcp::VerificationNote::EXTERNAL_ASSET: + return "An asset that this DCP refers to is not included in the DCP. It may be a VF."; } return ""; diff --git a/src/verify.h b/src/verify.h index 405c6b09..87d52d44 100644 --- a/src/verify.h +++ b/src/verify.h @@ -87,6 +87,8 @@ public: PICTURE_FRAME_TOO_LARGE, /** The JPEG2000 data in at least one picture frame is larger than the equivalent of 230Mbit/s */ PICTURE_FRAME_NEARLY_TOO_LARGE, + /** An asset that the CPL requires is not in this DCP; the DCP may be a VF */ + EXTERNAL_ASSET, }; VerificationNote (Type type, Code code) diff --git a/test/verify_test.cc b/test/verify_test.cc index d744eff6..4d577a5a 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -735,3 +735,40 @@ BOOST_AUTO_TEST_CASE (verify_test21) BOOST_CHECK_EQUAL (notes.back().code(), dcp::VerificationNote::XML_VALIDATION_ERROR); } + +/* VF */ +BOOST_AUTO_TEST_CASE (verify_test22) +{ + boost::filesystem::path const ov_dir("build/test/verify_test22_ov"); + boost::filesystem::remove_all (ov_dir); + boost::filesystem::create_directories (ov_dir); + + shared_ptr<dcp::OpenJPEGImage> image = black_image (); + dcp::Data frame = dcp::compress_j2k (image, 100000000, 24, false, false); + BOOST_REQUIRE (frame.size() < 230000000 / (24 * 8)); + dcp_from_frame (frame, ov_dir); + + dcp::DCP ov (ov_dir); + ov.read (); + + boost::filesystem::path const vf_dir("build/test/verify_test22_vf"); + boost::filesystem::remove_all (vf_dir); + boost::filesystem::create_directories (vf_dir); + + shared_ptr<dcp::Reel> reel(new dcp::Reel()); + reel->add (ov.cpls().front()->reels().front()->main_picture()); + shared_ptr<dcp::CPL> cpl(new dcp::CPL("hello", dcp::FEATURE)); + cpl->add (reel); + dcp::DCP vf (vf_dir); + vf.add (cpl); + vf.write_xml (dcp::SMPTE); + + vector<boost::filesystem::path> dirs; + dirs.push_back (vf_dir); + list<dcp::VerificationNote> notes = dcp::verify (dirs, &stage, &progress, "xsd"); + dump_notes (notes); + BOOST_REQUIRE_EQUAL (notes.size(), 1); + BOOST_CHECK_EQUAL (notes.front().code(), dcp::VerificationNote::EXTERNAL_ASSET); +} + + |
