Take has_non_zero_entry_point() from examiner and store it.
authorCarl Hetherington <cth@carlh.net>
Wed, 6 Mar 2024 00:17:27 +0000 (01:17 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 11 Mar 2024 08:25:26 +0000 (09:25 +0100)
src/lib/dcp_content.cc
src/lib/dcp_content.h

index b1febc5d170be09682efbbf428ff07ab48f050d1..35ef15442ed24f9515360763fe62621eaa1ded87 100644 (file)
@@ -163,6 +163,13 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
        }
 
        _active_audio_channels = node->optional_number_child<int>("ActiveAudioChannels");
+
+       for (auto non_zero: node->node_children("HasNonZeroEntryPoint")) {
+               try {
+                       auto type = string_to_text_type(non_zero->string_attribute("type"));
+                       _has_non_zero_entry_point[type] = non_zero->content() == "1";
+               } catch (MetadataError&) {}
+       }
 }
 
 void
@@ -308,6 +315,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
                }
                _ratings = examiner->ratings ();
                _content_versions = examiner->content_versions ();
+               _has_non_zero_entry_point = examiner->has_non_zero_entry_point();
        }
 
        if (needed_assets == needs_assets()) {
@@ -427,6 +435,14 @@ DCPContent::as_xml (xmlpp::Node* node, bool with_paths) const
        if (_active_audio_channels) {
                node->add_child("ActiveAudioChannels")->add_child_text(raw_convert<string>(*_active_audio_channels));
        }
+
+       for (auto i = 0; i < static_cast<int>(TextType::COUNT); ++i) {
+               if (_has_non_zero_entry_point[i]) {
+                       auto has = node->add_child("HasNonZeroEntryPoint");
+                       has->add_child_text("1");
+                       has->set_attribute("type", text_type_to_string(static_cast<TextType>(i)));
+               }
+       }
 }
 
 DCPTime
index d06d4652375cc7a2f38ad7ddd096c16f63b281df..eac0810bb747d56347bac418796a4c221ce2ae4e 100644 (file)
@@ -224,6 +224,7 @@ private:
        std::map<dcp::Marker, dcpomatic::ContentTime> _markers;
        std::vector<dcp::Rating> _ratings;
        std::vector<std::string> _content_versions;
+       EnumIndexedVector<bool, TextType> _has_non_zero_entry_point;
 
        boost::optional<int> _active_audio_channels;
 };