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_ports.append(port);
322 renderfarm_enabled.append(enabled);
323 renderfarm_rate.append(rate);
324 preferences_lock->unlock();
327 void Preferences::delete_node(int number)
329 preferences_lock->lock("Preferences::delete_node");
330 if(number < renderfarm_nodes.total)
332 delete [] renderfarm_nodes.values[number];
333 renderfarm_nodes.remove_number(number);
334 renderfarm_ports.remove_number(number);
335 renderfarm_enabled.remove_number(number);
336 renderfarm_rate.remove_number(number);
338 preferences_lock->unlock();
341 void Preferences::delete_nodes()
343 preferences_lock->lock("Preferences::delete_nodes");
344 for(int i = 0; i < renderfarm_nodes.total; i++)
345 delete [] renderfarm_nodes.values[i];
346 renderfarm_nodes.remove_all();
347 renderfarm_ports.remove_all();
348 renderfarm_enabled.remove_all();
349 renderfarm_rate.remove_all();
350 preferences_lock->unlock();
353 void Preferences::reset_rates()
355 for(int i = 0; i < renderfarm_nodes.total; i++)
357 renderfarm_rate.values[i] = 0.0;
362 void Preferences::set_rate(float rate, int node)
364 //printf("Preferences::set_rate %f %d\n", rate, node);
372 for(int i = 0; i < renderfarm_nodes.total; i++)
374 if(renderfarm_enabled.values[i]) total++;
375 if(total == node + 1)
377 renderfarm_rate.values[i] = rate;
384 float Preferences::get_avg_rate(int use_master_node)
386 preferences_lock->lock("Preferences::get_avg_rate");
388 if(renderfarm_rate.total)
393 if(EQUIV(local_rate, 0.0))
395 preferences_lock->unlock();
405 for(int i = 0; i < renderfarm_rate.total; i++)
407 if(renderfarm_enabled.values[i])
410 total += renderfarm_rate.values[i];
411 if(EQUIV(renderfarm_rate.values[i], 0.0))
413 preferences_lock->unlock();
424 preferences_lock->unlock();
429 void Preferences::sort_nodes()
436 for(int i = 0; i < renderfarm_nodes.total - 1; i++)
438 if(strcmp(renderfarm_nodes.values[i], renderfarm_nodes.values[i + 1]) > 0)
440 char *temp = renderfarm_nodes.values[i];
441 int temp_port = renderfarm_ports.values[i];
443 renderfarm_nodes.values[i] = renderfarm_nodes.values[i + 1];
444 renderfarm_nodes.values[i + 1] = temp;
446 renderfarm_ports.values[i] = renderfarm_ports.values[i + 1];
447 renderfarm_ports.values[i + 1] = temp_port;
449 renderfarm_enabled.values[i] = renderfarm_enabled.values[i + 1];
450 renderfarm_enabled.values[i + 1] = temp_port;
452 renderfarm_rate.values[i] = renderfarm_rate.values[i + 1];
453 renderfarm_rate.values[i + 1] = temp_port;
460 void Preferences::edit_node(int number,
465 char *new_item = new char[strlen(new_text) + 1];
466 strcpy(new_item, new_text);
468 delete [] renderfarm_nodes.values[number];
469 renderfarm_nodes.values[number] = new_item;
470 renderfarm_ports.values[number] = new_port;
471 renderfarm_enabled.values[number] = new_enabled;
474 int Preferences::get_enabled_nodes()
477 for(int i = 0; i < renderfarm_enabled.total; i++)
478 if(renderfarm_enabled.values[i]) result++;
482 char* Preferences::get_node_hostname(int number)
485 for(int i = 0; i < renderfarm_nodes.total; i++)
487 if(renderfarm_enabled.values[i])
490 return renderfarm_nodes.values[i];
498 int Preferences::get_node_port(int number)
501 for(int i = 0; i < renderfarm_ports.total; i++)
503 if(renderfarm_enabled.values[i])
506 return renderfarm_ports.values[i];
515 int Preferences::calculate_processors()
517 /* Get processor count */
521 if(force_uniprocessor) return 1;
523 if(proc = fopen("/proc/cpuinfo", "r"))
525 char string[BCTEXTLEN];
528 fgets(string, BCTEXTLEN, proc);
529 if(!strncasecmp(string, "processor", 9))
531 char *ptr = strchr(string, ':');
535 result = atol(ptr) + 1;
539 if(!strncasecmp(string, "cpus detected", 13))
541 char *ptr = strchr(string, ':');