using boost::optional;
using boost::is_any_of;
using dcp::raw_convert;
+using namespace dcpomatic;
string const Film::metadata_file = "metadata.xml";
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()));
+ }
+ BOOST_FOREACH (dcp::Rating i, _ratings) {
+ i.as_xml (root->add_child("Rating"));
+ }
_playlist->as_xml (root->add_child ("Playlist"), with_content_paths);
return doc;
_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()));
+ }
+
+ BOOST_FOREACH (cxml::ConstNodePtr i, f.node_children("Rating")) {
+ _ratings.push_back (dcp::Rating(i));
+ }
+
list<string> notes;
_playlist->set_from_xml (shared_from_this(), f.node_child ("Playlist"), _state_version, notes);
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();
}
}
* @param disable_forensic_marking_audio if not set, don't disable forensic marking of audio. If set to 0,
* disable all forensic marking; if set above 0, disable forensic marking above that channel.
*/
-list<ScreenKDM>
+list<shared_ptr<ScreenKDM> >
Film::make_kdms (
list<shared_ptr<Screen> > screens,
boost::filesystem::path cpl_file,
optional<int> disable_forensic_marking_audio
) const
{
- list<ScreenKDM> kdms;
+ list<shared_ptr<ScreenKDM> > kdms;
BOOST_FOREACH (shared_ptr<Screen> i, screens) {
if (i->recipient) {
disable_forensic_marking_audio
);
- kdms.push_back (ScreenKDM (i, kdm));
+ kdms.push_back (shared_ptr<ScreenKDM>(new DCPScreenKDM(i, kdm)));
}
}
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);
+}
+
+void
+Film::set_ratings (vector<dcp::Rating> r)
+{
+ ChangeSignaller<Film> ch (this, RATINGS);
+ _ratings = r;
+}
+
+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;
+}