void
Config::set_defaults ()
{
- _num_local_encoding_threads = max (2U, boost::thread::hardware_concurrency ());
+ _master_encoding_threads = max (2U, boost::thread::hardware_concurrency ());
+ _server_encoding_threads = max (2U, boost::thread::hardware_concurrency ());
_server_port_base = 6192;
_use_any_servers = true;
_servers.clear ();
optional<int> version = f.optional_number_child<int> ("Version");
- _num_local_encoding_threads = f.number_child<int> ("NumLocalEncodingThreads");
+ if (f.optional_number_child<int>("NumLocalEncodingThreads")) {
+ _master_encoding_threads = _server_encoding_threads = f.optional_number_child<int>("NumLocalEncodingThreads").get();
+ } else {
+ _master_encoding_threads = f.number_child<int>("MasterEncodingThreads");
+ _server_encoding_threads = f.number_child<int>("ServerEncodingThreads");
+ }
+
_default_directory = f.optional_string_child ("DefaultDirectory");
if (_default_directory && _default_directory->empty ()) {
/* We used to store an empty value for this to mean "none set" */
xmlpp::Element* root = doc.create_root_node ("Config");
root->add_child("Version")->add_child_text ("2");
- root->add_child("NumLocalEncodingThreads")->add_child_text (raw_convert<string> (_num_local_encoding_threads));
+ root->add_child("MasterEncodingThreads")->add_child_text (raw_convert<string> (_master_encoding_threads));
+ root->add_child("ServerEncodingThreads")->add_child_text (raw_convert<string> (_server_encoding_threads));
if (_default_directory) {
root->add_child("DefaultDirectory")->add_child_text (_default_directory->string ());
}
class Config : public boost::noncopyable
{
public:
- /** @return number of threads to use for J2K encoding on the local machine */
- int num_local_encoding_threads () const {
- return _num_local_encoding_threads;
+ /** @return number of threads which a master DoM should use for J2K encoding on the local machine */
+ int master_encoding_threads () const {
+ return _master_encoding_threads;
+ }
+
+ /** @return number of threads which a server should use for J2K encoding on the local machine */
+ int server_encoding_threads () const {
+ return _server_encoding_threads;
}
boost::optional<boost::filesystem::path> default_directory () const {
return _preview_sound_output;
}
- /** @param n New number of local encoding threads */
- void set_num_local_encoding_threads (int n) {
- maybe_set (_num_local_encoding_threads, n);
+ void set_master_encoding_threads (int n) {
+ maybe_set (_master_encoding_threads, n);
+ }
+
+ void set_server_encoding_threads (int n) {
+ maybe_set (_server_encoding_threads, n);
}
void set_default_directory (boost::filesystem::path d) {
changed (prop);
}
- /** number of threads to use for J2K encoding on the local machine */
- int _num_local_encoding_threads;
+ /** number of threads which a master DoM should use for J2K encoding on the local machine */
+ int _master_encoding_threads;
+ /** number of threads which a server should use for J2K encoding on the local machine */
+ int _server_encoding_threads;
/** default directory to put new films in */
boost::optional<boost::filesystem::path> _default_directory;
/** base port number to use for J2K encoding servers;
#endif
if (!Config::instance()->only_servers_encode ()) {
- for (int i = 0; i < Config::instance()->num_local_encoding_threads (); ++i) {
+ for (int i = 0; i < Config::instance()->master_encoding_threads (); ++i) {
boost::thread* t = new boost::thread (boost::bind (&Encoder::encoder_thread, this, optional<EncodeServerDescription> ()));
_threads.push_back (t);
#ifdef BOOST_THREAD_PLATFORM_WIN32
if (Config::instance()->only_servers_encode ()) {
LOG_GENERAL_NC ("0 threads: ONLY SERVERS SET TO ENCODE");
} else {
- LOG_GENERAL ("%1 threads", Config::instance()->num_local_encoding_threads());
+ LOG_GENERAL ("%1 threads", Config::instance()->master_encoding_threads());
}
LOG_GENERAL ("J2K bandwidth %1", j2k_bandwidth());
shared_ptr<boost::asio::io_service::work> work (new boost::asio::io_service::work (service));
- int const threads = max (1, Config::instance()->num_local_encoding_threads ());
+ int const threads = max (1, Config::instance()->master_encoding_threads ());
for (int i = 0; i < threads; ++i) {
pool.create_thread (boost::bind (&boost::asio::io_service::run, &service));
}
if (threads) {
- Config::instance()->set_num_local_encoding_threads (threads.get ());
+ Config::instance()->set_master_encoding_threads (threads.get ());
}
shared_ptr<Film> film;
void main_thread ()
try {
- EncodeServer server (server_log, false, Config::instance()->num_local_encoding_threads());
+ EncodeServer server (server_log, false, Config::instance()->server_encoding_threads());
server.run ();
} catch (...) {
store_current ();
dcpomatic_setup_path_encoding ();
dcpomatic_setup ();
- int num_threads = Config::instance()->num_local_encoding_threads ();
+ int num_threads = Config::instance()->server_encoding_threads ();
bool verbose = false;
bool write_log = false;
restart->SetFont (font);
++r;
- add_label_to_sizer (table, _panel, _("Threads to use for encoding on this host"), true, wxGBPosition (r, 0));
- _num_local_encoding_threads = new wxSpinCtrl (_panel);
- table->Add (_num_local_encoding_threads, wxGBPosition (r, 1));
+ add_label_to_sizer (table, _panel, _("Number of threads DCP-o-matic should use"), true, wxGBPosition (r, 0));
+ _master_encoding_threads = new wxSpinCtrl (_panel);
+ table->Add (_master_encoding_threads, wxGBPosition (r, 1));
+ ++r;
+
+ add_label_to_sizer (table, _panel, _("Number of threads DCP-o-matic encode server should use"), true, wxGBPosition (r, 0));
+ _server_encoding_threads = new wxSpinCtrl (_panel);
+ table->Add (_server_encoding_threads, wxGBPosition (r, 1));
++r;
add_label_to_sizer (table, _panel, _("Cinema and screen database file"), true, wxGBPosition (r, 0));
_preview_sound->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::preview_sound_changed, this));
_preview_sound_output->Bind (wxEVT_CHOICE, boost::bind (&GeneralPage::preview_sound_output_changed, this));
- _num_local_encoding_threads->SetRange (1, 128);
- _num_local_encoding_threads->Bind (wxEVT_SPINCTRL, boost::bind (&GeneralPage::num_local_encoding_threads_changed, this));
+ _master_encoding_threads->SetRange (1, 128);
+ _master_encoding_threads->Bind (wxEVT_SPINCTRL, boost::bind (&GeneralPage::master_encoding_threads_changed, this));
+ _server_encoding_threads->SetRange (1, 128);
+ _server_encoding_threads->Bind (wxEVT_SPINCTRL, boost::bind (&GeneralPage::server_encoding_threads_changed, this));
#ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
_analyse_ebur128->Bind (wxEVT_CHECKBOX, boost::bind (&GeneralPage::analyse_ebur128_changed, this));
checked_set (_language, lang);
- checked_set (_num_local_encoding_threads, config->num_local_encoding_threads ());
+ checked_set (_master_encoding_threads, config->master_encoding_threads ());
+ checked_set (_server_encoding_threads, config->server_encoding_threads ());
#ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
checked_set (_analyse_ebur128, config->analyse_ebur128 ());
#endif
Config::instance()->set_check_for_test_updates (_check_for_test_updates->GetValue ());
}
- void num_local_encoding_threads_changed ()
+ void master_encoding_threads_changed ()
+ {
+ Config::instance()->set_master_encoding_threads (_master_encoding_threads->GetValue ());
+ }
+
+ void server_encoding_threads_changed ()
{
- Config::instance()->set_num_local_encoding_threads (_num_local_encoding_threads->GetValue ());
+ Config::instance()->set_server_encoding_threads (_server_encoding_threads->GetValue ());
}
void issuer_changed ()
wxCheckBox* _set_language;
wxChoice* _language;
- wxSpinCtrl* _num_local_encoding_threads;
+ wxSpinCtrl* _master_encoding_threads;
+ wxSpinCtrl* _server_encoding_threads;
FilePickerCtrl* _cinemas_file;
wxCheckBox* _preview_sound;
wxChoice* _preview_sound_output;
film->set_reel_type (REELTYPE_BY_VIDEO_CONTENT);
wait_for_jobs ();
- Config::instance()->set_num_local_encoding_threads (4);
+ Config::instance()->set_master_encoding_threads (4);
film->make_dcp ();
wait_for_jobs ();
- Config::instance()->set_num_local_encoding_threads (1);
+ Config::instance()->set_master_encoding_threads (1);
dcp::DCP dcp (film->dir (film->dcp_name ()));
dcp.read ();
{
dcpomatic_setup ();
- Config::instance()->set_num_local_encoding_threads (1);
+ Config::instance()->set_master_encoding_threads (1);
+ Config::instance()->set_server_encoding_threads (1);
Config::instance()->set_server_port_base (61921);
Config::instance()->set_default_isdcf_metadata (ISDCFMetadata ());
Config::instance()->set_default_container (Ratio::from_id ("185"));