2 #include "audioconfig.h"
3 #include "audiodevice.inc"
9 #include "filesystem.h"
11 #include "preferences.h"
13 #include "videoconfig.h"
14 #include "videodevice.inc"
17 //#define CLAMP(x, y, z) (x) = ((x) < (y) ? (y) : ((x) > (z) ? (z) : (x)))
30 Preferences::Preferences()
35 preferences_lock = new Mutex("Preferences::preferences_lock");
36 sprintf(index_directory, BCASTDIR);
37 if(strlen(index_directory))
38 fs.complete_path(index_directory);
39 cache_size = 0xa00000;
40 index_size = 0x300000;
45 force_uniprocessor = 0;
46 renderfarm_port = DEAMON_PORT;
49 renderfarm_mountpoint[0] = 0;
51 renderfarm_job_count = 20;
52 processors = calculate_processors();
54 // Default brender asset
55 brender_asset = new Asset;
56 brender_asset->audio_data = 0;
57 brender_asset->video_data = 1;
58 sprintf(brender_asset->path, "/tmp/brender");
59 brender_asset->format = FILE_JPEG_LIST;
60 brender_asset->jpeg_quality = 80;
69 Preferences::~Preferences()
72 delete preferences_lock;
75 void Preferences::copy_rates_from(Preferences *preferences)
77 preferences_lock->lock("Preferences::copy_rates_from");
78 // Need to match node titles in case the order changed and in case
79 // one of the nodes in the source is the master node.
80 local_rate = preferences->local_rate;
83 j < preferences->renderfarm_nodes.total;
86 double new_rate = preferences->renderfarm_rate.values[j];
87 // Put in the master node
88 if(preferences->renderfarm_nodes.values[j][0] == '/')
90 if(!EQUIV(new_rate, 0.0))
91 local_rate = new_rate;
94 // Search for local node and copy it to that node
95 if(!EQUIV(new_rate, 0.0))
97 for(int i = 0; i < renderfarm_nodes.total; i++)
99 if(!strcmp(preferences->renderfarm_nodes.values[j], renderfarm_nodes.values[i]) &&
100 preferences->renderfarm_ports.values[j] == renderfarm_ports.values[i])
102 renderfarm_rate.values[i] = new_rate;
109 //printf("Preferences::copy_rates_from 1 %f %f\n", local_rate, preferences->local_rate);
110 preferences_lock->unlock();
113 void Preferences::copy_from(Preferences *that)
115 // ================================= Performance ================================
116 strcpy(index_directory, that->index_directory);
117 index_size = that->index_size;
118 index_count = that->index_count;
119 use_thumbnails = that->use_thumbnails;
120 strcpy(global_plugin_dir, that->global_plugin_dir);
121 strcpy(theme, that->theme);
123 use_tipwindow = that->use_tipwindow;
125 cache_size = that->cache_size;
126 force_uniprocessor = that->force_uniprocessor;
127 processors = calculate_processors();
128 renderfarm_nodes.remove_all_objects();
129 renderfarm_ports.remove_all();
130 renderfarm_enabled.remove_all();
131 renderfarm_rate.remove_all();
132 local_rate = that->local_rate;
133 for(int i = 0; i < that->renderfarm_nodes.total; i++)
135 add_node(that->renderfarm_nodes.values[i],
136 that->renderfarm_ports.values[i],
137 that->renderfarm_enabled.values[i],
138 that->renderfarm_rate.values[i]);
140 use_renderfarm = that->use_renderfarm;
141 renderfarm_port = that->renderfarm_port;
142 render_preroll = that->render_preroll;
143 brender_preroll = that->brender_preroll;
144 renderfarm_job_count = that->renderfarm_job_count;
145 renderfarm_vfs = that->renderfarm_vfs;
146 strcpy(renderfarm_mountpoint, that->renderfarm_mountpoint);
147 renderfarm_consolidate = that->renderfarm_consolidate;
148 use_brender = that->use_brender;
149 brender_fragment = that->brender_fragment;
150 *brender_asset = *that->brender_asset;
155 if(strlen(index_directory))
157 fs.complete_path(index_directory);
158 fs.add_end_slash(index_directory);
161 if(strlen(global_plugin_dir))
163 fs.complete_path(global_plugin_dir);
164 fs.add_end_slash(global_plugin_dir);
170 void Preferences::boundaries()
172 renderfarm_job_count = MAX(renderfarm_job_count, 1);
173 CLAMP(cache_size, MIN_CACHE_SIZE, MAX_CACHE_SIZE);
176 Preferences& Preferences::operator=(Preferences &that)
178 printf("Preferences::operator=\n");
183 int Preferences::load_defaults(Defaults *defaults)
185 char string[BCTEXTLEN];
187 use_tipwindow = defaults->get("USE_TIPWINDOW", use_tipwindow);
188 defaults->get("INDEX_DIRECTORY", index_directory);
189 index_size = defaults->get("INDEX_SIZE", index_size);
190 index_count = defaults->get("INDEX_COUNT", index_count);
191 use_thumbnails = defaults->get("USE_THUMBNAILS", use_thumbnails);
193 sprintf(global_plugin_dir, PLUGIN_DIR);
194 // defaults->get("GLOBAL_PLUGIN_DIR", global_plugin_dir);
195 // if(getenv("GLOBAL_PLUGIN_DIR"))
197 // strcpy(global_plugin_dir, getenv("GLOBAL_PLUGIN_DIR"));
200 strcpy(theme, DEFAULT_THEME);
201 defaults->get("THEME", theme);
204 brender_asset->load_defaults(defaults,
214 force_uniprocessor = defaults->get("FORCE_UNIPROCESSOR", 0);
215 processors = calculate_processors();
216 use_brender = defaults->get("USE_BRENDER", use_brender);
217 brender_fragment = defaults->get("BRENDER_FRAGMENT", brender_fragment);
218 cache_size = defaults->get("CACHE_SIZE", cache_size);
219 local_rate = defaults->get("LOCAL_RATE", local_rate);
220 use_renderfarm = defaults->get("USE_RENDERFARM", use_renderfarm);
221 renderfarm_port = defaults->get("RENDERFARM_PORT", renderfarm_port);
222 render_preroll = defaults->get("RENDERFARM_PREROLL", render_preroll);
223 brender_preroll = defaults->get("BRENDER_PREROLL", brender_preroll);
224 renderfarm_job_count = defaults->get("RENDERFARM_JOBS_COUNT", renderfarm_job_count);
225 renderfarm_consolidate = defaults->get("RENDERFARM_CONSOLIDATE", renderfarm_consolidate);
226 // renderfarm_vfs = defaults->get("RENDERFARM_VFS", renderfarm_vfs);
227 defaults->get("RENDERFARM_MOUNTPOINT", renderfarm_mountpoint);
228 int renderfarm_total = defaults->get("RENDERFARM_TOTAL", 0);
230 for(int i = 0; i < renderfarm_total; i++)
232 sprintf(string, "RENDERFARM_NODE%d", i);
233 char result[BCTEXTLEN];
235 int result_enabled = 0;
236 float result_rate = 0.0;
239 defaults->get(string, result);
241 sprintf(string, "RENDERFARM_PORT%d", i);
242 result_port = defaults->get(string, renderfarm_port);
244 sprintf(string, "RENDERFARM_ENABLED%d", i);
245 result_enabled = defaults->get(string, result_enabled);
247 sprintf(string, "RENDERFARM_RATE%d", i);
248 result_rate = defaults->get(string, result_rate);
252 add_node(result, result_port, result_enabled, result_rate);
261 int Preferences::save_defaults(Defaults *defaults)
263 char string[BCTEXTLEN];
266 defaults->update("USE_TIPWINDOW", use_tipwindow);
268 defaults->update("CACHE_SIZE", cache_size);
269 defaults->update("INDEX_DIRECTORY", index_directory);
270 defaults->update("INDEX_SIZE", index_size);
271 defaults->update("INDEX_COUNT", index_count);
272 defaults->update("USE_THUMBNAILS", use_thumbnails);
273 // defaults->update("GLOBAL_PLUGIN_DIR", global_plugin_dir);
274 defaults->update("THEME", theme);
278 defaults->update("FORCE_UNIPROCESSOR", force_uniprocessor);
279 brender_asset->save_defaults(defaults,
286 defaults->update("USE_BRENDER", use_brender);
287 defaults->update("BRENDER_FRAGMENT", brender_fragment);
288 defaults->update("USE_RENDERFARM", use_renderfarm);
289 defaults->update("LOCAL_RATE", local_rate);
290 defaults->update("RENDERFARM_PORT", renderfarm_port);
291 defaults->update("RENDERFARM_PREROLL", render_preroll);
292 defaults->update("BRENDER_PREROLL", brender_preroll);
293 // defaults->update("RENDERFARM_VFS", renderfarm_vfs);
294 defaults->update("RENDERFARM_MOUNTPOINT", renderfarm_mountpoint);
295 defaults->update("RENDERFARM_JOBS_COUNT", renderfarm_job_count);
296 defaults->update("RENDERFARM_CONSOLIDATE", renderfarm_consolidate);
297 defaults->update("RENDERFARM_TOTAL", (int64_t)renderfarm_nodes.total);
298 for(int i = 0; i < renderfarm_nodes.total; i++)
300 sprintf(string, "RENDERFARM_NODE%d", i);
301 defaults->update(string, renderfarm_nodes.values[i]);
302 sprintf(string, "RENDERFARM_PORT%d", i);
303 defaults->update(string, renderfarm_ports.values[i]);
304 sprintf(string, "RENDERFARM_ENABLED%d", i);
305 defaults->update(string, renderfarm_enabled.values[i]);
306 sprintf(string, "RENDERFARM_RATE%d", i);
307 defaults->update(string, renderfarm_rate.values[i]);
313 void Preferences::add_node(char *text, int port, int enabled, float rate)
315 if(text[0] == 0) return;
317 preferences_lock->lock("Preferences::add_node");
318 char *new_item = new char[strlen(text) + 1];
319 strcpy(new_item, text);
320 renderfarm_nodes.append(new_item);
321 renderfarm_nodes.set_array_delete();
322 renderfarm_ports.append(port);
323 renderfarm_enabled.append(enabled);
324 renderfarm_rate.append(rate);
325 preferences_lock->unlock();
328 void Preferences::delete_node(int number)
330 preferences_lock->lock("Preferences::delete_node");
331 if(number < renderfarm_nodes.total)
333 delete [] renderfarm_nodes.values[number];
334 renderfarm_nodes.remove_number(number);
335 renderfarm_ports.remove_number(number);
336 renderfarm_enabled.remove_number(number);
337 renderfarm_rate.remove_number(number);
339 preferences_lock->unlock();
342 void Preferences::delete_nodes()
344 preferences_lock->lock("Preferences::delete_nodes");
345 for(int i = 0; i < renderfarm_nodes.total; i++)
346 delete [] renderfarm_nodes.values[i];
347 renderfarm_nodes.remove_all();
348 renderfarm_ports.remove_all();
349 renderfarm_enabled.remove_all();
350 renderfarm_rate.remove_all();
351 preferences_lock->unlock();
354 void Preferences::reset_rates()
356 for(int i = 0; i < renderfarm_nodes.total; i++)
358 renderfarm_rate.values[i] = 0.0;
363 void Preferences::set_rate(float rate, int node)
365 //printf("Preferences::set_rate %f %d\n", rate, node);
373 for(int i = 0; i < renderfarm_nodes.total; i++)
375 if(renderfarm_enabled.values[i]) total++;
376 if(total == node + 1)
378 renderfarm_rate.values[i] = rate;
385 float Preferences::get_avg_rate(int use_master_node)
387 preferences_lock->lock("Preferences::get_avg_rate");
389 if(renderfarm_rate.total)
394 if(EQUIV(local_rate, 0.0))
396 preferences_lock->unlock();
406 for(int i = 0; i < renderfarm_rate.total; i++)
408 if(renderfarm_enabled.values[i])
411 total += renderfarm_rate.values[i];
412 if(EQUIV(renderfarm_rate.values[i], 0.0))
414 preferences_lock->unlock();
425 preferences_lock->unlock();
430 void Preferences::sort_nodes()
437 for(int i = 0; i < renderfarm_nodes.total - 1; i++)
439 if(strcmp(renderfarm_nodes.values[i], renderfarm_nodes.values[i + 1]) > 0)
441 char *temp = renderfarm_nodes.values[i];
442 int temp_port = renderfarm_ports.values[i];
444 renderfarm_nodes.values[i] = renderfarm_nodes.values[i + 1];
445 renderfarm_nodes.values[i + 1] = temp;
447 renderfarm_ports.values[i] = renderfarm_ports.values[i + 1];
448 renderfarm_ports.values[i + 1] = temp_port;
450 renderfarm_enabled.values[i] = renderfarm_enabled.values[i + 1];
451 renderfarm_enabled.values[i + 1] = temp_port;
453 renderfarm_rate.values[i] = renderfarm_rate.values[i + 1];
454 renderfarm_rate.values[i + 1] = temp_port;
461 void Preferences::edit_node(int number,
466 char *new_item = new char[strlen(new_text) + 1];
467 strcpy(new_item, new_text);
469 delete [] renderfarm_nodes.values[number];
470 renderfarm_nodes.values[number] = new_item;
471 renderfarm_ports.values[number] = new_port;
472 renderfarm_enabled.values[number] = new_enabled;
475 int Preferences::get_enabled_nodes()
478 for(int i = 0; i < renderfarm_enabled.total; i++)
479 if(renderfarm_enabled.values[i]) result++;
483 char* Preferences::get_node_hostname(int number)
486 for(int i = 0; i < renderfarm_nodes.total; i++)
488 if(renderfarm_enabled.values[i])
491 return renderfarm_nodes.values[i];
499 int Preferences::get_node_port(int number)
502 for(int i = 0; i < renderfarm_ports.total; i++)
504 if(renderfarm_enabled.values[i])
507 return renderfarm_ports.values[i];
516 int Preferences::calculate_processors()
518 /* Get processor count */
522 if(force_uniprocessor) return 1;
524 if(proc = fopen("/proc/cpuinfo", "r"))
526 char string[BCTEXTLEN];
529 fgets(string, BCTEXTLEN, proc);
530 if(!strncasecmp(string, "processor", 9))
532 char *ptr = strchr(string, ':');
536 result = atol(ptr) + 1;
540 if(!strncasecmp(string, "cpus detected", 13))
542 char *ptr = strchr(string, ':');