X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=a8930f81fed9566f00f10b208ab4e16fb0c62ec2;hp=5b2e1870be1d09d706c706f0cd0b14b6a5f024de;hb=c222a2b4a0cadd0332ee6b30309fca79a773f381;hpb=4d11fe7cea71b0564df9a21a3cc706509d12b0d1 diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 5b2e1870b..a8930f81f 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -83,6 +83,7 @@ #include "lib/check_content_change_job.h" #include "lib/text_content.h" #include "lib/dcpomatic_log.h" +#include "lib/subtitle_encoder.h" #include #include #include @@ -509,7 +510,7 @@ private: } catch (boost::filesystem::filesystem_error& e) { #ifdef DCPOMATIC_WINDOWS string bad_chars = "<>:\"/|?*"; - string const filename = d->path().string(); + string const filename = d->path().filename().string(); string found_bad_chars; for (size_t i = 0; i < bad_chars.length(); ++i) { if (filename.find(bad_chars[i]) != string::npos && found_bad_chars.find(bad_chars[i]) == string::npos) { @@ -517,9 +518,11 @@ private: } } wxString message = _("Could not create folder to store film."); + message += " "; if (!found_bad_chars.empty()) { - message += " "; message += wxString::Format (_("Try removing the %s characters from your folder name."), std_to_wx(found_bad_chars).data()); + } else { + message += _("Please check that you do not have Windows controlled folder access enabled for DCP-o-matic."); } error_dialog (this, message, std_to_wx(e.what())); #else @@ -757,7 +760,7 @@ private: a long time, and crashes/power failures are moderately likely. */ _film->write_metadata (); - _film->make_dcp (); + _film->make_dcp (true); } catch (BadSettingError& e) { error_dialog (this, wxString::Format (_("Bad setting for %s."), std_to_wx(e.setting()).data()), std_to_wx(e.what())); } catch (std::exception& e) { @@ -810,7 +813,7 @@ private: start (wx_to_std (wxStandardPaths::Get().GetExecutablePath())); } - dcpomatic_sleep (1); + dcpomatic_sleep_seconds (1); } return true; @@ -872,14 +875,19 @@ private: ) ); + + dcp::LocalTime from (Config::instance()->decryption_chain()->leaf().not_before()); + from.add_months (1); + dcp::LocalTime to (Config::instance()->decryption_chain()->leaf().not_after()); + to.add_months (-1); + optional kdm; try { kdm = _film->make_kdm ( Config::instance()->decryption_chain()->leaf(), vector(), d->cpl (), - dcp::LocalTime ("2012-01-01T01:00:00+00:00"), - dcp::LocalTime ("2112-01-01T01:00:00+00:00"), + from, to, dcp::MODIFIED_TRANSITIONAL_1, true, 0 @@ -908,18 +916,36 @@ private: void jobs_export () { - ExportDialog* d = new ExportDialog (this); + ExportDialog* d = new ExportDialog (this, _film->isdcf_name(true)); if (d->ShowModal() == wxID_OK) { + if (boost::filesystem::exists(d->path())) { + bool ok = confirm_dialog( + this, + wxString::Format (_("File %s already exists. Do you want to overwrite it?"), std_to_wx(d->path().string()).data()) + ); + + if (!ok) { + d->Destroy (); + return; + } + } + shared_ptr job (new TranscodeJob (_film)); - job->set_encoder ( - shared_ptr ( - new FFmpegEncoder (_film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->x264_crf() + if (d->format() == EXPORT_FORMAT_SUBTITLES_DCP) { + job->set_encoder ( + shared_ptr(new SubtitleEncoder(_film, job, d->path(), d->split_reels())) + ); + } else { + job->set_encoder ( + shared_ptr ( + new FFmpegEncoder (_film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->x264_crf() #ifdef DCPOMATIC_VARIANT_SWAROOP - , optional(), optional() + , optional(), optional() #endif + ) ) - ) - ); + ); + } JobManager::instance()->add (job); } d->Destroy (); @@ -1552,6 +1578,9 @@ private: _frame->Show (); + signal_manager = new wxSignalManager (this); + Bind (wxEVT_IDLE, boost::bind (&App::idle, this, _1)); + if (!_film_to_load.empty() && boost::filesystem::is_directory (_film_to_load)) { try { _frame->load_film (_film_to_load); @@ -1572,9 +1601,6 @@ private: } } - signal_manager = new wxSignalManager (this); - Bind (wxEVT_IDLE, boost::bind (&App::idle, this, _1)); - Bind (wxEVT_TIMER, boost::bind (&App::check, this)); _timer.reset (new wxTimer (this)); _timer->Start (1000);