X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.cc;h=fa75ab1f1d444905dc61a0d864db5fe7a9a8cf6c;hb=89115db77729a2c99f1a09ff6a461720e16f889e;hp=57e3791a26a53c14584c7b0f7dd0faf86b09e70f;hpb=a0856e3fbef17f24073b01cb96be6bbcb229ecbc;p=dcpomatic.git diff --git a/src/lib/film.cc b/src/lib/film.cc index 57e3791a2..fa75ab1f1 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -36,7 +36,6 @@ #include "filter.h" #include "util.h" #include "job_manager.h" -#include "ab_transcode_job.h" #include "transcode_job.h" #include "scp_dcp_job.h" #include "log.h" @@ -46,7 +45,6 @@ #include "config.h" #include "version.h" #include "ui_signaller.h" -#include "analyse_audio_job.h" #include "playlist.h" #include "player.h" #include "ffmpeg_content.h" @@ -54,6 +52,7 @@ #include "sndfile_content.h" #include "dcp_content_type.h" #include "ratio.h" +#include "cross.h" #include "i18n.h" @@ -72,6 +71,7 @@ using std::endl; using std::cout; using std::list; using boost::shared_ptr; +using boost::weak_ptr; using boost::lexical_cast; using boost::dynamic_pointer_cast; using boost::to_upper_copy; @@ -93,15 +93,15 @@ Film::Film (string d) , _dcp_content_type (Config::instance()->default_dcp_content_type ()) , _container (Config::instance()->default_container ()) , _scaler (Scaler::from_id ("bicubic")) - , _ab (false) , _with_subtitles (false) , _subtitle_offset (0) , _subtitle_scale (1) , _colour_lut (0) , _j2k_bandwidth (200000000) , _dci_metadata (Config::instance()->default_dci_metadata ()) - , _dcp_video_frame_rate (0) + , _dcp_video_frame_rate (24) , _dcp_audio_channels (MAX_AUDIO_CHANNELS) + , _minimum_audio_channels (0) , _dirty (false) { set_dci_date_today (); @@ -128,7 +128,6 @@ Film::Film (string d) } set_directory (result.string ()); - _log.reset (new FileLog (file ("log"))); } Film::Film (Film const & o) @@ -142,7 +141,6 @@ Film::Film (Film const & o) , _dcp_content_type (o._dcp_content_type) , _container (o._container) , _scaler (o._scaler) - , _ab (o._ab) , _with_subtitles (o._with_subtitles) , _subtitle_offset (o._subtitle_offset) , _subtitle_scale (o._subtitle_scale) @@ -151,6 +149,7 @@ Film::Film (Film const & o) , _dci_metadata (o._dci_metadata) , _dcp_video_frame_rate (o._dcp_video_frame_rate) , _dci_date (o._dci_date) + , _minimum_audio_channels (o._minimum_audio_channels) , _dirty (o._dirty) { _playlist->ContentChanged.connect (bind (&Film::playlist_content_changed, this, _1, _2)); @@ -170,15 +169,6 @@ Film::video_state_identifier () const << "_" << j2k_bandwidth() << "_" << lexical_cast (colour_lut()); - if (trim_type() == ENCODE) { - s << "_" << trim_start() << "_" << trim_end(); - } - - if (ab()) { - pair fa = Filter::ffmpeg_strings (Config::instance()->reference_filters()); - s << "ab_" << Config::instance()->reference_scaler()->id() << "_" << fa.first << "_" << fa.second; - } - return s.str (); } @@ -195,7 +185,6 @@ Film::info_dir () const string Film::internal_video_mxf_dir () const { - boost::filesystem::path p; return dir ("video"); } @@ -233,13 +222,12 @@ Film::filename_safe_name () const return o; } -string -Film::audio_analysis_path () const +boost::filesystem::path +Film::audio_analysis_path (shared_ptr c) const { - boost::filesystem::path p; - p /= "analysis"; - p /= _playlist->audio_digest(); - return file (p.string ()); + boost::filesystem::path p = dir ("analysis"); + p /= c->digest(); + return p; } /** Add suitable Jobs to the JobManager to create a DCP for this Film */ @@ -280,6 +268,10 @@ Film::make_dcp () #endif pair const c = cpu_info (); log()->log (String::compose ("CPU: %1, %2 processors", c.first, c.second)); + list > const m = mount_info (); + for (list >::const_iterator i = m.begin(); i != m.end(); ++i) { + log()->log (String::compose ("Mount: %1 %2", i->first, i->second)); + } if (container() == 0) { throw MissingSettingError (_("container")); @@ -297,38 +289,7 @@ Film::make_dcp () throw MissingSettingError (_("name")); } - shared_ptr r; - - if (ab()) { - r = JobManager::instance()->add (shared_ptr (new ABTranscodeJob (shared_from_this()))); - } else { - r = JobManager::instance()->add (shared_ptr (new TranscodeJob (shared_from_this()))); - } -} - -/** Start a job to analyse the audio in our Playlist */ -void -Film::analyse_audio () -{ - if (_analyse_audio_job) { - return; - } - - _analyse_audio_job.reset (new AnalyseAudioJob (shared_from_this())); - _analyse_audio_job->Finished.connect (bind (&Film::analyse_audio_finished, this)); - JobManager::instance()->add (_analyse_audio_job); -} - -void -Film::analyse_audio_finished () -{ - ensure_ui_thread (); - - if (_analyse_audio_job->finished_ok ()) { - AudioAnalysisSucceeded (); - } - - _analyse_audio_job.reset (); + JobManager::instance()->add (shared_ptr (new TranscodeJob (shared_from_this()))); } /** Start a job to send our DCP to the configured TMS */ @@ -387,7 +348,6 @@ Film::write_metadata () const } root->add_child("Scaler")->add_child_text (_scaler->id ()); - root->add_child("AB")->add_child_text (_ab ? "1" : "0"); root->add_child("WithSubtitles")->add_child_text (_with_subtitles ? "1" : "0"); root->add_child("SubtitleOffset")->add_child_text (lexical_cast (_subtitle_offset)); root->add_child("SubtitleScale")->add_child_text (lexical_cast (_subtitle_scale)); @@ -397,6 +357,7 @@ Film::write_metadata () const root->add_child("DCPVideoFrameRate")->add_child_text (lexical_cast (_dcp_video_frame_rate)); root->add_child("DCIDate")->add_child_text (boost::gregorian::to_iso_string (_dci_date)); root->add_child("DCPAudioChannels")->add_child_text (lexical_cast (_dcp_audio_channels)); + root->add_child("MinimumAudioChannels")->add_child_text (lexical_cast (_minimum_audio_channels)); _playlist->as_xml (root->add_child ("Playlist")); doc.write_to_file_formatted (file ("metadata.xml")); @@ -435,7 +396,6 @@ Film::read_metadata () } _scaler = Scaler::from_id (f.string_child ("Scaler")); - _ab = f.bool_child ("AB"); _with_subtitles = f.bool_child ("WithSubtitles"); _subtitle_offset = f.number_child ("SubtitleOffset"); _subtitle_scale = f.number_child ("SubtitleScale"); @@ -445,6 +405,7 @@ Film::read_metadata () _dcp_video_frame_rate = f.number_child ("DCPVideoFrameRate"); _dci_date = boost::gregorian::from_undelimited_string (f.string_child ("DCIDate")); _dcp_audio_channels = f.number_child ("DCPAudioChannels"); + _minimum_audio_channels = f.number_child ("MinimumAudioChannels"); _playlist->set_from_xml (shared_from_this(), f.node_child ("Playlist")); @@ -625,16 +586,6 @@ Film::set_scaler (Scaler const * s) signal_changed (SCALER); } -void -Film::set_ab (bool a) -{ - { - boost::mutex::scoped_lock lm (_state_mutex); - _ab = a; - } - signal_changed (AB); -} - void Film::set_with_subtitles (bool w) { @@ -696,6 +647,16 @@ Film::set_dci_metadata (DCIMetadata m) } +void +Film::set_minimum_audio_channels (int c) +{ + { + boost::mutex::scoped_lock lm (_state_mutex); + _minimum_audio_channels = c; + } + signal_changed (MINIMUM_AUDIO_CHANNELS); +} + void Film::set_dcp_video_frame_rate (int f) { @@ -811,9 +772,19 @@ void Film::examine_and_add_content (shared_ptr c) { shared_ptr j (new ExamineContentJob (shared_from_this(), c)); + j->Finished.connect (bind (&Film::add_content_weak, this, boost::weak_ptr (c))); JobManager::instance()->add (j); } +void +Film::add_content_weak (weak_ptr c) +{ + shared_ptr content = c.lock (); + if (content) { + add_content (content); + } +} + void Film::add_content (shared_ptr c) {