X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmain.C;h=b660d1b488394c3ea409860b1798e0588e6fa938;hb=HEAD;hp=f422092ea8b219211ab5c2cc2e4b5bda4582f3bc;hpb=3bf30d220f7855b995b887dc10812ae3780e6805;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/main.C b/cinelerra-5.1/cinelerra/main.C index f422092e..b1f1fb69 100644 --- a/cinelerra-5.1/cinelerra/main.C +++ b/cinelerra-5.1/cinelerra/main.C @@ -1,6 +1,7 @@ /* * CINELERRA * Copyright (C) 2010 Adam Williams + * Copyright (C) 2003-2016 Cinelerra CV contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,6 +23,7 @@ #include "arraylist.h" #include "batchrender.h" #include "bcsignals.h" +#include "cstrdup.h" #include "edl.h" #include "file.h" #include "filexml.h" @@ -46,7 +48,24 @@ #include #ifdef LEAKER -#define STRC(v) printf("==new %p from %p sz %jd\n", v, __builtin_return_address(0), n) +#if 0 // track allocators +#include +#define BT_BUF_SIZE 100 +static void leaker() +{ + void *buffer[BT_BUF_SIZE]; + int nptrs = backtrace(buffer, BT_BUF_SIZE); + char **trace = backtrace_symbols(buffer, nptrs); + if( !trace ) return; + for( int i=0; igui->lock_window("main"); //PRINT_TRACE - mwindow->load_filenames(filenames, LOADMODE_REPLACE); + mwindow->load_filenames(filenames, + LOADMODE_REPLACE, LOADMODE_EDL_CLIP); //PRINT_TRACE if( filenames->size() == 1 ) mwindow->gui->mainmenu->add_load(filenames->get(0)); @@ -104,11 +124,40 @@ public: long cin_timezone; +static float get_layout_scale() +{ + char config_path[BCTEXTLEN]; + sprintf(config_path,"%s/%s", File::get_config_path(), CONFIG_FILE); + FILE *fp = fopen(config_path,"r"); + if( !fp ) return 0; + float scale = 0; + char line[BCTEXTLEN]; + line[BCTEXTLEN-1] = 0; + while( fgets(line, BCTEXTLEN-1, fp) ) { + if( !strncmp(line, "LAYOUT_SCALE ",12+1) ) { + scale = atof(line+12); + break; + } + } + fclose(fp); + return scale; +} + +/******************************************************************* +* @mainpage +* Cinelerra-GG is a professional video editor for Linux. It is timeline +* based, supports hundreds of (de)coders, LADSPA and LV2 audio plugins, +* FFMPEG audio/video plugins, plus built-in audio/video plugins. +* Screen sizes up to 8K, any frame rate, extensive compositing features, +* title generator and more. +* +********************************************************************/ int main(int argc, char *argv[]) { // handle command line arguments first srand(time(0)); ArrayList filenames; + filenames.set_array_delete(); FileSystem fs; time_t st; time(&st); @@ -129,8 +178,9 @@ int main(int argc, char *argv[]) batch_path[0] = 0; deamon_path[0] = 0; Units::init(); - - File::init_cin_path(); + const char *lang = getenv("LANGUAGE"); + if( lang ) lang = cstrdup(lang); + File::init_cin_env_vars(); const char *locale_path = File::get_locale_path(); const char *cin = File::get_cin(); @@ -241,7 +291,10 @@ int main(int argc, char *argv[]) } } - + float scale = operation == DO_GUI ? + get_layout_scale() : 1; + // runs XInitThreads + BC_WindowBase::init_resources(scale); if( operation == DO_GUI || operation == DO_DEAMON || operation == DO_DEAMON_FG || @@ -256,9 +309,18 @@ int main(int argc, char *argv[]) #ifndef COPYRIGHTTEXT2 #define COPYRIGHTTEXT2 "" #endif +#ifndef COPYRIGHTTEXT3 +#define COPYRIGHTTEXT3 "" +#endif + fprintf(stderr, "%s %s - %s\n%s", PROGRAM_NAME,CINELERRA_VERSION, AboutPrefs::build_timestamp, REPOMAINTXT COPYRIGHTTEXT1 COPYRIGHTTEXT2); + fprintf(stderr, "%s", COPYRIGHTTEXT3); + fprintf(stderr, "%s", COPYRIGHTTEXT4); + fprintf(stderr,"\n"); + fprintf(stderr, "%s \n", AboutPrefs::ffmpeg_version); + fprintf(stderr,"\n"); fprintf(stderr, "%s is free software, covered by the GNU General Public License,\n" "and you are welcome to change it and/or distribute copies of it under\n" "certain conditions. There is absolutely no warranty for %s.\n\n", @@ -310,7 +372,7 @@ int main(int argc, char *argv[]) break; } case DO_BATCHRENDER: { - BatchRenderThread *thread = new BatchRenderThread; + BatchRenderThread *thread = new BatchRenderThread(0); thread->start_rendering(config_path, batch_path); break; } @@ -322,7 +384,7 @@ int main(int argc, char *argv[]) MWindow mwindow; mwindow.create_objects(1, !filenames.total, config_path); CommandLineThread *thread = 0; - if( mwindow.preferences->perpetual_session && load_perpetual ) + if( load_perpetual ) mwindow.load_undo_data(); //SET_TRACE // load the initial files on seperate tracks @@ -356,16 +418,18 @@ int main(int argc, char *argv[]) } if( restart <= 0 ) done = 1; - mwindow.save_defaults(); - if( mwindow.preferences->perpetual_session ) - mwindow.save_undo_data(); + mwindow.save_undo_data(); //PRINT_TRACE filenames.remove_all_objects(); delete thread; } if( restart < 0 ) { + if( lang ) // reset to cmdline state + setenv("LANGUAGE", lang, 1); + else + unsetenv("LANGUAGE"); char exe_path[BCTEXTLEN]; int len = readlink("/proc/self/exe", exe_path, sizeof(exe_path)-1); if( len < 0 ) break; @@ -383,7 +447,9 @@ DISABLE_BUFFER } filenames.remove_all_objects(); + delete [] lang; Units::finit(); + BC_WindowBase::finit_resources(); time_t et; time(&et); long dt = et - st;