compressors: added mkup_gain reset, fixed smooth_only
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / mwindow.C
index 89d188debcece611b4a3d8a4a017e665aa97d324..d932f67975b964e973649297ba46f0c0988f7ea3 100644 (file)
@@ -3446,6 +3446,20 @@ void MWindow::update_plugin_guis(int do_keyframe_guis)
        if(do_keyframe_guis) update_keyframe_guis();
 }
 
+void MWindow::stop_plugin_guis()
+{
+// Send new configuration to plugin GUI's
+       plugin_gui_lock->lock("MWindow::stop_plugin_guis");
+
+       for( int i=0; i<plugin_guis->size(); ++i ) {
+               PluginServer *ptr = plugin_guis->get(i);
+               if( edl->tracks->plugin_exists(ptr->plugin) ) {
+                       ptr->render_stop();
+               }
+       }
+       plugin_gui_lock->unlock(); 
+}
+
 int MWindow::plugin_gui_open(Plugin *plugin)
 {
        int gui_id = plugin->gui_id;
@@ -3457,11 +3471,12 @@ int MWindow::plugin_gui_open(Plugin *plugin)
        return result;
 }
 
+
 void MWindow::render_plugin_gui(void *data, Plugin *plugin)
 {
        int gui_id = plugin->gui_id;
        if( gui_id < 0 ) return;
-       plugin_gui_lock->lock("MWindow::render_plugin_gui");
+       plugin_gui_lock->lock("MWindow::render_plugin_gui 0");
        PluginServer *plugin_server = plugin_guis->gui_server(gui_id);
        if( plugin_server )
                plugin_server->render_gui(data);
@@ -3472,13 +3487,44 @@ void MWindow::render_plugin_gui(void *data, int size, Plugin *plugin)
 {
        int gui_id = plugin->gui_id;
        if( gui_id < 0 ) return;
-       plugin_gui_lock->lock("MWindow::render_plugin_gui");
+       plugin_gui_lock->lock("MWindow::render_plugin_gui 1");
        PluginServer *plugin_server = plugin_guis->gui_server(gui_id);
        if( plugin_server )
                plugin_server->render_gui(data, size);
        plugin_gui_lock->unlock();
 }
 
+void MWindow::reset_plugin_gui_frames(Plugin *plugin)
+{
+       int gui_id = plugin->gui_id;
+       if( gui_id < 0 ) return;
+       plugin_gui_lock->lock("MWindow::reset_plugin_gui_frames");
+       PluginServer *plugin_server = plugin_guis->gui_server(gui_id);
+       if( plugin_server )
+               plugin_server->reset_plugin_gui_frames();
+       plugin_gui_lock->unlock();
+}
+
+void MWindow::render_plugin_gui_frames(PluginClientFrames *frames, Plugin *plugin)
+{
+       int gui_id = plugin->gui_id;
+       if( gui_id < 0 ) return;
+       plugin_gui_lock->lock("MWindow::render_plugin_gui_frames");
+       PluginServer *plugin_server = plugin_guis->gui_server(gui_id);
+       if( plugin_server )
+               plugin_server->render_plugin_gui_frames(frames);
+       plugin_gui_lock->unlock();
+}
+
+double MWindow::get_tracking_position()
+{
+       return edl->local_session->get_selectionstart(1);
+}
+
+int MWindow::get_tracking_direction()
+{
+       return cwindow->playback_engine->get_direction();
+}
 
 void MWindow::update_plugin_states()
 {
@@ -3688,6 +3734,26 @@ void MWindow::update_project(int load_mode)
        if(debug) PRINT_TRACE
 }
 
+void MWindow::update_preferences(Preferences *prefs)
+{
+       if( prefs != preferences )
+               preferences->copy_from(prefs);
+       if( cwindow->playback_engine )
+               cwindow->playback_engine->preferences->copy_from(prefs);
+       for(int i = 0; i < vwindows.size(); i++) {
+               VWindow *vwindow = vwindows[i];
+               if( !vwindow->is_running() ) continue;
+               if( vwindow->playback_engine )
+                       vwindow->playback_engine->preferences->copy_from(prefs);
+       }
+       for(int i = 0; i < zwindows.size(); i++) {
+               ZWindow *zwindow = zwindows[i];
+               if( !zwindow->is_running() ) continue;
+               if( zwindow->zgui->playback_engine )
+                       zwindow->zgui->playback_engine->preferences->copy_from(prefs);
+       }
+}
+
 void MWindow::update_vwindow()
 {
        for( int i=0; i<vwindows.size(); ++i ) {
@@ -3718,8 +3784,9 @@ void MWindow::rebuild_indices()
 //printf("MWindow::rebuild_indices 1 %s\n", indexable->path);
                remove_indexfile(indexable);
 // Schedule index build
-               IndexState *index_state = indexable->index_state;
-               index_state->index_status = INDEX_NOTTESTED;
+               indexable->index_state->remove_user();
+               indexable->index_state = new IndexState;
+               IndexFile::delete_index_files(preferences, indexable);
                if( indexable->is_asset ) {
                        Asset *asset = (Asset *)indexable;
                        if( asset->format != FILE_PCM ) {
@@ -3733,6 +3800,9 @@ void MWindow::rebuild_indices()
                }
                mainindexes->add_next_asset(0, indexable);
        }
+// still in render engine
+       sync_parameters(CHANGE_ALL);
+       awindow->gui->async_update_assets();
        mainindexes->start_build();
 }
 
@@ -4078,9 +4148,16 @@ void MWindow::remove_asset_from_caches(Asset *asset)
                if( vwindow->playback_engine->video_cache )
                        vwindow->playback_engine->video_cache->delete_entry(asset);
        }
+       for(int i = 0; i < zwindows.size(); i++) {
+               ZWindow *zwindow = zwindows[i];
+               if( !zwindow->is_running() ) continue;
+               if( zwindow->zgui->playback_engine->audio_cache )
+                       zwindow->zgui->playback_engine->audio_cache->delete_entry(asset);
+               if( zwindow->zgui->playback_engine->video_cache )
+                       zwindow->zgui->playback_engine->video_cache->delete_entry(asset);
+       }
 }
 
-
 void MWindow::remove_assets_from_project(int push_undo, int redraw, int delete_indexes,
                ArrayList<Indexable*> *drag_assets, ArrayList<EDL*> *drag_clips)
 {