X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fplugin.C;h=dce1f5b7aaadc654b6385d406a0b6cf925893a35;hb=83b70dd60863377cb281e6be5206304e10373e30;hp=d28087b838a86b838165bfb316dc79cf678b0448;hpb=53f919f88484c8611457fbcd552f6931218cc219;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/plugin.C b/cinelerra-5.1/cinelerra/plugin.C index d28087b8..dce1f5b7 100644 --- a/cinelerra-5.1/cinelerra/plugin.C +++ b/cinelerra-5.1/cinelerra/plugin.C @@ -40,7 +40,6 @@ Plugin::Plugin(EDL *edl, Track *track, const char *title) : Edit(edl, track) { - is_plugin = 1; this->track = track; this->plugin_set = 0; strcpy(this->title, title); @@ -50,7 +49,7 @@ Plugin::Plugin(EDL *edl, Track *track, const char *title) show = 0; on = 1; gui_id = -1; - keyframes = new KeyFrames(edl, track); + keyframes = new KeyFrames(edl, this); keyframes->create_objects(); } @@ -58,7 +57,6 @@ Plugin::Plugin(EDL *edl, Track *track, const char *title) Plugin::Plugin(EDL *edl, PluginSet *plugin_set, const char *title) : Edit(edl, plugin_set) { - is_plugin = 1; this->track = plugin_set->track; this->plugin_set = plugin_set; strcpy(this->title, title); @@ -68,7 +66,7 @@ Plugin::Plugin(EDL *edl, PluginSet *plugin_set, const char *title) show = 0; on = 1; gui_id = -1; - keyframes = new KeyFrames(edl, track); + keyframes = new KeyFrames(edl, this); keyframes->create_objects(); } @@ -132,7 +130,7 @@ void Plugin::copy_base(Edit *edit) this->startsource = edit->startsource; this->startproject = edit->startproject; this->length = edit->length; - + this->orig_id = edit->orig_id; this->plugin_type = plugin->plugin_type; this->in = plugin->in; @@ -217,56 +215,50 @@ void Plugin::equivalent_output(Edit *edit, int64_t *result) keyframes->equivalent_output(plugin->keyframes, startproject, result); } - - -int Plugin::is_synthesis(int64_t position, - int direction) +const char* Plugin::type_to_text(int type) { - switch(plugin_type) - { - case PLUGIN_STANDALONE: - { - if(!track) - { - printf("Plugin::is_synthesis track not defined\n"); - return 0; - } - + switch( type ) { + case PLUGIN_STANDALONE: return _("standalone"); + case PLUGIN_SHAREDPLUGIN: return _("shared plugin"); + case PLUGIN_SHAREDMODULE: return _("shared module"); + } + return _("none"); +} - PluginServer *plugin_server = MWindow::scan_plugindb(title, - track->data_type); -//printf("Plugin::is_synthesis %d %p %d\n", __LINE__, plugin_server, plugin_server->get_synthesis()); -//plugin_server->dump(); - return plugin_server->get_synthesis(); - break; +int Plugin::is_synthesis(int64_t position, int direction, int depth) +{ + if( depth > 255 ) { + printf("Plugin::is_synthesis %d: depth range limit, type=%s, title=%s\n", + __LINE__, type_to_text(plugin_type), title); + return 0; + } + switch( plugin_type ) { + case PLUGIN_STANDALONE: { + if( !track ) { + printf("Plugin::is_synthesis track not defined\n"); + return 0; } + PluginServer *plugin_server = MWindow::scan_plugindb(title, track->data_type); + return plugin_server->get_synthesis(); } // Dereference real plugin and descend another level - case PLUGIN_SHAREDPLUGIN: - { - int real_module_number = shared_location.module; - int real_plugin_number = shared_location.plugin; - Track *track = edl->tracks->number(real_module_number); + case PLUGIN_SHAREDPLUGIN: { + int real_module_number = shared_location.module; + int real_plugin_number = shared_location.plugin; + Track *track = edl->tracks->number(real_module_number); // Get shared plugin from master track - Plugin *plugin = track->get_current_plugin(position, - real_plugin_number, - direction, - 0, - 0); - - if(plugin) - return plugin->is_synthesis(position, direction); - break; - } + Plugin *plugin = track->get_current_plugin(position, + real_plugin_number, direction, 0, 0); + + if(plugin) + return plugin->is_synthesis(position, direction, depth+1); + break; } // Dereference the real track and descend - case PLUGIN_SHAREDMODULE: - { - int real_module_number = shared_location.module; - Track *track = edl->tracks->number(real_module_number); - return track->is_synthesis(position, direction); - break; - } + case PLUGIN_SHAREDMODULE: { + int real_module_number = shared_location.module; + Track *track = edl->tracks->number(real_module_number); + return track->is_synthesis(position, direction, depth+1); } } return 0; } @@ -585,8 +577,8 @@ void Plugin::shift(int64_t difference) void Plugin::dump(FILE *fp) { - fprintf(fp," PLUGIN: type=%d title=\"%s\" on=%d track=%d plugin=%d gui_id=%d\n", - plugin_type, title, on, shared_location.module, shared_location.plugin, gui_id); + fprintf(fp," PLUGIN: type=%d, id %d, orig_id %d, title=\"%s\" on=%d track=%d plugin=%d gui_id=%d\n", + plugin_type, id, orig_id, title, on, shared_location.module, shared_location.plugin, gui_id); fprintf(fp," startproject %jd length %jd\n", startproject, length); keyframes->dump(fp);