X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=4b79d67ed028e37d2c69888bb72d97c1475eec14;hb=280ca5218e193a3c54e5963dda1a80c6e78cc382;hp=6543db55161ca3b72ac22b9e6334b6476d242b3c;hpb=0f42e807a707249cd1a60fa6e476cb47a4147c5a;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 6543db551..4b79d67ed 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2016 Carl Hetherington + Copyright (C) 2012-2017 Carl Hetherington This file is part of DCP-o-matic. @@ -41,6 +41,7 @@ #include "wx/save_template_dialog.h" #include "wx/templates_dialog.h" #include "wx/nag_dialog.h" +#include "wx/export_dialog.h" #include "lib/film.h" #include "lib/config.h" #include "lib/util.h" @@ -63,6 +64,9 @@ #include "lib/dcpomatic_socket.h" #include "lib/hints.h" #include "lib/dcp_content.h" +#include "lib/ffmpeg_encoder.h" +#include "lib/transcode_job.h" +#include "lib/dkdm_wrapper.h" #include #include #include @@ -192,6 +196,7 @@ enum { ID_jobs_make_dcp_batch, ID_jobs_make_kdms, ID_jobs_make_self_dkdm, + ID_jobs_export, ID_jobs_send_dcp_to_tms, ID_jobs_show_dcp, ID_tools_video_waveform, @@ -269,6 +274,7 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_kdms, this), ID_jobs_make_kdms); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_dcp_batch, this), ID_jobs_make_dcp_batch); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_make_self_dkdm, this), ID_jobs_make_self_dkdm); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_export, this), ID_jobs_export); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_send_dcp_to_tms, this), ID_jobs_send_dcp_to_tms); Bind (wxEVT_MENU, boost::bind (&DOMFrame::jobs_show_dcp, this), ID_jobs_show_dcp); Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_video_waveform, this), ID_tools_video_waveform); @@ -661,7 +667,7 @@ private: _("You are making a DKDM which is encrypted by a private key held in" "\n\n%s\n\nIt is VITALLY IMPORTANT " "that you BACK UP THIS FILE since if it is lost " - "your DKDMs (and the DCPs they protect) will become useless."), std_to_wx(Config::config_path().string()).data() + "your DKDMs (and the DCPs they protect) will become useless."), std_to_wx(Config::config_file().string()).data() ) ); @@ -685,9 +691,9 @@ private: if (kdm) { if (d->internal ()) { - vector dkdms = Config::instance()->dkdms (); - dkdms.push_back (kdm.get()); - Config::instance()->set_dkdms (dkdms); + shared_ptr dkdms = Config::instance()->dkdms (); + dkdms->add (shared_ptr (new DKDM (kdm.get()))); + Config::instance()->changed (); } else { boost::filesystem::path path = d->directory() / (_film->dcp_name(false) + "_DKDM.xml"); kdm->as_xml (path); @@ -697,6 +703,17 @@ private: d->Destroy (); } + void jobs_export () + { + ExportDialog* d = new ExportDialog (this); + if (d->ShowModal() == wxID_OK) { + shared_ptr job (new TranscodeJob (_film)); + job->set_encoder (shared_ptr (new FFmpegEncoder (_film, job, d->path(), d->format(), d->mixdown_to_stereo()))); + JobManager::instance()->add (job); + } + d->Destroy (); + } + void content_scale_to_fit_width () { ContentList vc = _film_editor->content_panel()->selected_video (); @@ -730,14 +747,14 @@ private: #ifdef DCPOMATIC_LINUX int r = system ("which nautilus"); if (WEXITSTATUS (r) == 0) { - r = system (string ("nautilus " + _film->directory()->string()).c_str ()); + r = system (String::compose("nautilus \"%1\"", _film->directory()->string()).c_str()); if (WEXITSTATUS (r)) { error_dialog (this, _("Could not show DCP (could not run nautilus)")); } } else { int r = system ("which konqueror"); if (WEXITSTATUS (r) == 0) { - r = system (string ("konqueror " + _film->directory()->string()).c_str ()); + r = system (String::compose ("konqueror \"%1\"", _film->directory()->string()).c_str()); if (WEXITSTATUS (r)) { error_dialog (this, _("Could not show DCP (could not run konqueror)")); } @@ -746,7 +763,7 @@ private: #endif #ifdef DCPOMATIC_OSX - int r = system (string ("open -R " + _film->dir (_film->dcp_name (false)).string ()).c_str ()); + int r = system (String::compose ("open -R \"%1\"", _film->dir (_film->dcp_name(false)).string()).c_str()); if (WEXITSTATUS (r)) { error_dialog (this, _("Could not show DCP")); } @@ -981,8 +998,12 @@ private: wxMenu* jobs_menu = new wxMenu; add_item (jobs_menu, _("&Make DCP\tCtrl-M"), ID_jobs_make_dcp, NEEDS_FILM | NOT_DURING_DCP_CREATION); add_item (jobs_menu, _("Make DCP in &batch converter\tCtrl-B"), ID_jobs_make_dcp_batch, NEEDS_FILM | NOT_DURING_DCP_CREATION); + jobs_menu->AppendSeparator (); add_item (jobs_menu, _("Make &KDMs...\tCtrl-K"), ID_jobs_make_kdms, NEEDS_FILM); add_item (jobs_menu, _("Make DKDM for DCP-o-matic..."), ID_jobs_make_self_dkdm, NEEDS_FILM); + jobs_menu->AppendSeparator (); + add_item (jobs_menu, _("Export...\tCtrl-E"), ID_jobs_export, NEEDS_FILM); + jobs_menu->AppendSeparator (); add_item (jobs_menu, _("&Send DCP to TMS"), ID_jobs_send_dcp_to_tms, NEEDS_FILM | NOT_DURING_DCP_CREATION | NEEDS_CPL); add_item (jobs_menu, _("S&how DCP"), ID_jobs_show_dcp, NEEDS_FILM | NOT_DURING_DCP_CREATION | NEEDS_CPL);