summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-03-17 01:27:02 +0000
committerCarl Hetherington <cth@carlh.net>2019-04-08 00:22:39 +0100
commitf72286c907370e2741123b21acefb71a4f20e06e (patch)
tree94361062421311e53353b6680d631f2fc23765c4
parentd75f1675570dff034912934a9a446d6c45d02f80 (diff)
Basics of marker writing (part of #782).
-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
-rw-r--r--src/wx/markers_dialog.cc1
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 ()