diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-03-15 00:52:56 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-05-10 23:43:42 +0100 |
| commit | 8c365af343a15bee11af53fc6bc16487b83260d1 (patch) | |
| tree | 452bee816404f09a3bd0defa2e1a6564059240a2 /src/lib | |
| parent | a9ce4f64658979bc15c301b53c76846072fda0ef (diff) | |
Basics of setting and storing SMPTE CPL markers.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/film.cc | 34 | ||||
| -rw-r--r-- | src/lib/film.h | 8 |
2 files changed, 40 insertions, 2 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index aa16fdad8..b40b439f5 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -403,6 +403,11 @@ Film::metadata (bool with_content_paths) const root->add_child("UploadAfterMakeDCP")->add_child_text (_upload_after_make_dcp ? "1" : "0"); root->add_child("ReencodeJ2K")->add_child_text (_reencode_j2k ? "1" : "0"); root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0"); + for (map<dcp::Marker, DCPTime>::const_iterator i = _markers.begin(); i != _markers.end(); ++i) { + xmlpp::Element* m = root->add_child("Marker"); + m->set_attribute("Type", dcp::marker_to_string(i->first)); + m->add_child_text(raw_convert<string>(i->second.get())); + } _playlist->as_xml (root->add_child ("Playlist"), with_content_paths); return doc; @@ -531,7 +536,12 @@ Film::read_metadata (optional<boost::filesystem::path> path) _reencode_j2k = f.optional_bool_child("ReencodeJ2K").get_value_or(false); _user_explicit_video_frame_rate = f.optional_bool_child("UserExplicitVideoFrameRate").get_value_or(false); + BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("Marker")) { + _markers[dcp::marker_from_string(i->string_attribute("Type"))] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content())); + } + list<string> notes; + /* This method is the only one that can return notes (so far) */ _playlist->set_from_xml (shared_from_this(), f.node_child ("Playlist"), _state_version, notes); /* Write backtraces to this film's directory, until another film is loaded */ @@ -1685,3 +1695,27 @@ Film::closed_caption_tracks () const return tt; } + +void +Film::set_marker (dcp::Marker type, DCPTime time) +{ + ChangeSignaller<Film> ch (this, MARKERS); + _markers[type] = time; +} + +void +Film::unset_marker (dcp::Marker type) +{ + ChangeSignaller<Film> ch (this, MARKERS); + _markers.erase (type); +} + +optional<DCPTime> +Film::marker (dcp::Marker type) const +{ + map<dcp::Marker, DCPTime>::const_iterator i = _markers.find (type); + if (i == _markers.end()) { + return optional<DCPTime>(); + } + return i->second; +} diff --git a/src/lib/film.h b/src/lib/film.h index b77ce7a76..dd69c9e68 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -200,7 +200,8 @@ public: REEL_TYPE, REEL_LENGTH, UPLOAD_AFTER_MAKE_DCP, - REENCODE_J2K + REENCODE_J2K, + MARKERS }; @@ -296,6 +297,7 @@ public: return _reencode_j2k; } + boost::optional<DCPTime> marker (dcp::Marker type) const; /* SET */ @@ -327,6 +329,8 @@ public: void set_reel_length (int64_t); void set_upload_after_make_dcp (bool); void set_reencode_j2k (bool); + void set_marker (dcp::Marker type, DCPTime time); + void unset_marker (dcp::Marker type); /** Emitted when some property has of the Film is about to change or has changed */ mutable boost::signals2::signal<void (ChangeType, Property)> Change; @@ -406,6 +410,7 @@ private: bool _reencode_j2k; /** true if the user has ever explicitly set the video frame rate of this film */ bool _user_explicit_video_frame_rate; + std::map<dcp::Marker, DCPTime> _markers; int _state_version; @@ -414,7 +419,6 @@ private: /** film being used as a template, or 0 */ boost::shared_ptr<Film> _template_film; - boost::signals2::scoped_connection _playlist_change_connection; boost::signals2::scoped_connection _playlist_order_changed_connection; boost::signals2::scoped_connection _playlist_content_change_connection; |
