summaryrefslogtreecommitdiff
path: root/src/lib/config.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-10-05 01:34:07 +0100
committerCarl Hetherington <cth@carlh.net>2017-10-05 01:34:07 +0100
commit35c0a33f8da3b1f99ec32a8c42f578cbc063e7e4 (patch)
treebc1827210ad379143236bafd0875252959ef6b99 /src/lib/config.cc
parent46ffbecc24e997c91c152a6e7154747b2e76a904 (diff)
Add configuration option to set writer's maximum frames in memory.
Diffstat (limited to 'src/lib/config.cc')
-rw-r--r--src/lib/config.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 4f481ef30..8dabcb71d 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -129,6 +129,17 @@ Config::set_defaults ()
_sound = false;
_sound_output = optional<string> ();
+ /* 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
+ and the shortest time S we could encode L/S frames per thread whilst waiting
+ for the L frame to encode so we might have to store LT/S frames.
+
+ However we don't want to use too much memory, so keep it a bit lower than we'd
+ perhaps like. A J2K frame is typically about 1Mb so 3 here will mean we could
+ use about 240Mb with 72 encoding threads.
+ */
+ _frames_in_memory_multiplier = 3;
+
_allowed_dcp_frame_rates.clear ();
_allowed_dcp_frame_rates.push_back (24);
_allowed_dcp_frame_rates.push_back (25);
@@ -355,6 +366,7 @@ try
_cover_sheet = f.optional_string_child("CoverSheet").get();
}
_last_player_load_directory = f.optional_string_child("LastPlayerLoadDirectory");
+ _frames_in_memory_multiplier = f.optional_number_child<int>("FramesInMemoryMultiplier").get_value_or(3);
/* Replace any cinemas from config.xml with those from the configured file */
if (boost::filesystem::exists (_cinemas_file)) {
@@ -635,6 +647,10 @@ Config::write_config () const
if (_last_player_load_directory) {
root->add_child("LastPlayerLoadDirectory")->add_child_text(_last_player_load_directory->string());
}
+ /* [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));
try {
doc.write_to_file_formatted(config_file().string());