X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmodule.C;h=68d2785d5826dbbd8a1cc7e26dfb24c3b06c1564;hp=a2e17bb22f085ff2a7ebbb5cc328ad6205378ba6;hb=13a039ef755e81e65c9479b4b615fd89bfe3e038;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/module.C b/cinelerra-5.1/cinelerra/module.C index a2e17bb2..68d2785d 100644 --- a/cinelerra-5.1/cinelerra/module.C +++ b/cinelerra-5.1/cinelerra/module.C @@ -50,7 +50,7 @@ Module::Module(RenderEngine *renderengine, this->commonrender = commonrender; this->plugin_array = plugin_array; this->track = track; - transition = 0; + transition_id = -1; transition_server = 0; attachments = 0; total_attachments = 0; @@ -59,7 +59,6 @@ Module::Module(RenderEngine *renderengine, nested_edl = 0; nested_renderengine = 0; nested_command = 0; - private_cache = 0; cache = 0; } @@ -86,7 +85,6 @@ Module::~Module() delete nested_renderengine; delete nested_command; - if(private_cache) delete cache; } void Module::create_objects() @@ -272,10 +270,9 @@ int Module::test_plugins() (!attachment && use_plugin)) return 1; // Plugin not the same - if(plugin && - attachment && - attachment->plugin && - !plugin->identical(attachment->plugin)) return 1; + if( plugin && attachment && attachment->plugin && ( + plugin->gui_id != attachment->plugin->gui_id || + !plugin->identical(attachment->plugin) ) ) return 1; } return 0; @@ -284,8 +281,9 @@ int Module::test_plugins() void Module::update_transition(int64_t current_position, int direction) { - transition = track->get_current_transition(current_position, + Plugin *transition = track->get_current_transition(current_position, direction, 0, 0); + transition_id = transition ? transition->orig_id : -1; // For situations where we had a transition but not anymore, // keep the server open. @@ -296,13 +294,14 @@ void Module::update_transition(int64_t current_position, // If the current transition differs from the previous transition, delete the // server. if (transition && transition_server) { - if (strcmp(transition->title, transition_server->plugin->title)) { + Plugin *plugin = transition->edl->tracks->plugin_exists(transition_server->plugin_id); + if (!plugin || strcmp(transition->title, plugin->title)) { transition_server->close_plugin(); delete transition_server; transition_server = 0; } else { - transition_server->plugin = transition; + transition_server->plugin_id = transition_id; } } @@ -310,30 +309,25 @@ void Module::update_transition(int64_t current_position, if(renderengine) { PluginServer *plugin_server = MWindow::scan_plugindb(transition->title, track->data_type); - transition_server = new PluginServer(*plugin_server); - transition_server->open_plugin(0, - get_preferences(), - get_edl(), - transition); - transition_server->init_realtime( - get_edl()->session->real_time_playback && - renderengine->command->realtime, - 1, - get_buffer_size()); + if( plugin_server ) { + transition_server = new PluginServer(*plugin_server); + transition_server->open_plugin(0, get_preferences(), get_edl(), + transition); + transition_server->init_realtime( + get_edl()->session->real_time_playback && + renderengine->command->realtime, 1, get_buffer_size()); + } } else if(plugin_array) { PluginServer *plugin_server = MWindow::scan_plugindb(transition->title, plugin_array->data_type); - transition_server = new PluginServer(*plugin_server); - transition_server->open_plugin(0, - get_preferences(), - get_edl(), - transition); - transition_server->init_realtime( - 0, - 1, - get_buffer_size()); + if( plugin_server ) { + transition_server = new PluginServer(*plugin_server); + transition_server->open_plugin(0, get_preferences(), get_edl(), + transition); + transition_server->init_realtime( 0, 1, get_buffer_size()); + } } } }