summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-03-17 01:27:02 +0000
committerCarl Hetherington <cth@carlh.net>2019-05-10 23:43:42 +0100
commit2596b1db2fff8a9cc56be97099442dc791692882 (patch)
tree519faf7567e5d19276067ee244ad21ee24ac5c9e /src/lib
parent8c365af343a15bee11af53fc6bc16487b83260d1 (diff)
Basics of marker writing (part of #782).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc15
-rw-r--r--src/lib/film.h3
-rw-r--r--src/lib/reel_writer.cc20
-rw-r--r--src/lib/types.cc5
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;
}
}