Distinguish master DoM encode threads count from the server count.
[dcpomatic.git] / src / lib / config.cc
index 4376ff0575c7e4faaa82284301343a34ab550f9a..9fdf572070b79eee467d7b0613f46b4e8fe224e6 100644 (file)
@@ -72,7 +72,8 @@ Config::Config ()
 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 ();
@@ -116,7 +117,8 @@ Config::set_defaults ()
        _dcp_metadata_filename_format = dcp::NameFormat ("%t");
        _dcp_asset_filename_format = dcp::NameFormat ("%t");
        _jump_to_selected = true;
-       _sound_output = optional<string> ();
+       _preview_sound = false;
+       _preview_sound_output = optional<string> ();
 
        _allowed_dcp_frame_rates.clear ();
        _allowed_dcp_frame_rates.push_back (24);
@@ -161,7 +163,13 @@ try
 
        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" */
@@ -309,11 +317,9 @@ try
        _kdm_filename_format = dcp::NameFormat (f.optional_string_child("KDMFilenameFormat").get_value_or ("KDM %f %c %s"));
        _dcp_metadata_filename_format = dcp::NameFormat (f.optional_string_child("DCPMetadataFilenameFormat").get_value_or ("%t"));
        _dcp_asset_filename_format = dcp::NameFormat (f.optional_string_child("DCPAssetFilenameFormat").get_value_or ("%t"));
-<<<<<<< 8de6a5d1d054bab25ab0d86bc48442d9d6adb849
        _jump_to_selected = f.optional_bool_child("JumpToSelected").get_value_or (true);
-=======
-       _sound_output = f.optional_string_child("SoundOutput");
->>>>>>> First bits of audio support.
+       _preview_sound = f.optional_bool_child("PreviewSound").get_value_or (false);
+       _preview_sound_output = f.optional_string_child("PreviewSoundOutput");
 
        /* Replace any cinemas from config.xml with those from the configured file */
        if (boost::filesystem::exists (_cinemas_file)) {
@@ -324,6 +330,13 @@ try
 }
 catch (...) {
        if (have_existing ("config.xml")) {
+
+               /* Make a copy of the configuration */
+               try {
+                       boost::filesystem::copy_file (path ("config.xml", false), path ("config.xml.backup", false));
+                       boost::filesystem::copy_file (path ("cinemas.xml", false), path ("cinemas.xml.backup", false));
+               } catch (...) {}
+
                /* We have a config file but it didn't load */
                FailedToLoad ();
        }
@@ -386,7 +399,8 @@ Config::write_config () const
        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 ());
        }
@@ -481,13 +495,11 @@ Config::write_config () const
        root->add_child("KDMContainerNameFormat")->add_child_text (_kdm_container_name_format.specification ());
        root->add_child("DCPMetadataFilenameFormat")->add_child_text (_dcp_metadata_filename_format.specification ());
        root->add_child("DCPAssetFilenameFormat")->add_child_text (_dcp_asset_filename_format.specification ());
-<<<<<<< 8de6a5d1d054bab25ab0d86bc48442d9d6adb849
        root->add_child("JumpToSelected")->add_child_text (_jump_to_selected ? "1" : "0");
-=======
-       if (_sound_output) {
-               root->add_child("SoundOutput")->add_child_text (_sound_output.get());
+       root->add_child("PreviewSound")->add_child_text (_preview_sound ? "1" : "0");
+       if (_preview_sound_output) {
+               root->add_child("PreviewSoundOutput")->add_child_text (_preview_sound_output.get());
        }
->>>>>>> First bits of audio support.
 
        try {
                doc.write_to_file_formatted (path("config.xml").string ());