X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.cc;h=0be1ddd7b71a19161c44f6957f63c5a3aae23213;hb=d7ac100c0eb1b5efdcfbec59be870fd869252840;hp=386f456b51317e909f5fefabf300bf82d2a2b2fb;hpb=98664996b6a7ef62cbff49a174917a456f218e76;p=dcpomatic.git diff --git a/src/lib/film.cc b/src/lib/film.cc index 386f456b5..0be1ddd7b 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -46,7 +46,7 @@ #include "screen.h" #include "audio_content.h" #include "video_content.h" -#include "subtitle_content.h" +#include "text_content.h" #include "ffmpeg_content.h" #include "dcp_content.h" #include "screen_kdm.h" @@ -293,7 +293,7 @@ void Film::make_dcp () { if (dcp_name().find ("/") != string::npos) { - throw BadSettingError (_("name"), _("cannot contain slashes")); + throw BadSettingError (_("name"), _("Cannot contain slashes")); } if (container() == 0) { @@ -301,7 +301,7 @@ Film::make_dcp () } if (content().empty()) { - throw runtime_error (_("you must add some content to the DCP before creating it")); + throw runtime_error (_("You must add some content to the DCP before creating it")); } if (dcp_content_type() == 0) { @@ -318,10 +318,10 @@ Film::make_dcp () } shared_ptr dcp = dynamic_pointer_cast (i); if (dcp && dcp->needs_kdm()) { - throw runtime_error (_("some of your content needs a KDM")); + throw runtime_error (_("Some of your content needs a KDM")); } if (dcp && dcp->needs_assets()) { - throw runtime_error (_("some of your content needs an OV")); + throw runtime_error (_("Some of your content needs an OV")); } } @@ -730,7 +730,9 @@ Film::isdcf_name (bool if_created_now) const /* Count mapped audio channels */ pair ch = audio_channel_types (mapped_audio_channels(), audio_channels()); - if (ch.first) { + if (!ch.first && !ch.second) { + d += "_MOS"; + } else if (ch.first) { d += String::compose("_%1%2", ch.first, ch.second); } @@ -1067,7 +1069,7 @@ Film::maybe_add_content (weak_ptr j, weak_ptr c, bool disable_audi playlist->add (content); boost::signals2::connection c; JobManager::instance()->analyse_audio ( - shared_from_this (), playlist, c, bind (&Film::audio_analysis_finished, this) + shared_from_this(), playlist, false, c, bind (&Film::audio_analysis_finished, this) ); _audio_analysis_connections.push_back (c); } @@ -1086,9 +1088,7 @@ Film::add_content (shared_ptr c) if (_template_film) { /* Take settings from the first piece of content of c's type in _template */ BOOST_FOREACH (shared_ptr i, _template_film->content()) { - if (typeid(i.get()) == typeid(c.get())) { - c->take_settings_from (i); - } + c->take_settings_from (i); } } @@ -1174,6 +1174,10 @@ Film::audio_frame_rate () const void Film::set_sequence (bool s) { + if (s == _sequence) { + return; + } + _sequence = s; _playlist->set_sequence (s); signal_changed (SEQUENCE); @@ -1207,6 +1211,9 @@ Film::frame_size () const * @param from KDM from time expressed as a local time with an offset from UTC. * @param until KDM to time expressed as a local time with an offset from UTC. * @param formulation KDM formulation to use. + * @param disable_forensic_marking_picture true to disable forensic marking of picture. + * @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. */ dcp::EncryptedKDM Film::make_kdm ( @@ -1215,9 +1222,15 @@ Film::make_kdm ( boost::filesystem::path cpl_file, dcp::LocalTime from, dcp::LocalTime until, - dcp::Formulation formulation + dcp::Formulation formulation, + bool disable_forensic_marking_picture, + optional disable_forensic_marking_audio ) const { + if (!_encrypted) { + throw runtime_error (_("Cannot make a KDM as this project is not encrypted.")); + } + shared_ptr cpl (new dcp::CPL (cpl_file)); shared_ptr signer = Config::instance()->signer_chain (); if (!signer->valid ()) { @@ -1262,7 +1275,7 @@ Film::make_kdm ( return dcp::DecryptedKDM ( cpl->id(), keys, from, until, cpl->content_title_text(), cpl->content_title_text(), dcp::LocalTime().as_string() - ).encrypt (signer, recipient, trusted_devices, formulation); + ).encrypt (signer, recipient, trusted_devices, formulation, disable_forensic_marking_picture, disable_forensic_marking_audio); } /** @param screens Screens to make KDMs for. @@ -1270,6 +1283,9 @@ Film::make_kdm ( * @param from KDM from time expressed as a local time in the time zone of the Screen's Cinema. * @param until KDM to time expressed as a local time in the time zone of the Screen's Cinema. * @param formulation KDM formulation to use. + * @param disable_forensic_marking_picture true to disable forensic marking of picture. + * @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 Film::make_kdms ( @@ -1277,7 +1293,9 @@ Film::make_kdms ( boost::filesystem::path cpl_file, boost::posix_time::ptime from, boost::posix_time::ptime until, - dcp::Formulation formulation + dcp::Formulation formulation, + bool disable_forensic_marking_picture, + optional disable_forensic_marking_audio ) const { list kdms; @@ -1290,7 +1308,9 @@ Film::make_kdms ( cpl_file, dcp::LocalTime (from, i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute()), dcp::LocalTime (until, i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute()), - formulation + formulation, + disable_forensic_marking_picture, + disable_forensic_marking_audio ); kdms.push_back (ScreenKDM (i, kdm)); @@ -1541,6 +1561,7 @@ Film::use_template (string name) _reel_type = _template_film->_reel_type; _reel_length = _template_film->_reel_length; _upload_after_make_dcp = _template_film->_upload_after_make_dcp; + _isdcf_metadata = _template_film->_isdcf_metadata; } pair