X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindow.C;h=0334fd0229b6a4d3c8fad1512a0536e09407170b;hb=9d5997d77ab7736be577456d8fd3dda0ba522d39;hp=6e1ecaa912d094629747dbd28d3c122f03237679;hpb=e9a3c57c8d3bb4d79e76a4c3942f86a66d3c267e;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 6e1ecaa9..0334fd02 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -297,6 +297,9 @@ MWindow::~MWindow() #endif reset_caches(); dead_plugins->remove_all_objects(); +// must delete theme before destroying plugindb +// theme destructor will be deleted by delete_plugins + delete theme; theme = 0; delete_plugins(); finit_error(); keyframe_threads->remove_all_objects(); @@ -325,7 +328,6 @@ MWindow::~MWindow() delete defaults; defaults = 0; delete assets; assets = 0; delete splash_window; splash_window = 0; -// delete theme; theme = 0; // deleted by delete_plugins if( !edl->Garbage::remove_user() ) edl = 0; delete channeldb_buz; delete channeldb_v4l2jpeg; @@ -733,14 +735,14 @@ void MWindow::add_plugins(ArrayList &plugins) plugins.remove_all(); } -void MWindow::init_plugin_tips(ArrayList &plugins) +void MWindow::init_plugin_tips(ArrayList &plugins, const char *lang) { const char *cfg_path = File::get_cindat_path(); char msg_path[BCTEXTLEN]; int txt = 0; FILE *fp = 0; if( BC_Resources::language[0] ) { snprintf(msg_path, sizeof(msg_path), "%s/info/plugins.%s", - cfg_path, BC_Resources::language); + cfg_path, lang); fp = fopen(msg_path, "r"); } if( !fp ) { @@ -2007,7 +2009,7 @@ void MWindow::create_objects(int want_gui, if(debug) PRINT_TRACE init_ladspa_plugins(this, preferences); if(debug) PRINT_TRACE - init_plugin_tips(*plugindb); + init_plugin_tips(*plugindb, cin_lang); if(splash_window) splash_window->operation->update(_("Initializing GUI")); if(debug) PRINT_TRACE @@ -3613,7 +3615,8 @@ int MWindow::select_asset(Asset *asset, int vstream, int astream, int delete_tra int result = file->open_file(preferences, asset, 1, 0); if( !result && delete_tracks > 0 ) undo->update_undo_before(); - if( !result && asset->video_data && asset->get_video_layers() > 0 ) { + int video_layers = asset->get_video_layers(); + if( !result && asset->video_data && vstream < video_layers ) { // try to get asset up to date, may fail file->select_video_stream(asset, vstream); // either way use what was/is there. @@ -3669,7 +3672,7 @@ int MWindow::select_asset(Asset *asset, int vstream, int astream, int delete_tra if( !result && asset->audio_data && asset->channels > 0 ) { session->sample_rate = asset->get_sample_rate(); int64_t channel_mask = 0; - int astrm = !asset->video_data ? -1 : + int astrm = !asset->video_data || vstream >= video_layers ? -1 : file->get_audio_for_video(vstream, astream, channel_mask); if( astrm >= 0 ) file->select_audio_stream(asset, astrm); if( astrm < 0 || !channel_mask ) channel_mask = (1<channels)-1;