X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.cc;h=ff0569aa502e8e1152e74efdb838c9c170e223d4;hb=6dc129234d82aaf6a64597609f5a5325de39b2a5;hp=69d55c7c43853ad1d7371645b6213043eb929ec9;hpb=975909a62d4cb37c73492abfdd610fa7d1b06935;p=dcpomatic.git diff --git a/src/lib/film.cc b/src/lib/film.cc index 69d55c7c4..ff0569aa5 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -166,6 +166,7 @@ Film::Film (optional dir) , _three_d (false) , _sequence (true) , _interop (Config::instance()->default_interop ()) + , _limit_to_smpte_bv20(false) , _audio_processor (0) , _reel_type (ReelType::SINGLE) , _reel_length (2000000000) @@ -269,6 +270,11 @@ Film::video_identifier () const s += "_I"; } else { s += "_S"; + if (_limit_to_smpte_bv20) { + s += "_L20"; + } else { + s += "_L21"; + } } if (_three_d) { @@ -416,6 +422,7 @@ Film::metadata (bool with_content_paths) const root->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0"); root->add_child("Sequence")->add_child_text (_sequence ? "1" : "0"); root->add_child("Interop")->add_child_text (_interop ? "1" : "0"); + root->add_child("LimitToSMPTEBv20")->add_child_text(_limit_to_smpte_bv20 ? "1" : "0"); root->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0"); root->add_child("Key")->add_child_text (_key.hex ()); root->add_child("ContextID")->add_child_text (_context_id); @@ -488,7 +495,12 @@ Film::write_metadata () { DCPOMATIC_ASSERT (directory()); boost::filesystem::create_directories (directory().get()); - metadata()->write_to_file_formatted(file(metadata_file).string()); + auto const filename = file(metadata_file); + try { + metadata()->write_to_file_formatted(filename.string()); + } catch (xmlpp::exception& e) { + throw FileError(String::compose("Could not write metadata file (%1)", e.what()), filename); + } set_dirty (false); } @@ -586,6 +598,7 @@ Film::read_metadata (optional path) _three_d = f.bool_child ("ThreeD"); _interop = f.bool_child ("Interop"); + _limit_to_smpte_bv20 = f.optional_bool_child("LimitToSMPTEBv20").get_value_or(false); _key = dcp::Key (f.string_child ("Key")); _context_id = f.optional_string_child("ContextID").get_value_or (dcp::make_uuid ()); @@ -1004,7 +1017,7 @@ Film::isdcf_name (bool if_created_now) const } if (find_if(content_list.begin(), content_list.end(), [](shared_ptr c) { return static_cast(c->atmos); }) != content_list.end()) { - isdcf_name += "-ATMOS"; + isdcf_name += "-IAB"; } isdcf_name += "_" + resolution_to_string (_resolution); @@ -1179,6 +1192,15 @@ Film::set_interop (bool i) _interop = i; } + +void +Film::set_limit_to_smpte_bv20(bool limit) +{ + FilmChangeSignaller ch(this, Property::LIMIT_TO_SMPTE_BV20); + _limit_to_smpte_bv20 = limit; +} + + void Film::set_audio_processor (AudioProcessor const * processor) {