detect missing transitions, dont draw transitions if show off, obey audio transition...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / module.C
index 3c21504e6a7e30471c91866bd50774cd447d6f60..68d2785d5826dbbd8a1cc7e26dfb24c3b06c1564 100644 (file)
@@ -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()
@@ -283,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.
@@ -295,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;
                }
        }
 
@@ -309,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());
+                       }
                }
        }
 }