X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.cc;h=932048d8b2997418bcb3b8902777c4631d8fdb60;hb=f0e95aa5b7ada81a1c40f06facab2e94e45ab26c;hp=b1b86898403fdbb62c39b6fe1bc9e42eed0bd9c7;hpb=4ec1def1154d3d6b305bf556bf227df7b4f74b16;p=dcpomatic.git diff --git a/src/lib/film.cc b/src/lib/film.cc index b1b868984..932048d8b 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -81,7 +81,7 @@ using boost::optional; using libdcp::Size; using libdcp::Signer; -int const Film::state_version = 4; +int const Film::state_version = 5; /** Construct a Film object in a given directory. * @@ -96,6 +96,7 @@ Film::Film (boost::filesystem::path dir) , _resolution (RESOLUTION_2K) , _scaler (Scaler::from_id ("bicubic")) , _with_subtitles (false) + , _signed (true) , _encrypted (false) , _j2k_bandwidth (Config::instance()->default_j2k_bandwidth ()) , _dci_metadata (Config::instance()->default_dci_metadata ()) @@ -351,6 +352,7 @@ Film::write_metadata () const root->add_child("ThreeD")->add_child_text (_three_d ? "1" : "0"); root->add_child("SequenceVideo")->add_child_text (_sequence_video ? "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 ()); _playlist->as_xml (root->add_child ("Playlist")); @@ -372,6 +374,8 @@ Film::read_metadata () cxml::Document f ("Metadata"); f.read_file (file ("metadata.xml")); + + int const version = f.number_child ("Version"); _name = f.string_child ("Name"); _use_dci_name = f.bool_child ("UseDCIName"); @@ -397,13 +401,14 @@ Film::read_metadata () _dci_metadata = DCIMetadata (f.node_child ("DCIMetadata")); _video_frame_rate = f.number_child ("VideoFrameRate"); _dci_date = boost::gregorian::from_undelimited_string (f.string_child ("DCIDate")); + _signed = f.optional_bool_child("Signed").get_value_or (true); _encrypted = f.bool_child ("Encrypted"); _audio_channels = f.number_child ("AudioChannels"); _sequence_video = f.bool_child ("SequenceVideo"); _three_d = f.bool_child ("ThreeD"); _interop = f.bool_child ("Interop"); _key = libdcp::Key (f.string_child ("Key")); - _playlist->set_from_xml (shared_from_this(), f.node_child ("Playlist")); + _playlist->set_from_xml (shared_from_this(), f.node_child ("Playlist"), version); _dirty = false; } @@ -760,6 +765,13 @@ Film::make_player () const return shared_ptr (new Player (shared_from_this (), _playlist)); } +void +Film::set_signed (bool s) +{ + _signed = s; + signal_changed (SIGNED); +} + void Film::set_encrypted (bool e) { @@ -830,7 +842,7 @@ Film::move_content_later (shared_ptr c) _playlist->move_later (c); } -Time +DCPTime Film::length () const { return _playlist->length (); @@ -842,16 +854,16 @@ Film::has_subtitles () const return _playlist->has_subtitles (); } -OutputVideoFrame +VideoFrame Film::best_video_frame_rate () const { return _playlist->best_dcp_frame_rate (); } -bool -Film::content_paths_valid () const +FrameRateChange +Film::active_frame_rate_change (DCPTime t) const { - return _playlist->content_paths_valid (); + return _playlist->active_frame_rate_change (t, video_frame_rate ()); } void @@ -872,31 +884,31 @@ Film::playlist_changed () signal_changed (CONTENT); } -OutputAudioFrame -Film::time_to_audio_frames (Time t) const +AudioFrame +Film::time_to_audio_frames (DCPTime t) const { return t * audio_frame_rate () / TIME_HZ; } -OutputVideoFrame -Film::time_to_video_frames (Time t) const +VideoFrame +Film::time_to_video_frames (DCPTime t) const { return t * video_frame_rate () / TIME_HZ; } -Time -Film::audio_frames_to_time (OutputAudioFrame f) const +DCPTime +Film::audio_frames_to_time (AudioFrame f) const { return f * TIME_HZ / audio_frame_rate (); } -Time -Film::video_frames_to_time (OutputVideoFrame f) const +DCPTime +Film::video_frames_to_time (VideoFrame f) const { return f * TIME_HZ / video_frame_rate (); } -OutputAudioFrame +AudioFrame Film::audio_frame_rate () const { /* XXX */