X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcp_content.cc;h=f507784208444f4c152253aa1909769a708ad32e;hb=b33881c9ebe55084434bfea16ba050ad1ba6cb03;hp=66f5331b0decb567b86afb129fd36d485fb8e1bb;hpb=febe9c38dcc26859ff61a084fa4a6f98897018f1;p=dcpomatic.git diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 66f5331b0..f50778420 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -158,7 +158,9 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version) _ratings.push_back (dcp::Rating(i)); } - _content_version = node->optional_string_child("ContentVersion").get_value_or(""); + BOOST_FOREACH (cxml::ConstNodePtr i, node->node_children("ContentVersion")) { + _content_versions.push_back (i->content()); + } } void @@ -200,7 +202,6 @@ DCPContent::examine (shared_ptr film, shared_ptr job) bool const needed_assets = needs_assets (); bool const needed_kdm = needs_kdm (); string const old_name = name (); - int const old_texts = text.size (); ChangeSignaller cc_texts (this, DCPContentProperty::TEXTS); ChangeSignaller cc_assets (this, DCPContentProperty::NEEDS_ASSETS); @@ -240,20 +241,28 @@ DCPContent::examine (shared_ptr film, shared_ptr job) boost::mutex::scoped_lock lm (_mutex); atmos.reset (new AtmosContent(this)); } - atmos->set_length (examiner->atmos_length()); + /* Setting length will cause calculations to be made based on edit rate, so that must + * be set up first otherwise hard-to-spot exceptions will be thrown. + */ atmos->set_edit_rate (examiner->atmos_edit_rate()); + atmos->set_length (examiner->atmos_length()); + } + + list > new_text; + for (int i = 0; i < TEXT_COUNT; ++i) { + for (int j = 0; j < examiner->text_count(static_cast(i)); ++j) { + shared_ptr c(new TextContent(this, static_cast(i), static_cast(i))); + if (i == TEXT_CLOSED_CAPTION) { + c->set_dcp_track (examiner->dcp_text_track(j)); + } + new_text.push_back (c); + } } - int texts = 0; { boost::mutex::scoped_lock lm (_mutex); + text = new_text; _name = examiner->name (); - for (int i = 0; i < TEXT_COUNT; ++i) { - for (int j = 0; j < examiner->text_count(static_cast(i)); ++j) { - text.push_back (shared_ptr(new TextContent(this, static_cast(i), static_cast(i)))); - } - } - texts = text.size (); _encrypted = examiner->encrypted (); _needs_assets = examiner->needs_assets (); _kdm_valid = examiner->kdm_valid (); @@ -267,11 +276,7 @@ DCPContent::examine (shared_ptr film, shared_ptr job) _markers[i->first] = ContentTime(i->second.as_editable_units(DCPTime::HZ)); } _ratings = examiner->ratings (); - _content_version = examiner->content_version (); - } - - if (old_texts == texts) { - cc_texts.abort (); + _content_versions = examiner->content_versions (); } if (needed_assets == needs_assets()) { @@ -383,7 +388,9 @@ DCPContent::as_xml (xmlpp::Node* node, bool with_paths) const i.as_xml (rating); } - node->add_child("ContentVersion")->add_child_text (_content_version); + BOOST_FOREACH (string i, _content_versions) { + node->add_child("ContentVersion")->add_child_text(i); + } } DCPTime