From aa8b4d4348394ea01e97f4c83e55fdbca3aa6cdb Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 30 Aug 2019 22:28:06 +0100 Subject: Allow DCP reading to continue even with empty nodes in ASSETMAP. --- src/dcp.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/dcp.cc') diff --git a/src/dcp.cc b/src/dcp.cc index 5d908530..69875235 100644 --- a/src/dcp.cc +++ b/src/dcp.cc @@ -173,7 +173,12 @@ DCP::read (bool keep_going, ReadErrors* errors, bool ignore_incorrect_picture_mx _pkls.push_back (shared_ptr(new PKL(_directory / i))); } - /* Read all the assets from the asset map */ + /* Now we have: + paths - files in the DCP that are not PKLs. + _pkls - PKL objects for each PKL. + + Read all the assets from the asset map. + */ /* Make a list of non-CPL/PKL assets so that we can resolve the references from the CPLs. @@ -183,11 +188,20 @@ DCP::read (bool keep_going, ReadErrors* errors, bool ignore_incorrect_picture_mx for (map::const_iterator i = paths.begin(); i != paths.end(); ++i) { boost::filesystem::path path = _directory / i->second; - if (!boost::filesystem::exists (path)) { + if (i->second.empty()) { + /* I can't see how this is valid, but it's + been seen in the wild with a DCP that + claims to come from ClipsterDCI 5.10.0.5. + */ + survivable_error (keep_going, errors, EmptyAssetPathError(i->first)); + } + + if (i->second.empty() || !boost::filesystem::exists(path)) { survivable_error (keep_going, errors, MissingAssetError (path)); continue; } + /* Find the for this asset from the PKL that contains the asset */ optional pkl_type; BOOST_FOREACH (shared_ptr j, _pkls) { pkl_type = j->type(i->first); -- cgit v1.2.3