Set up seek position correctly when a seek skips over a reel in
[dcpomatic.git] / src / lib / config.cc
index e5fd9d17ad105578791594989ab96b63dac41cea..503ca9c5f30f14e26ad209a62151b2ff81362202 100644 (file)
@@ -129,9 +129,10 @@ Config::set_defaults ()
        for (int i = 0; i < NAG_COUNT; ++i) {
                _nagged[i] = false;
        }
-       _sound = false;
+       _sound = true;
        _sound_output = optional<string> ();
        _last_kdm_write_type = KDM_WRITE_FLAT;
+       _last_dkdm_write_type = DKDM_WRITE_INTERNAL;
 
        /* I think the scaling factor here should be the ratio of the longest frame
           encode time to the shortest; if the thread count is T, longest time is L
@@ -143,6 +144,7 @@ Config::set_defaults ()
           use about 240Mb with 72 encoding threads.
        */
        _frames_in_memory_multiplier = 3;
+       _decode_reduction = optional<int>();
 
        _allowed_dcp_frame_rates.clear ();
        _allowed_dcp_frame_rates.push_back (24);
@@ -251,11 +253,7 @@ try
                _default_scale_to = Ratio::from_id (c.get ());
        }
 
-       c = f.optional_string_child ("DefaultDCPContentType");
-       if (c) {
-               _default_dcp_content_type = DCPContentType::from_isdcf_name (c.get ());
-       }
-
+       _default_dcp_content_type = DCPContentType::from_isdcf_name(f.optional_string_child("DefaultDCPContentType").get_value_or("FTR"));
        _default_dcp_audio_channels = f.optional_number_child<int>("DefaultDCPAudioChannels").get_value_or (6);
 
        if (f.optional_string_child ("DCPMetadataIssuer")) {
@@ -368,7 +366,7 @@ try
                }
        }
        /* The variable was renamed but not the XML tag */
-       _sound = f.optional_bool_child("PreviewSound").get_value_or (false);
+       _sound = f.optional_bool_child("PreviewSound").get_value_or (true);
        _sound_output = f.optional_string_child("PreviewSoundOutput");
        if (f.optional_string_child("CoverSheet")) {
                _cover_sheet = f.optional_string_child("CoverSheet").get();
@@ -383,7 +381,15 @@ try
                        _last_kdm_write_type = KDM_WRITE_ZIP;
                }
        }
+       if (f.optional_string_child("LastDKDMWriteType")) {
+               if (f.optional_string_child("LastDKDMWriteType").get() == "internal") {
+                       _last_dkdm_write_type = DKDM_WRITE_INTERNAL;
+               } else if (f.optional_string_child("LastDKDMWriteType").get() == "file") {
+                       _last_dkdm_write_type = DKDM_WRITE_FILE;
+               }
+       }
        _frames_in_memory_multiplier = f.optional_number_child<int>("FramesInMemoryMultiplier").get_value_or(3);
+       _decode_reduction = f.optional_number_child<int>("DecodeReduction");
 
        /* Replace any cinemas from config.xml with those from the configured file */
        if (boost::filesystem::exists (_cinemas_file)) {
@@ -691,11 +697,26 @@ Config::write_config () const
                        break;
                }
        }
+       if (_last_dkdm_write_type) {
+               switch (_last_dkdm_write_type.get()) {
+               case DKDM_WRITE_INTERNAL:
+                       root->add_child("LastDKDMWriteType")->add_child_text("internal");
+                       break;
+               case DKDM_WRITE_FILE:
+                       root->add_child("LastDKDMWriteType")->add_child_text("file");
+                       break;
+               }
+       }
        /* [XML] FramesInMemoryMultiplier value to multiply the encoding threads count by to get the maximum number of
           frames to be held in memory at once.
        */
        root->add_child("FramesInMemoryMultiplier")->add_child_text(raw_convert<string>(_frames_in_memory_multiplier));
 
+       /* [XML] DecodeReduction power of 2 to reduce DCP images by before decoding in the player */
+       if (_decode_reduction) {
+               root->add_child("DecodeReduction")->add_child_text(raw_convert<string>(_decode_reduction.get()));
+       }
+
        try {
                doc.write_to_file_formatted(config_file().string());
        } catch (xmlpp::exception& e) {