diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-03-17 01:27:02 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-05-10 23:43:42 +0100 |
| commit | 2596b1db2fff8a9cc56be97099442dc791692882 (patch) | |
| tree | 519faf7567e5d19276067ee244ad21ee24ac5c9e /src/lib | |
| parent | 8c365af343a15bee11af53fc6bc16487b83260d1 (diff) | |
Basics of marker writing (part of #782).
Diffstat (limited to 'src/lib')
| -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 |
4 files changed, 32 insertions, 11 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index b40b439f5..0b2b67801 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -1377,26 +1377,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; } } |
