X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fplugin.C;h=dce1f5b7aaadc654b6385d406a0b6cf925893a35;hp=5890808b5617010cb93fff45858fb0e2765fcd86;hb=ddfda6a8cc59bda4dc734973c1c5fecaa31ea487;hpb=ab209efd7893132268c7dc159cd78a4574276946 diff --git a/cinelerra-5.1/cinelerra/plugin.C b/cinelerra-5.1/cinelerra/plugin.C index 5890808b..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); @@ -49,7 +48,8 @@ Plugin::Plugin(EDL *edl, Track *track, const char *title) out = 1; show = 0; on = 1; - keyframes = new KeyFrames(edl, track); + gui_id = -1; + keyframes = new KeyFrames(edl, this); keyframes->create_objects(); } @@ -57,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); @@ -66,7 +65,8 @@ Plugin::Plugin(EDL *edl, PluginSet *plugin_set, const char *title) out = 1; show = 0; on = 1; - keyframes = new KeyFrames(edl, track); + gui_id = -1; + keyframes = new KeyFrames(edl, this); keyframes->create_objects(); } @@ -130,13 +130,14 @@ 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; this->out = plugin->out; this->show = plugin->show; this->on = plugin->on; +// dont copy gui_id, it will be a duplicate ref // Should reconfigure this based on where the first track is now. this->shared_location = plugin->shared_location; strcpy(this->title, plugin->title); @@ -175,6 +176,7 @@ void Plugin::synchronize_params(Edit *edit) this->in = plugin->in; this->out = plugin->out; this->show = plugin->show; + this->gui_id = plugin->gui_id; this->on = plugin->on; strcpy(this->title, plugin->title); copy_keyframes(plugin); @@ -213,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; } @@ -295,19 +291,6 @@ int Plugin::identical(Plugin *that) ((KeyFrame*)that->keyframes->default_auto))); } -int Plugin::identical_location(Plugin *that) -{ - if(!plugin_set || !plugin_set->track) return 0; - if(!that->plugin_set || !that->plugin_set->track) return 0; - - if(plugin_set->track->number_of() == that->plugin_set->track->number_of() && - plugin_set->get_number() == that->plugin_set->get_number() && - startproject == that->startproject) return 1; - - return 0; - -} - int Plugin::keyframe_exists(KeyFrame *ptr) { for(KeyFrame *current = (KeyFrame*)keyframes->first; @@ -594,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\n", - plugin_type, title, on, shared_location.module, shared_location.plugin); + 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);