#include "filesystem.h"
#include "guicast.h"
#include "indexfile.h"
+#include "maxchannels.h"
#include "mutex.h"
#include "preferences.h"
#include "probeprefs.h"
#include "videoconfig.h"
#include "videodevice.inc"
+#include <ctype.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
-//#define CLAMP(x, y, z) (x) = ((x) < (y) ? (y) : ((x) > (z) ? (z) : (x)))
-
Preferences::Preferences()
{
// Set defaults
FileSystem fs;
-
preferences_lock = new Mutex("Preferences::preferences_lock");
-
// initial plugin path from build -DPLUGIN_DIR="..."
sprintf(plugin_dir, "%s/", File::get_plugin_path());
sprintf(index_directory, "%s/", File::get_config_path());
- if(strlen(index_directory))
+ if( strlen(index_directory) )
fs.complete_path(index_directory);
cache_size = 0x10000000;
index_size = 0x400000;
index_count = 500;
use_thumbnails = 1;
keyframe_reticle = HAIRLINE_DRAGGING;
+ perpetual_session = 0;
+ strcpy(lv2_path, DEFAULT_LV2_PATH);
+ autostart_lv2ui = 0;
trap_sigsegv = 1;
trap_sigintr = 1;
theme[0] = 0;
renderfarm_mountpoint[0] = 0;
renderfarm_vfs = 0;
renderfarm_job_count = 20;
+ renderfarm_watchdog_timeout = 60;
project_smp = processors = calculate_processors(0);
real_processors = calculate_processors(1);
ffmpeg_marker_indexes = 1;
forward_render_displacement = 0;
dvd_yuv420p_interlace = 0;
highlight_inverse = 0xffffff;
- yuv_color_space = 0; // bt601
- yuv_color_range = 0; // jpeg
+ yuv_color_space = BC_COLORS_BT601;
+ yuv_color_range = BC_COLORS_JPEG;
// Default brender asset
brender_asset = new Asset;
android_port = 23432;
strcpy(android_pin, "cinelerra");
- for(int i = 0; i < MAXCHANNELS; i++)
- {
- for(int j = 0; j < i + 1; j++)
- {
- int position = 180 - (360 * j / (i + 1));
- while(position < 0) position += 360;
- channel_positions[i * MAXCHANNELS + j] = position;
- }
+ memset(channel_positions, 0, sizeof(channel_positions));
+ int channels = 0;
+ while( channels < MAXCHANNELS ) {
+ int *positions = channel_positions[channels++];
+ for( int i=0; i<channels; ++i )
+ positions[i] = default_audio_channel_position(i, channels);
}
}
// one of the nodes in the source is the master node.
local_rate = preferences->local_rate;
- for(int j = 0;
- j < preferences->renderfarm_nodes.total;
- j++)
- {
+ for( int j=0; j<preferences->renderfarm_nodes.total; ++j ) {
double new_rate = preferences->renderfarm_rate.values[j];
// Put in the master node
- if(preferences->renderfarm_nodes.values[j][0] == '/')
- {
- if(!EQUIV(new_rate, 0.0))
+ if( preferences->renderfarm_nodes.values[j][0] == '/' ) {
+ if( !EQUIV(new_rate, 0.0) )
local_rate = new_rate;
}
else
// Search for local node and copy it to that node
- if(!EQUIV(new_rate, 0.0))
- {
- for(int i = 0; i < renderfarm_nodes.total; i++)
- {
- if(!strcmp(preferences->renderfarm_nodes.values[j], renderfarm_nodes.values[i]) &&
- preferences->renderfarm_ports.values[j] == renderfarm_ports.values[i])
- {
+ if( !EQUIV(new_rate, 0.0) ) {
+ for( int i=0; i<renderfarm_nodes.total; ++i ) {
+ if( !strcmp(preferences->renderfarm_nodes.values[j], renderfarm_nodes.values[i]) &&
+ preferences->renderfarm_ports.values[j] == renderfarm_ports.values[i] ) {
renderfarm_rate.values[i] = new_rate;
break;
}
index_count = that->index_count;
use_thumbnails = that->use_thumbnails;
keyframe_reticle = that->keyframe_reticle;
+ perpetual_session = that->perpetual_session;
strcpy(theme, that->theme);
strcpy(plugin_icons, that->plugin_icons);
strcpy(snapshot_path, that->snapshot_path);
cache_size = that->cache_size;
project_smp = that->project_smp;
force_uniprocessor = that->force_uniprocessor;
+ strcpy(lv2_path, that->lv2_path);
+ autostart_lv2ui = that->autostart_lv2ui;
trap_sigsegv = that->trap_sigsegv;
trap_sigintr = that->trap_sigintr;
processors = that->processors;
renderfarm_enabled.remove_all();
renderfarm_rate.remove_all();
local_rate = that->local_rate;
- for(int i = 0; i < that->renderfarm_nodes.size(); i++)
- {
+ for( int i=0; i<that->renderfarm_nodes.size(); ++i ) {
add_node(that->renderfarm_nodes.get(i),
that->renderfarm_ports.get(i),
that->renderfarm_enabled.get(i),
render_preroll = that->render_preroll;
brender_preroll = that->brender_preroll;
renderfarm_job_count = that->renderfarm_job_count;
+ renderfarm_watchdog_timeout = that->renderfarm_watchdog_timeout;
renderfarm_vfs = that->renderfarm_vfs;
strcpy(renderfarm_mountpoint, that->renderfarm_mountpoint);
renderfarm_consolidate = that->renderfarm_consolidate;
// Check boundaries
FileSystem fs;
- if(strlen(index_directory))
- {
+ if( strlen(index_directory) ) {
fs.complete_path(index_directory);
fs.add_end_slash(index_directory);
}
-// if(strlen(global_plugin_dir))
+// if( strlen(global_plugin_dir) )
// {
// fs.complete_path(global_plugin_dir);
// fs.add_end_slash(global_plugin_dir);
return *this;
}
-void Preferences::print_channels(char *string,
- int *channel_positions,
- int channels)
+void Preferences::print_channels(char *string, int *channel_positions, int channels)
{
- char string3[BCTEXTLEN];
- string[0] = 0;
- for(int j = 0; j < channels; j++)
- {
- sprintf(string3, "%d", channel_positions[j]);
- strcat(string, string3);
- if(j < channels - 1)
- strcat(string, ",");
+ char *cp = string, *ep = cp+BCTEXTLEN-1;
+ for( int i=0; i<channels; ++i ) {
+ if( i ) cp += snprintf(cp, ep-cp, ", ");
+ cp += snprintf(cp, ep-cp, "%d", channel_positions[i]);
}
+ *cp = 0;
}
-void Preferences::scan_channels(char *string,
- int *channel_positions,
- int channels)
+void Preferences::scan_channels(char *string, int *channel_positions, int channels)
{
- char string2[BCTEXTLEN];
- int len = strlen(string);
+ char *cp = string;
int current_channel = 0;
- for(int i = 0; i < len; i++)
- {
- strcpy(string2, &string[i]);
- for(int j = 0; j < BCTEXTLEN; j++)
- {
- if(string2[j] == ',' || string2[j] == 0)
- {
- i += j;
- string2[j] = 0;
- break;
- }
- }
- channel_positions[current_channel++] = atoi(string2);
- if(current_channel >= channels) break;
+ for(;;) {
+ while( isspace(*cp) ) ++cp;
+ if( !cp ) break;
+ channel_positions[current_channel++] = strtol(cp, &cp, 0);
+ if( current_channel >= channels ) break;
+ while( isspace(*cp) ) ++cp;
+ if( *cp == ',' ) ++cp;
+ }
+ while( current_channel < channels ) {
+ int pos = default_audio_channel_position(current_channel, channels);
+ channel_positions[current_channel++] = pos;
}
}
defaults->get("INDEX_DIRECTORY", index_directory);
index_size = defaults->get("INDEX_SIZE", index_size);
index_count = defaults->get("INDEX_COUNT", index_count);
- use_thumbnails = defaults->get("USE_THUMBNAILS", use_thumbnails);
keyframe_reticle = defaults->get("KEYFRAME_RETICLE", keyframe_reticle);
+ perpetual_session = defaults->get("PERPETUAL_SESSION", perpetual_session);
+ strcpy(lv2_path, DEFAULT_LV2_PATH);
+ defaults->get("LV2_PATH", lv2_path);
+ autostart_lv2ui = defaults->get("AUTOSTART_LV2UI", autostart_lv2ui);
trap_sigsegv = defaults->get("TRAP_SIGSEGV", trap_sigsegv);
trap_sigintr = defaults->get("TRAP_SIGINTR", trap_sigintr);
strcpy(snapshot_path, "/tmp");
defaults->get("SNAPSHOT_PATH", snapshot_path);
- for(int i = 0; i < MAXCHANNELS; i++)
- {
+ for( int i=0; i<MAXCHANNELS; ++i ) {
char string2[BCTEXTLEN];
sprintf(string, "CHANNEL_POSITIONS%d", i);
- print_channels(string2,
- &channel_positions[i * MAXCHANNELS],
- i + 1);
-
+ print_channels(string2, &channel_positions[i][0], i+1);
defaults->get(string, string2);
-
- scan_channels(string2,
- &channel_positions[i * MAXCHANNELS],
- i + 1);
+ scan_channels(string2, &channel_positions[i][0], i+1);
}
-
- brender_asset->load_defaults(defaults,
- "BRENDER_",
- 1,
- 1,
- 1,
- 0,
- 0);
-
-
+ brender_asset->load_defaults(defaults, "BRENDER_", 1, 1, 1, 0, 0);
project_smp = defaults->get("PROJECT_SMP", project_smp);
force_uniprocessor = defaults->get("FORCE_UNIPROCESSOR", force_uniprocessor);
render_preroll = defaults->get("RENDERFARM_PREROLL", render_preroll);
brender_preroll = defaults->get("BRENDER_PREROLL", brender_preroll);
renderfarm_job_count = defaults->get("RENDERFARM_JOBS_COUNT", renderfarm_job_count);
+ renderfarm_watchdog_timeout = defaults->get("RENDERFARM_WATCHDOG_TIMEOUT", renderfarm_watchdog_timeout);
renderfarm_consolidate = defaults->get("RENDERFARM_CONSOLIDATE", renderfarm_consolidate);
// renderfarm_vfs = defaults->get("RENDERFARM_VFS", renderfarm_vfs);
defaults->get("RENDERFARM_MOUNTPOINT", renderfarm_mountpoint);
int renderfarm_total = defaults->get("RENDERFARM_TOTAL", 0);
- for(int i = 0; i < renderfarm_total; i++)
- {
+ for( int i = 0; i < renderfarm_total; i++ ) {
sprintf(string, "RENDERFARM_NODE%d", i);
char result[BCTEXTLEN];
int result_port = 0;
sprintf(string, "RENDERFARM_RATE%d", i);
result_rate = defaults->get(string, result_rate);
- if(result[0] != 0)
- {
+ if( result[0] != 0 ) {
add_node(result, result_port, result_enabled, result_rate);
}
}
defaults->update("INDEX_COUNT", index_count);
defaults->update("USE_THUMBNAILS", use_thumbnails);
defaults->update("KEYFRAME_RETICLE", keyframe_reticle);
+ defaults->update("PERPETUAL_SESSION", perpetual_session);
+ defaults->update("LV2_PATH", lv2_path);
+ defaults->update("AUTOSTART_LV2UI", autostart_lv2ui);
defaults->update("TRAP_SIGSEGV", trap_sigsegv);
defaults->update("TRAP_SIGINTR", trap_sigintr);
defaults->update("THEME", theme);
defaults->update("PLUGIN_ICONS", plugin_icons);
defaults->update("SNAPSHOT_PATH", snapshot_path);
- for(int i = 0; i < MAXCHANNELS; i++)
- {
+ for( int i = 0; i < MAXCHANNELS; i++ ) {
char string2[BCTEXTLEN];
sprintf(string, "CHANNEL_POSITIONS%d", i);
- print_channels(string2, &channel_positions[i * MAXCHANNELS], i + 1);
+ print_channels(string2, &channel_positions[i][0], i + 1);
defaults->update(string, string2);
}
// defaults->update("RENDERFARM_VFS", renderfarm_vfs);
defaults->update("RENDERFARM_MOUNTPOINT", renderfarm_mountpoint);
defaults->update("RENDERFARM_JOBS_COUNT", renderfarm_job_count);
+ defaults->update("RENDERFARM_WATCHDOG_TIMEOUT", renderfarm_watchdog_timeout);
defaults->update("RENDERFARM_CONSOLIDATE", renderfarm_consolidate);
defaults->update("RENDERFARM_TOTAL", (int64_t)renderfarm_nodes.total);
- for(int i = 0; i < renderfarm_nodes.total; i++)
- {
+ for( int i = 0; i < renderfarm_nodes.total; i++ ) {
sprintf(string, "RENDERFARM_NODE%d", i);
defaults->update(string, renderfarm_nodes.values[i]);
sprintf(string, "RENDERFARM_PORT%d", i);
void Preferences::add_node(const char *text, int port, int enabled, float rate)
{
- if(text[0] == 0) return;
+ if( text[0] == 0 ) return;
preferences_lock->lock("Preferences::add_node");
char *new_item = new char[strlen(text) + 1];
void Preferences::delete_node(int number)
{
preferences_lock->lock("Preferences::delete_node");
- if(number < renderfarm_nodes.total && number >= 0)
- {
+ if( number < renderfarm_nodes.total && number >= 0 ) {
delete [] renderfarm_nodes.values[number];
renderfarm_nodes.remove_number(number);
renderfarm_ports.remove_number(number);
void Preferences::delete_nodes()
{
preferences_lock->lock("Preferences::delete_nodes");
- for(int i = 0; i < renderfarm_nodes.total; i++)
+ for( int i = 0; i < renderfarm_nodes.total; i++ )
delete [] renderfarm_nodes.values[i];
renderfarm_nodes.remove_all();
renderfarm_ports.remove_all();
void Preferences::reset_rates()
{
- for(int i = 0; i < renderfarm_nodes.total; i++)
- {
+ for( int i = 0; i < renderfarm_nodes.total; i++ ) {
renderfarm_rate.values[i] = 0.0;
}
local_rate = 0.0;
float Preferences::get_rate(int node)
{
- if(node < 0)
- {
+ if( node < 0 ) {
return local_rate;
}
- else
- {
+ else {
int total = 0;
- for(int i = 0; i < renderfarm_nodes.size(); i++)
- {
- if(renderfarm_enabled.get(i)) total++;
- if(total == node + 1)
- {
+ for( int i = 0; i < renderfarm_nodes.size(); i++ ) {
+ if( renderfarm_enabled.get(i) ) total++;
+ if( total == node + 1 ) {
return renderfarm_rate.get(i);
}
}
void Preferences::set_rate(float rate, int node)
{
//printf("Preferences::set_rate %f %d\n", rate, node);
- if(node < 0)
- {
+ if( node < 0 ) {
local_rate = rate;
}
- else
- {
+ else {
int total = 0;
- for(int i = 0; i < renderfarm_nodes.size(); i++)
- {
- if(renderfarm_enabled.get(i)) total++;
- if(total == node + 1)
- {
+ for( int i = 0; i < renderfarm_nodes.size(); i++ ) {
+ if( renderfarm_enabled.get(i) ) total++;
+ if( total == node + 1 ) {
renderfarm_rate.set(i, rate);
return;
}
{
preferences_lock->lock("Preferences::get_avg_rate");
float total = 0.0;
- if(renderfarm_rate.total)
- {
+ if( renderfarm_rate.total ) {
int enabled = 0;
- if(use_master_node)
- {
- if(EQUIV(local_rate, 0.0))
- {
+ if( use_master_node ) {
+ if( EQUIV(local_rate, 0.0) ) {
preferences_lock->unlock();
return 0.0;
}
- else
- {
+ else {
enabled++;
total += local_rate;
}
}
- for(int i = 0; i < renderfarm_rate.total; i++)
- {
- if(renderfarm_enabled.values[i])
- {
+ for( int i = 0; i < renderfarm_rate.total; i++ ) {
+ if( renderfarm_enabled.values[i] ) {
enabled++;
total += renderfarm_rate.values[i];
- if(EQUIV(renderfarm_rate.values[i], 0.0))
- {
+ if( EQUIV(renderfarm_rate.values[i], 0.0) ) {
preferences_lock->unlock();
return 0.0;
}
}
}
- if(enabled)
+ if( enabled )
total /= enabled;
else
total = 0.0;
while(!done)
{
done = 1;
- for(int i = 0; i < renderfarm_nodes.total - 1; i++)
- {
- if(strcmp(renderfarm_nodes.values[i], renderfarm_nodes.values[i + 1]) > 0)
- {
+ for( int i = 0; i < renderfarm_nodes.total - 1; i++ ) {
+ if( strcmp(renderfarm_nodes.values[i], renderfarm_nodes.values[i + 1]) > 0 ) {
char *temp = renderfarm_nodes.values[i];
int temp_port = renderfarm_ports.values[i];
int Preferences::get_enabled_nodes()
{
int result = 0;
- for(int i = 0; i < renderfarm_enabled.total; i++)
- if(renderfarm_enabled.values[i]) result++;
+ for( int i = 0; i < renderfarm_enabled.total; i++ )
+ if( renderfarm_enabled.values[i] ) result++;
return result;
}
const char* Preferences::get_node_hostname(int number)
{
int total = 0;
- for(int i = 0; i < renderfarm_nodes.total; i++)
- {
- if(renderfarm_enabled.values[i])
- {
- if(total == number)
+ for( int i = 0; i < renderfarm_nodes.total; i++ ) {
+ if( renderfarm_enabled.values[i] ) {
+ if( total == number )
return renderfarm_nodes.values[i];
else
total++;
int Preferences::get_node_port(int number)
{
int total = 0;
- for(int i = 0; i < renderfarm_ports.total; i++)
- {
- if(renderfarm_enabled.values[i])
- {
- if(total == number)
+ for( int i = 0; i < renderfarm_ports.total; i++ ) {
+ if( renderfarm_enabled.values[i] ) {
+ if( total == number )
return renderfarm_ports.values[i];
else
total++;
int Preferences::calculate_processors(int interactive)
{
- if(force_uniprocessor && !interactive) return 1;
+ if( force_uniprocessor && !interactive ) return 1;
return BC_WindowBase::get_resources()->machine_cpus;
}