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);
out = 1;
show = 0;
on = 1;
- keyframes = new KeyFrames(edl, track);
+ gui_id = -1;
+ keyframes = new KeyFrames(edl, this);
keyframes->create_objects();
}
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);
out = 1;
show = 0;
on = 1;
- keyframes = new KeyFrames(edl, track);
+ gui_id = -1;
+ keyframes = new KeyFrames(edl, this);
keyframes->create_objects();
}
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);
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);
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;
}
((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;
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);