X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffilm.cc;h=a49e549a7b1837a3b3b1c0dadf895757297c2d5b;hb=0eee0c3adda726542a5f2b8fad68f54ebf701392;hp=75ec700e0092e5bb35487f43556e4c93b1600b4e;hpb=a183c1776cfd020a37d028ebb0f641352f49697b;p=dcpomatic.git diff --git a/src/lib/film.cc b/src/lib/film.cc index 75ec700e0..a49e549a7 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" @@ -73,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; @@ -94,14 +93,11 @@ 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) , _dirty (false) { @@ -129,7 +125,7 @@ Film::Film (string d) } set_directory (result.string ()); - _log.reset (new FileLog (file ("log"))); + _log.reset (new FileLog ("log")); } Film::Film (Film const & o) @@ -143,10 +139,7 @@ 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) , _colour_lut (o._colour_lut) , _j2k_bandwidth (o._j2k_bandwidth) , _dci_metadata (o._dci_metadata) @@ -158,24 +151,19 @@ Film::Film (Film const & o) } string -Film::video_state_identifier () const +Film::video_identifier () const { assert (container ()); LocaleGuard lg; stringstream s; s << container()->id() - << "_" << _playlist->video_digest() + << "_" << _playlist->video_identifier() << "_" << _dcp_video_frame_rate << "_" << scaler()->id() << "_" << j2k_bandwidth() << "_" << lexical_cast (colour_lut()); - 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 (); } @@ -185,21 +173,20 @@ Film::info_dir () const { boost::filesystem::path p; p /= "info"; - p /= video_state_identifier (); + p /= video_identifier (); return dir (p.string()); } string Film::internal_video_mxf_dir () const { - boost::filesystem::path p; return dir ("video"); } string Film::internal_video_mxf_filename () const { - return video_state_identifier() + ".mxf"; + return video_identifier() + ".mxf"; } string @@ -230,13 +217,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 */ @@ -277,6 +263,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")); @@ -294,38 +284,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 */ @@ -384,10 +343,7 @@ 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)); root->add_child("ColourLUT")->add_child_text (lexical_cast (_colour_lut)); root->add_child("J2KBandwidth")->add_child_text (lexical_cast (_j2k_bandwidth)); _dci_metadata.as_xml (root->add_child ("DCIMetadata")); @@ -432,10 +388,7 @@ 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"); _colour_lut = f.number_child ("ColourLUT"); _j2k_bandwidth = f.number_child ("J2KBandwidth"); _dci_metadata = DCIMetadata (f.node_child ("DCIMetadata")); @@ -622,16 +575,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) { @@ -642,26 +585,6 @@ Film::set_with_subtitles (bool w) signal_changed (WITH_SUBTITLES); } -void -Film::set_subtitle_offset (int o) -{ - { - boost::mutex::scoped_lock lm (_state_mutex); - _subtitle_offset = o; - } - signal_changed (SUBTITLE_OFFSET); -} - -void -Film::set_subtitle_scale (float s) -{ - { - boost::mutex::scoped_lock lm (_state_mutex); - _subtitle_scale = s; - } - signal_changed (SUBTITLE_SCALE); -} - void Film::set_colour_lut (int i) { @@ -692,7 +615,6 @@ Film::set_dci_metadata (DCIMetadata m) signal_changed (DCI_METADATA); } - void Film::set_dcp_video_frame_rate (int f) { @@ -703,6 +625,16 @@ Film::set_dcp_video_frame_rate (int f) signal_changed (DCP_VIDEO_FRAME_RATE); } +void +Film::set_dcp_audio_channels (int c) +{ + { + boost::mutex::scoped_lock lm (_state_mutex); + _dcp_audio_channels = c; + } + signal_changed (DCP_AUDIO_CHANNELS); +} + void Film::signal_changed (Property p) { @@ -753,7 +685,7 @@ Film::j2c_path (int f, bool t) const { boost::filesystem::path p; p /= "j2c"; - p /= video_state_identifier (); + p /= video_identifier (); stringstream s; s.width (8); @@ -808,9 +740,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) {