* how they should be presented in a DCP.
*/
+#include "atmos_content.h"
#include "film.h"
#include "job.h"
#include "util.h"
, _dcp_content_type (Config::instance()->default_dcp_content_type ())
, _container (Config::instance()->default_container ())
, _resolution (RESOLUTION_2K)
- , _signed (true)
, _encrypted (false)
, _context_id (dcp::make_uuid ())
, _j2k_bandwidth (Config::instance()->default_j2k_bandwidth ())
, _audio_processor (0)
, _reel_type (REELTYPE_SINGLE)
, _reel_length (2000000000)
- , _upload_after_make_dcp (Config::instance()->default_upload_after_make_dcp())
, _reencode_j2k (false)
, _user_explicit_video_frame_rate (false)
, _user_explicit_container (false)
root->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0");
root->add_child("Sequence")->add_child_text (_sequence ? "1" : "0");
root->add_child("Interop")->add_child_text (_interop ? "1" : "0");
- root->add_child("Signed")->add_child_text (_signed ? "1" : "0");
root->add_child("Encrypted")->add_child_text (_encrypted ? "1" : "0");
root->add_child("Key")->add_child_text (_key.hex ());
root->add_child("ContextID")->add_child_text (_context_id);
}
root->add_child("ReelType")->add_child_text (raw_convert<string> (static_cast<int> (_reel_type)));
root->add_child("ReelLength")->add_child_text (raw_convert<string> (_reel_length));
- 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) {
_resolution = string_to_resolution (f.string_child ("Resolution"));
_j2k_bandwidth = f.number_child<int> ("J2KBandwidth");
_video_frame_rate = f.number_child<int> ("VideoFrameRate");
- _signed = f.optional_bool_child("Signed").get_value_or (true);
_encrypted = f.bool_child ("Encrypted");
_audio_channels = f.number_child<int> ("AudioChannels");
/* We used to allow odd numbers (and zero) channels, but it's just not worth
_reel_type = static_cast<ReelType> (f.optional_number_child<int>("ReelType").get_value_or (static_cast<int>(REELTYPE_SINGLE)));
_reel_length = f.optional_number_child<int64_t>("ReelLength").get_value_or (2000000000);
- _upload_after_make_dcp = f.optional_bool_child("UploadAfterMakeDCP").get_value_or (false);
_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);
_reel_length = r;
}
-void
-Film::set_upload_after_make_dcp (bool u)
-{
- ChangeSignaller<Film> ch (this, UPLOAD_AFTER_MAKE_DCP);
- _upload_after_make_dcp = u;
-}
-
void
Film::set_reencode_j2k (bool r)
{
return out;
}
-void
-Film::set_signed (bool s)
-{
- ChangeSignaller<Film> ch (this, SIGNED);
- _signed = s;
-}
-
void
Film::set_encrypted (bool e)
{
_encrypted = e;
}
-void
-Film::set_key (dcp::Key key)
-{
- ChangeSignaller<Film> ch (this, KEY);
- _key = key;
-}
-
ContentList
Film::content () const
{
_playlist->add (shared_from_this(), c);
maybe_set_container_and_resolution ();
+ if (c->atmos) {
+ set_audio_channels (14);
+ set_interop (false);
+ }
}
} else {
ContentChange (type, c, p, frequent);
}
+
+ _dirty = true;
}
void
if (type == CHANGE_TYPE_DONE) {
check_settings_consistency ();
}
+
+ _dirty = true;
}
/** Check for (and if necessary fix) impossible settings combinations, like
void
Film::check_settings_consistency ()
{
+ optional<int> atmos_rate;
+ BOOST_FOREACH (shared_ptr<Content> i, content()) {
+
+ if (i->atmos) {
+ int rate = lrintf (i->atmos->edit_rate().as_float());
+ if (atmos_rate && *atmos_rate != rate) {
+ Message (_("You have more than one piece of Atmos content, and they do not have the same frame rate. You must remove some Atmos content."));
+ } else if (!atmos_rate && rate != video_frame_rate()) {
+ atmos_rate = rate;
+ set_video_frame_rate (rate, false);
+ Message (_("DCP-o-matic had to change your settings so that the film's frame rate is the same as that of your Atmos content."));
+ }
+ }
+ }
+
bool change_made = false;
BOOST_FOREACH (shared_ptr<Content> i, content()) {
shared_ptr<DCPContent> d = dynamic_pointer_cast<DCPContent>(i);
_resolution = _template_film->_resolution;
_j2k_bandwidth = _template_film->_j2k_bandwidth;
_video_frame_rate = _template_film->_video_frame_rate;
- _signed = _template_film->_signed;
_encrypted = _template_film->_encrypted;
_audio_channels = _template_film->_audio_channels;
_sequence = _template_film->_sequence;
_audio_processor = _template_film->_audio_processor;
_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;
}
return false;
}
+
+bool
+Film::contains_atmos_content () const
+{
+ BOOST_FOREACH (shared_ptr<Content> i, _playlist->content()) {
+ if (i->atmos) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
list<DCPTextTrack>
Film::closed_caption_tracks () const
{