diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-03-17 01:27:02 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-04-08 00:22:39 +0100 |
| commit | f72286c907370e2741123b21acefb71a4f20e06e (patch) | |
| tree | 94361062421311e53353b6680d631f2fc23765c4 | |
| parent | d75f1675570dff034912934a9a446d6c45d02f80 (diff) | |
Basics of marker writing (part of #782).
| -rw-r--r-- | src/lib/film.cc | 15 | ||||
| -rw-r--r-- | src/lib/film.h | 3 | ||||
| -rw-r--r-- | src/lib/reel_writer.cc | 20 | ||||
| -rw-r--r-- | src/lib/types.cc | 5 | ||||
| -rw-r--r-- | src/wx/markers_dialog.cc | 1 |
5 files changed, 33 insertions, 11 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index eb6872367..6d7f77746 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -1373,26 +1373,25 @@ Film::make_kdm ( map<shared_ptr<const dcp::ReelMXF>, dcp::Key> keys; - BOOST_FOREACH(shared_ptr<const dcp::ReelAsset> i, cpl->reel_assets ()) { - shared_ptr<const dcp::ReelMXF> mxf = boost::dynamic_pointer_cast<const dcp::ReelMXF> (i); - if (!mxf || !mxf->key_id()) { + BOOST_FOREACH(shared_ptr<const dcp::ReelMXF> i, cpl->reel_mxfs()) { + if (!i->key_id()) { continue; } /* Get any imported key for this ID */ bool done = false; BOOST_FOREACH (dcp::DecryptedKDMKey j, imported_keys) { - if (j.id() == mxf->key_id().get()) { - LOG_GENERAL ("Using imported key for %1", mxf->key_id().get()); - keys[mxf] = j.key(); + if (j.id() == i->key_id().get()) { + LOG_GENERAL ("Using imported key for %1", i->key_id().get()); + keys[i] = j.key(); done = true; } } if (!done) { /* No imported key; it must be an asset that we encrypted */ - LOG_GENERAL ("Using our own key for %1", mxf->key_id().get()); - keys[mxf] = key(); + LOG_GENERAL ("Using our own key for %1", i->key_id().get()); + keys[i] = key(); } } diff --git a/src/lib/film.h b/src/lib/film.h index dd69c9e68..d61612e47 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -298,6 +298,9 @@ public: } boost::optional<DCPTime> marker (dcp::Marker type) const; + std::map<dcp::Marker, DCPTime> markers () const { + return _markers; + } /* SET */ diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc index 3b9e413a2..9be4ce571 100644 --- a/src/lib/reel_writer.cc +++ b/src/lib/reel_writer.cc @@ -39,6 +39,7 @@ #include <dcp/reel_sound_asset.h> #include <dcp/reel_subtitle_asset.h> #include <dcp/reel_closed_caption_asset.h> +#include <dcp/reel_markers_asset.h> #include <dcp/dcp.h> #include <dcp/cpl.h> #include <dcp/certificate_chain.h> @@ -514,6 +515,25 @@ ReelWriter::create_reel (list<ReferencedReelAsset> const & refs, list<shared_ptr a->set_language (i->first.language); } + map<dcp::Marker, DCPTime> markers = _film->markers (); + map<dcp::Marker, DCPTime> reel_markers; + for (map<dcp::Marker, DCPTime>::const_iterator i = markers.begin(); i != markers.end(); ++i) { + if (_period.contains(i->second)) { + reel_markers[i->first] = i->second; + } + } + + if (!reel_markers.empty ()) { + shared_ptr<dcp::ReelMarkersAsset> ma (new dcp::ReelMarkersAsset(dcp::Fraction(_film->video_frame_rate(), 1), 0)); + for (map<dcp::Marker, DCPTime>::const_iterator i = reel_markers.begin(); i != reel_markers.end(); ++i) { + int h, m, s, f; + DCPTime relative = i->second - _period.from; + relative.split (_film->video_frame_rate(), h, m, s, f); + ma->set (i->first, dcp::Time(h, m, s, f, _film->video_frame_rate())); + } + reel->add (ma); + } + return reel; } diff --git a/src/lib/types.cc b/src/lib/types.cc index a0095cedf..19e5da6ec 100644 --- a/src/lib/types.cc +++ b/src/lib/types.cc @@ -201,9 +201,8 @@ CPLSummary::CPLSummary (boost::filesystem::path p) encrypted = false; BOOST_FOREACH (shared_ptr<dcp::CPL> j, dcp.cpls()) { - BOOST_FOREACH (shared_ptr<const dcp::ReelAsset> k, j->reel_assets()) { - shared_ptr<const dcp::ReelMXF> mxf = boost::dynamic_pointer_cast<const dcp::ReelMXF> (k); - if (mxf && mxf->key_id()) { + BOOST_FOREACH (shared_ptr<const dcp::ReelMXF> k, j->reel_mxfs()) { + if (k->key_id()) { encrypted = true; } } diff --git a/src/wx/markers_dialog.cc b/src/wx/markers_dialog.cc index 724cb7d9e..46e8e6d09 100644 --- a/src/wx/markers_dialog.cc +++ b/src/wx/markers_dialog.cc @@ -82,6 +82,7 @@ private: shared_ptr<FilmViewer> v = viewer.lock (); DCPOMATIC_ASSERT (v); timecode->set (v->position(), f->video_frame_rate()); + changed (); } void changed () |
