int main(int argc, char *argv[]) { #if defined(__WIN32) && defined(USE_SDL) redirectStdoutToFile(); #endif #if defined(ADM_DEBUG) && defined(FIND_LEAKS) new_progname = argv[0]; #endif #ifndef __MINGW32__ // thx smurf uk :) installSigHandler(); #endif printf("*************************\n"); printf(" Avidemux v" VERSION); if(ADM_SUBVERSION) { printf(" (r%04u)", ADM_SUBVERSION); } printf("\n*************************\n"); printf(" http://www.avidemux.org\n"); printf(" Code : Mean, JSC, Gruntster \n"); printf(" GFX : Nestor Di , [email protected]\n"); printf(" Design : Jakub Misak\n"); printf(" FreeBSD : Anish Mistry, [email protected]\n"); printf(" Audio : Mihail Zenkov\n"); printf(" MacOsX : Kuisathaverat\n"); printf(" Win32 : Gruntster\n\n"); #ifdef __GNUC__ printf("Compiler: GCC %s\n", __VERSION__); #endif printf("Build Target: "); #if defined(__WIN32) printf("Microsoft Windows"); #elif defined(__APPLE__) printf("Apple"); #else printf("Linux"); #endif #if defined(ADM_CPU_X86_32) printf(" (x86)"); #elif defined(ADM_CPU_X86_64) printf(" (x86-64)"); #elif defined(ADM_CPU_PPC) printf(" (PowerPC)"); #endif printf("\n"); char uiDesc[15]; getUIDescription(uiDesc); printf("User Interface: %s\n", uiDesc); #ifdef __WIN32 char version[250]; if (getWindowsVersion(version)) printf("Operating System: %s\n", version); #endif #if defined(__USE_LARGEFILE) && defined(__USE_LARGEFILE64) printf("\nLarge file available: %d offset\n", __USE_FILE_OFFSET64); #endif // Start counting memory ADM_memStatInit(); ADM_InitMemcpy(); printf("\nInitialising prefs\n"); initPrefs(); prefs->load(); CpuCaps::init(); #ifdef USE_SDL uint32_t videoDevice = RENDER_LAST; prefs->get(DEVICE_VIDEODEVICE, &videoDevice); initSdl(videoDevice); #endif atexit(onexit); #ifdef __MINGW32__ win32_netInit(); #endif UI_Init(argc,argv); AUDMEncoder_initDither(); // Hook our UI... InitFactory(); InitCoreToolkit(); initFileSelector(); // Load .avidemuxrc quotaInit(); video_body = new ADM_Composer; #ifdef HAVE_ENCODER registerVideoFilters(); #endif //***************Plugins ********************* // Load system wide audio decoder plugin #ifdef _WIN32 const char *startDir=""; const char *pluginDir="plugins"; #else const char *pluginDir="ADM_plugins"; #ifdef __APPLE__ const char *startDir="../lib"; #else const char *startDir="lib"; #endif #endif char *adPlugins = ADM_getInstallRelativePath(startDir,pluginDir,"audioDecoder"); char *vfPlugins = ADM_getInstallRelativePath(startDir,pluginDir,"videoFilter"); char *avPlugins = ADM_getInstallRelativePath(startDir,pluginDir,"audioDevices"); char *aePlugins = ADM_getInstallRelativePath(startDir,pluginDir,"audioEncoders"); ADM_ad_loadPlugins(adPlugins); delete [] adPlugins; ADM_vf_loadPlugins(vfPlugins); delete [] vfPlugins; ADM_av_loadPlugins(avPlugins); delete [] avPlugins; ADM_ae_loadPlugins(aePlugins); delete [] aePlugins; // load local audio decoder plugins adPlugins=ADM_getHomeRelativePath("plugins","audioDecoder"); ADM_ad_loadPlugins(adPlugins); delete [] adPlugins; // load local video filter plugins vfPlugins=ADM_getHomeRelativePath("plugins","videoFilter"); ADM_vf_loadPlugins(vfPlugins); delete [] vfPlugins; // load encoder plugins... loadPlugins(); //***************Plugins ********************* if(!initGUI()) { printf("\n Fatal : could not init GUI\n"); exit(-1); } ADM_lavInit(); #ifdef HAVE_AUDIO AVDM_audioInit(); #endif if(SpidermonkeyInit() == true) printf("Spidermonkey initialized.\n"); else ADM_assert(0); #ifdef __MINGW32__ __try1(exceptionHandler); #endif UI_RunApp(); #ifdef __MINGW32__ __except1(exceptionHandler); #endif printf("Normal exit\n"); return 0; }
void GUI_FileSel(const char *label, SELFILE_CB cb, int rw,char **rname) { /* Create the selector */ GtkWidget *dialog; char *name = NULL; char *tmpname; gchar *selected_filename; uint8_t res; if (rname) *rname = NULL; if (rw) dialog = gtk_file_chooser_dialog_new ("Save", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); else dialog = gtk_file_chooser_dialog_new ("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_default_response (GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); gtk_dialog_set_alternative_button_order(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT, GTK_RESPONSE_CANCEL, -1); initFileSelector(); setFilter(dialog); gtk_window_set_title (GTK_WINDOW(dialog), label); gtk_register_dialog(dialog); if (rw) res = prefs->get(LASTFILES_LASTDIR_WRITE,(char **)&tmpname); else res = prefs->get(LASTFILES_LASTDIR_READ,(char **)&tmpname); if (res) { DIR *dir; char *str = ADM_PathCanonize(tmpname); ADM_PathStripName(str); /* LASTDIR may have gone; then do nothing and use current dir instead (implied) */ if (dir = opendir(str)) { closedir(dir); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),(gchar *)str); } delete [] str; } ADM_dealloc(tmpname); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { selected_filename = (gchar *)gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); #ifdef _WIN32 if (*(selected_filename + strlen(selected_filename) - 1) == '\\'){ #else if (*(selected_filename + strlen(selected_filename) - 1) == '/'){ #endif GUI_Error_HIG(QT_TR_NOOP("Cannot open directory as a file"), NULL); } else { name = ADM_strdup(selected_filename); char *str = ADM_PathCanonize(name); ADM_PathStripName(str); if (rw) prefs->set(LASTFILES_LASTDIR_WRITE, (char*)str); else prefs->set(LASTFILES_LASTDIR_READ, (char*)str); delete [] str; } } gtk_unregister_dialog(dialog); gtk_widget_destroy(dialog); // CYB 2005.02.23 if (cb) { #warning fixme const char *leak=NULL; FileSel_ReadWrite(cb, rw, name, leak); ADM_dealloc(name); } else *rname = name; } /* Mean:It seems it is attached to the dialog & destroyed with it As it leads to crash if we don't recreate them each time....*/ void initFileSelector(void) { #define ADD_PAT(x,y) gtk_file_filter_add_pattern(x,"*."#y); filter_avi=gtk_file_filter_new(); gtk_file_filter_set_name(filter_avi, "AVI (*.avi)"); ADD_PAT(filter_avi, avi); ADD_PAT(filter_avi, AVI); filter_mpeg=gtk_file_filter_new(); gtk_file_filter_set_name(filter_mpeg, "MPEG (*.m*,*.vob)"); ADD_PAT(filter_mpeg, [mM][12][Vv]); ADD_PAT(filter_mpeg, [Mm][pP][gG]); ADD_PAT(filter_mpeg, [Vv][Oo][Bb]); ADD_PAT(filter_mpeg, ts); ADD_PAT(filter_mpeg, TS); filter_image = gtk_file_filter_new(); gtk_file_filter_set_name(filter_image, QT_TR_NOOP("Images")); ADD_PAT(filter_image, png); ADD_PAT(filter_image, bmp); ADD_PAT(filter_image, jpg); ADD_PAT(filter_image, PNG); ADD_PAT(filter_image, BMP); ADD_PAT(filter_image, JPG); filter_all = gtk_file_filter_new(); gtk_file_filter_set_name(filter_all, QT_TR_NOOP("All")); gtk_file_filter_add_pattern(filter_all, "*"); }
void init(void) { initFileSelector(); }
int main(int argc, char *argv[]) { // Check for big files #ifdef __USE_LARGEFILE #ifdef __USE_LARGEFILE64 printf("\n LARGE FILE AVAILABLE : %d offset\n", __USE_FILE_OFFSET64 ); #endif #endif /* Initialize Gettext if available */ #ifdef HAVE_DCGETTEXT setlocale (LC_ALL, ""); //#define ALOCALES "/usr/local/share/locale" bindtextdomain ("avidemux", ADMLOCALE); textdomain ("avidemux"); printf("Locales for %s appear to be in %s\n","avidemux", ADMLOCALE); printf("\nI18N : %s \n",dgettext("avidemux","_File")); #endif // thx smurf uk :) signal(11, sig_segfault_handler); // show stacktrace on default printf("\n*******************\n"); printf(" Avidemux 2, v " VERSION "\n"); printf("*******************\n"); printf(" http://fixounet.free.fr/avidemux\n"); printf(" Code : Mean & JSC \n"); printf(" GFX : Nestor Di , [email protected]\n"); printf(" Testing : Jakub Misak\n"); printf(" FreeBSD : Anish Mistry, [email protected]\n"); #if (defined( ARCH_X86) || defined(ARCH_X86_64)) printf("Arcc X86 X86_64 activated.\n"); #endif #ifdef USE_XX_XVID_CVS printf("Probing XvidCVS library....\n"); dloadXvidCVS( ); #endif VPInitLibrary(); register_Encoders( ); atexit(onexit); #ifndef CYG_MANGLING g_thread_init(NULL); gdk_threads_init(); #endif gdk_threads_enter(); gtk_set_locale(); gtk_init(&argc, &argv); gdk_rgb_init(); #ifdef USE_XVID_4 xvid4_init(); #endif initFileSelector(); CpuCaps::init(); ADM_InitMemcpy(); // Load .avidemuxrc quotaInit(); prefs->load(); if(!initGUI()) { printf("\n Fatal : could not init GUI\n"); exit(-1); } video_body = new ADM_Composer; #ifdef HAVE_ENCODER registerVideoFilters( ); #endif #ifdef USE_FFMPEG avcodec_init(); avcodec_register_all(); mpegps_init(); #endif #ifdef HAVE_AUDIO AVDM_audioInit(); #endif buildDistMatrix(); initScaleTab(); loadEncoderConfig(); COL_init(); if (argc >= 2) { global_argc=argc; global_argv=argv; gtk_timeout_add( 300, (GtkFunction )automation, NULL ); //automation(); } #ifdef USE_SDL printf("Global SDL init...\n"); SDL_Init(0); //SDL_INIT_AUDIO+SDL_INIT_VIDEO); #endif oplug_mpegInit(); if(SpidermonkeyInit() == true) printf("Spidermonkey initialized.\n"); gtk_main(); gdk_threads_leave(); return 0; }
/** \fn FileSel_SelectWrite(const char *title,char *target,uint32_t max, const char *source) \brief allow to select a file @return 0 on failure, 1 on success @param title : window title @param target : where to copy the result (must be allocated by caller) @param max : Max # of bytes that target can hold @param source : where we start from */ uint8_t FileSel_SelectWrite(const char *title, char *target, uint32_t max, const char *source) { GtkWidget *dialog; uint8_t ret = 0; gchar *selected_filename; gchar last; char *dupe = NULL, *tmpname = NULL; DIR *dir = NULL; dialog = gtk_file_chooser_dialog_new("Write to File", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_alternative_button_order(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT, GTK_RESPONSE_CANCEL, -1); gtk_window_set_title(GTK_WINDOW(dialog), title); initFileSelector(); setFilter(dialog); gtk_register_dialog(dialog); if (source && *source) { #if 0 // well, this is what they say to do, but then you can't easily edit the // name... // the following sequence is per GTK docs for gtk_file_chooser_set_filename() if (access (source, W_OK) == 0) // if file exists gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),(gchar *)source); else // new file #endif { dupe = ADM_PathCanonize(source); ADM_PathStripName(dupe); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), (gchar*)dupe); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), (gchar*)(source + strlen(dupe))); delete [] dupe; } } else //use pref { if (prefs->get(LASTFILES_LASTDIR_WRITE,(char **)&tmpname)) { dupe = ADM_PathCanonize(tmpname); if (dir = opendir(dupe)) { closedir(dir); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), (gchar*)tmpname); } delete [] dupe; } } if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { selected_filename = (gchar*)gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if (strlen(selected_filename)) { last = selected_filename[strlen(selected_filename) - 1]; if (last == '/' || last =='\\') { GUI_Error_HIG(QT_TR_NOOP("Cannot open directory as a file"), NULL); return 0; } else { strncpy(target, (char*)selected_filename, max); // Finally we accept it :) ret = 1; } } } gtk_unregister_dialog(dialog); gtk_widget_destroy(dialog); return ret; }
/** \fn main */ int main(int argc, char *argv[]) { #if defined(_WIN32) redirectStdoutToFile(); #endif #if !defined(NDEBUG) && defined(FIND_LEAKS) new_progname = argv[0]; #endif installSigHandler(); bool portableMode=isPortableMode(argc,argv); printf("*************************\n"); printf(" Avidemux v" VERSION); #if defined(ADM_SUBVERSION) #define MKSTRING(x) x printf(" (%s)", MKSTRING(ADM_SUBVERSION)); #endif printf("\n*************************\n"); printf(" http://www.avidemux.org\n"); printf(" Code : Mean, JSC, Gruntster \n"); printf(" GFX : Nestor Di , [email protected]\n"); printf(" Design : Jakub Misak\n"); printf(" FreeBSD : Anish Mistry, [email protected]\n"); printf(" Audio : Mihail Zenkov\n"); printf(" MacOsX : Kuisathaverat\n"); printf(" Win32 : Gruntster\n\n"); #ifdef __GNUC__ printf("Compiler: GCC %s\n", __VERSION__); #endif printf("Build Target: "); #if defined(_WIN32) printf("Microsoft Windows"); #elif defined(__APPLE__) printf("Apple"); #else printf("Linux"); #endif #if defined(ADM_CPU_X86_32) printf(" (x86)"); #elif defined(ADM_CPU_X86_64) printf(" (x86-64)"); #endif printf("\n"); #ifdef _WIN32 char version[250]; if (getWindowsVersion(version)) printf("Operating System: %s\n", version); #endif #if defined(__USE_LARGEFILE) && defined(__USE_LARGEFILE64) printf("\nLarge file available: %d offset\n", __USE_FILE_OFFSET64); #endif #ifndef __APPLE__ ADM_InitMemcpy(); #endif atexit(onexit); #ifdef _WIN32 win32_netInit(); #endif #if 0 // Hook our UI... InitFactory(); InitCoreToolkit(); initFileSelector(); #endif // Load .avidemuxrc quotaInit(); ADM_initBaseDir(portableMode); // Init jobs ADMJob::jobInit(); jobRun(argc,argv); uninstallSigHandler(); printf("Normal exit\n"); return 0; }
int startAvidemux(int argc, char *argv[]) { printf("*************************\n"); printf(" Avidemux v"ADM_VERSION); #if defined( ADM_SUBVERSION ) #define MKSTRING(x) x printf(" (%s) .", MKSTRING(ADM_SUBVERSION)); #endif printf("\n*************************\n"); printf(" http://www.avidemux.org\n"); printf(" Code : Mean, JSC, Grant Pedersen\n"); printf(" GFX : Nestor Di, [email protected]\n"); printf(" Design : Jakub Misak\n"); printf(" FreeBSD : Anish Mistry, [email protected]\n"); printf(" Audio : Mihail Zenkov\n"); printf(" Mac OS X : Kuisathaverat, Harry van der Wolf\n"); printf(" Win32 : Grant Pedersen\n\n"); #ifdef __GNUC__ printf("Compiler: GCC %s\n", __VERSION__); #endif printf("Build Target: "); #if defined(_WIN32) printf("Microsoft Windows"); #elif defined(__APPLE__) printf("Apple"); #else printf("Linux"); #endif #if defined(ADM_CPU_X86_32) printf(" (x86)"); #elif defined(ADM_CPU_X86_64) printf(" (x86-64)"); #endif char uiDesc[15]; getUIDescription(uiDesc); printf("\nUser Interface: %s\n", uiDesc); #ifdef _WIN32 char version[250]; if (getWindowsVersion(version)) printf("Operating System: %s\n", version); #endif #if defined(__USE_LARGEFILE) && defined(__USE_LARGEFILE64) printf("\nLarge file available: %d offset\n", __USE_FILE_OFFSET64); #endif printf("Time: %s\n", ADM_epochToString(ADM_getSecondsSinceEpoch())); for(int i = 0; i < argc; i++) { printf("%d: %s\n", i, argv[i]); } #ifndef __APPLE__ ADM_InitMemcpy(); #endif printf("\nInitialising prefs\n"); initPrefs(); if(false==prefs->load()) // no prefs, set some sane default { setPrefsDefault(); } CpuCaps::init(); atexit(onexit); #ifdef _WIN32 win32_netInit(); #endif video_body = new ADM_Composer; UI_Init(argc, argv); AUDMEncoder_initDither(); // Hook our UI... InitFactory(); InitCoreToolkit(); initFileSelector(); // Load .avidemuxrc quotaInit(); ADM_lavFormatInit(); //***************Plugins ********************* // Load system wide audio decoder plugin #ifdef __APPLE__ const char *startDir="../lib"; #else const char *startDir=ADM_RELATIVE_LIB_DIR; #endif char *adPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "audioDecoder"); char *avPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "audioDevices"); char *aePlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "audioEncoders"); char *dmPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "demuxers"); char *mxPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "muxers"); char *vePlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "videoEncoders"); char *vdPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "videoDecoders"); char *vfPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "videoFilters"); char *sePlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "scriptEngines"); //***************Plugins ********************* if(!initGUI(initialiseScriptEngines(sePlugins, video_body,getUISpecifSubfolder()))) { printf("\n Fatal : could not init GUI\n"); exit(-1); } delete [] sePlugins; #if defined( USE_VDPAU) #if (ADM_UI_TYPE_BUILD!=ADM_UI_CLI) printf("Probing for VDPAU...\n"); if(vdpauProbe()==true) printf("VDPAU available\n"); else printf("VDPAU not available\n"); #else printf("Cannot use VDPAU in cli mode %d,%d\n",ADM_UI_TYPE_BUILD,ADM_UI_CLI); #endif #endif #if defined( USE_XVBA) #if (ADM_UI_TYPE_BUILD!=ADM_UI_CLI) printf("Probing for XVBA...\n"); if(xvbaProbe()==true) printf("XVBA available\n"); else printf("XVBA not available\n"); #else printf("Cannot use XVBA in cli mode %d,%d\n",ADM_UI_TYPE_BUILD,ADM_UI_CLI); #endif #endif #if defined( USE_LIBVA) #if (ADM_UI_TYPE_BUILD!=ADM_UI_CLI) printf("Probing for LIBVA...\n"); if(libvaProbe()==true) printf("LIBVA available\n"); else printf("LIBVA not available\n"); #else printf("Cannot use LIBVA in cli mode %d,%d\n",ADM_UI_TYPE_BUILD,ADM_UI_CLI); #endif #endif #ifdef USE_SDL char *drv=NULL; printf("Probing for SDL...\n"); std::string sdlDriver=std::string("dummy"); if(prefs->get(FEATURES_SDLDRIVER,&drv)) { if(drv) { if(strlen(drv)) { sdlDriver=std::string(drv); } ADM_dezalloc(drv); } } printf("Calling initSDL with driver=%s\n",sdlDriver.c_str()); initSdl(sdlDriver); #endif // ADM_mx_loadPlugins(mxPlugins); delete [] mxPlugins; ADM_ad_loadPlugins(adPlugins); delete [] adPlugins; ADM_av_loadPlugins(avPlugins); delete [] avPlugins; ADM_ae_loadPlugins(aePlugins); delete [] aePlugins; ADM_dm_loadPlugins(dmPlugins); delete [] dmPlugins; ADM_ve6_loadPlugins(vePlugins,getUISpecifSubfolder()); delete [] vePlugins; ADM_vf_loadPlugins(vfPlugins,getUISpecifSubfolder()); delete [] vfPlugins; ADM_vd6_loadPlugins(vdPlugins); delete [] vdPlugins; // load local audio decoder plugins adPlugins=ADM_getHomeRelativePath("plugins6","audioDecoder"); ADM_ad_loadPlugins(adPlugins); delete [] adPlugins; // load local video filter plugins vfPlugins=ADM_getHomeRelativePath("plugins6","videoFilter"); ADM_vf_loadPlugins(vfPlugins,getUISpecifSubfolder()); delete [] vfPlugins; ADM_lavInit(); AVDM_audioInit(); UI_RunApp(); cleanUp(); printf("Normal exit\n"); return 0; }
int startAvidemux(int argc, char *argv[]) { printf("*************************\n"); printf(" Avidemux v" VERSION); if(ADM_SUBVERSION) { printf(" (r%04u)", ADM_SUBVERSION); } printf("\n*************************\n"); printf(" http://www.avidemux.org\n"); printf(" Code : Mean, JSC, Grant Pedersen\n"); printf(" GFX : Nestor Di, [email protected]\n"); printf(" Design : Jakub Misak\n"); printf(" FreeBSD : Anish Mistry, [email protected]\n"); printf(" Audio : Mihail Zenkov\n"); printf(" Mac OS X : Kuisathaverat, Harry van der Wolf\n"); printf(" Win32 : Grant Pedersen\n\n"); printf("Compiler: "); #if defined(__GNUC__) printf("GCC %s", __VERSION__); #elif defined(_MSC_VER) printf("Microsoft Visual C++ %d.%d", _MSC_VER / 100, _MSC_VER % 100); #else printf("Unknown"); #endif printf("\nBuild Target: "); #if defined(_WIN32) printf("Microsoft Windows"); #elif defined(__APPLE__) printf("Apple"); #else printf("Linux"); #endif #if defined(ADM_CPU_X86_32) printf(" (x86)"); #elif defined(ADM_CPU_X86_64) printf(" (x86-64)"); #endif char uiDesc[15]; getUIDescription(uiDesc); printf("\nUser Interface: %s\n", uiDesc); #ifdef _WIN32 char version[250]; if (getWindowsVersion(version)) printf("Operating System: %s\n", version); #endif #if defined(__USE_LARGEFILE) && defined(__USE_LARGEFILE64) printf("\nLarge file available: %d offset\n", __USE_FILE_OFFSET64); #endif printf("Time: %s\n", ADM_epochToString(ADM_getSecondsSinceEpoch())); for(int i = 0; i < argc; i++) { printf("%d: %s\n", i, argv[i]); } // Start counting memory ADM_memStatInit(); #ifndef __APPLE__ ADM_InitMemcpy(); #endif printf("\nInitialising prefs\n"); initPrefs(); if(false==prefs->load()) // no prefs, set some sane default { setPrefsDefault(); } CpuCaps::init(); #ifdef USE_SDL uint32_t videoDevice = RENDER_LAST; prefs->get(VIDEODEVICE, &videoDevice); initSdl(videoDevice); #endif atexit(onexit); #ifdef _WIN32 win32_netInit(); #endif IPluginManager *pluginManager = new PluginManager(); pluginManager->loadAll(); UI_SetPluginManager(pluginManager); video_body = new ADM_Composer(pluginManager); UI_Init(argc, argv); AUDMEncoder_initDither(); // Hook our UI... InitFactory(); InitCoreToolkit(); initFileSelector(); // Load .avidemuxrc quotaInit(); ADM_lavFormatInit(); //***************Plugins ********************* // Load system wide audio decoder plugin #ifdef __APPLE__ const char *startDir="../lib"; #else const char *startDir=ADM_RELATIVE_LIB_DIR; #endif char *adPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "audioDecoder"); char *avPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "audioDevices"); char *aePlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "audioEncoders"); char *dmPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "demuxers"); char *vdPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "videoDecoders"); char *vfPlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "videoFilters"); char *sePlugins = ADM_getInstallRelativePath(startDir, ADM_PLUGIN_DIR, "scriptEngines"); ADM_ad_loadPlugins(adPlugins); delete [] adPlugins; ADM_av_loadPlugins(avPlugins); delete [] avPlugins; ADM_ae_loadPlugins(aePlugins); delete [] aePlugins; ADM_dm_loadPlugins(dmPlugins); delete [] dmPlugins; ADM_vf_loadPlugins(vfPlugins); delete [] vfPlugins; ADM_vd6_loadPlugins(vdPlugins); delete [] vdPlugins; // load local audio decoder plugins adPlugins=ADM_getHomeRelativePath("plugins6","audioDecoder"); ADM_ad_loadPlugins(adPlugins); delete [] adPlugins; // load local video filter plugins vfPlugins=ADM_getHomeRelativePath("plugins6","videoFilter"); ADM_vf_loadPlugins(vfPlugins); delete [] vfPlugins; //***************Plugins ********************* if(!initGUI(initialiseScriptEngines(sePlugins, video_body, pluginManager), pluginManager)) { printf("\n Fatal : could not init GUI\n"); exit(-1); } delete [] sePlugins; ADM_lavInit(); AVDM_audioInit(); #if defined( USE_VDPAU) #if (ADM_UI_TYPE_BUILD!=ADM_UI_CLI) printf("Probing for VDPAU...\n"); if(vdpauProbe()==true) printf("VDPAU available\n"); else printf("VDPAU not available\n"); #else printf("Cannot use VDPAU in cli mode %d,%d\n",ADM_UI_TYPE_BUILD,ADM_UI_CLI); #endif #endif // Init jobs ADM_jobInit(); UI_RunApp(); cleanUp(); delete pluginManager; printf("Normal exit\n"); return 0; }
/** Select a file Target is the string allocated by caller that will receive the resule, maxlen byte Source is a optionnal last file to replace the selector at the last dir used @Title@ is the title of the dialog window Returns : 0 if error, 1 on success */ uint8_t FileSel_SelectRead(const char *title,char *target,uint32_t max, const char *source) { GtkWidget *dialog; uint8_t ret=0; gchar *selected_filename; gchar last; char *dupe=NULL,*tmpname=NULL; DIR *dir=NULL; dialog = gtk_file_chooser_dialog_new ("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_window_set_title (GTK_WINDOW (dialog),title); initFileSelector(); setFilter(dialog); gtk_register_dialog(dialog); // gtk_transient(dialog); if(source) { dupe=PathCanonize(source); PathStripName(dupe); if( (dir=opendir(dupe)) ) { closedir(dir); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),(gchar *)source); } delete [] dupe; } else //use pref { if( prefs->get(LASTDIR_READ,&tmpname)) { dupe=PathCanonize(tmpname); PathStripName(dupe); if( (dir=opendir(dupe)) ) { closedir(dir); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),(gchar *)dupe); } delete [] dupe; } } if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) { selected_filename= (gchar *) gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if(strlen(selected_filename)) { last=selected_filename[strlen(selected_filename) - 1]; if (last == '/' || last =='\\' ) { GUI_Error_HIG("Cannot open directory as a file", NULL); return 0; } else { // Check we can read it .. FILE *fd; fd=fopen(selected_filename,"rb"); if(fd) { fclose(fd); strncpy(target,(char *)selected_filename,max); // Finally we accept it :) ret=1; } } } } gtk_unregister_dialog(dialog); gtk_widget_destroy(dialog); return ret; }
void GUI_FileSel(const char *label, SELFILE_CB * cb, int rw,char **rname) { /* Create the selector */ GtkWidget *dialog; char *name=NULL; char *tmpname; gchar *selected_filename; uint8_t res; if(rname) *rname=NULL; if(rw) { dialog=dialog = gtk_file_chooser_dialog_new ("Save", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); } else { dialog=dialog = gtk_file_chooser_dialog_new ("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); } /**********/ initFileSelector(); setFilter(dialog); /**********/ gtk_window_set_title (GTK_WINDOW (dialog),label); gtk_register_dialog(dialog); if(rw) res=prefs->get(LASTDIR_WRITE,&tmpname); else res=prefs->get(LASTDIR_READ,&tmpname); if(res) { DIR *dir; char *str=PathCanonize(tmpname); PathStripName(str); /* LASTDIR may have gone; then do nothing and use current dir instead (implied) */ if( (dir=opendir(str)) ) { closedir(dir); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),(gchar *)str); } delete [] str; } if(gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_ACCEPT) { selected_filename= (gchar *) gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); #ifdef CYG_MANGLING if (*(selected_filename + strlen(selected_filename) - 1) == '\\') { #else if (*(selected_filename + strlen(selected_filename) - 1) == '/') { #endif GUI_Error_HIG("Cannot open directory as a file", NULL); } else { name=ADM_strdup(selected_filename); char *str=PathCanonize(name); PathStripName(str); if(rw) prefs->set(LASTDIR_WRITE,str); else prefs->set(LASTDIR_READ,str); delete [] str; } } gtk_unregister_dialog(dialog); gtk_widget_destroy(dialog); // CYB 2005.02.23 if(cb) { fileReadWrite(cb, rw, name); } else { *rname=name; } } //------------------------------------------------------------------ /* ** note: it modifies it's first argument */ void simplify_path(char **buf) { unsigned int last1slash = 0; unsigned int last2slash = 0; while( !strncmp(*buf,"/../",4) ) memmove(*buf,*buf+3,strlen(*buf+3)+1); for(unsigned int i=0; i<strlen(*buf)-2; i++) while( !strncmp(*buf+i,"/./",3) ) memmove(*buf+i,*buf+i+2,strlen(*buf+i+2)+1); for(unsigned int i=0; i<strlen(*buf)-3; i++) { if( *(*buf+i) == '/' ) { last2slash = last1slash; last1slash = i; } if( !strncmp(*buf+i,"/../",4) ) { memmove(*buf+last2slash,*buf+i+3,strlen(*buf+i+3)+1); return simplify_path(buf); } } }