new/reworked audio plugins ported from hv72 compressor/multi/reverb, glyph workaround...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / attachmentpoint.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifndef ATTACHMENTPOINT_H
23 #define ATTACHMENTPOINT_H
24
25 #include <stdio.h>
26 #include <stdint.h>
27
28 #include "arraylist.h"
29 #include "filexml.inc"
30 #include "floatauto.inc"
31 #include "floatautos.inc"
32 #include "mwindow.inc"
33 #include "messages.inc"
34 #include "plugin.inc"
35 #include "pluginclient.inc"
36 #include "pluginserver.inc"
37 #include "renderengine.inc"
38 #include "sharedlocation.h"
39 #include "vframe.inc"
40 #include "virtualnode.inc"
41
42 // Attachment points for Modules to attach plugins
43 class AttachmentPoint
44 {
45 public:
46         AttachmentPoint(RenderEngine *renderengine,
47                 Plugin *plugin,
48                 int data_type);
49         virtual ~AttachmentPoint();
50
51         virtual int reset_parameters();
52 // Used by Module::swap_attachments before virtual console expansion.
53 // Return 1 if the plugin id is the same
54         int identical(AttachmentPoint *old);
55
56 // Move new_virtual_plugins to virtual_plugins.
57 // Called after virtual console expansion.
58         int render_init();
59
60 // Cause plugins to free any resources which are required after stopping
61         void render_stop();
62
63 // Called before every buffer processing
64         void reset_status();
65
66 // Attach a virtual plugin for realtime playback.  Returns the number
67 // of the buffer assigned to a multichannel plugin.
68         int attach_virtual_plugin(VirtualNode *virtual_plugin);
69         virtual void delete_buffer_vector() {};
70
71 // Called by plugin server to render GUI with data.
72         void reset_gui_frames(PluginServer *server);
73         void render_gui_frames(PluginClientFrames *frames, PluginServer *server);
74         void render_gui(void *data, PluginServer *server);
75         void render_gui(void *data, int size, PluginServer *server);
76         int gui_open();
77         virtual int get_buffer_size() { return 0; };
78
79 // For unshared plugins, virtual plugins to send configuration events to and
80 // read data from.
81 // For shared plugins, virtual plugins to allocate buffers for and read
82 // data from.
83         ArrayList<VirtualNode*> virtual_plugins;
84
85 // List for a new virtual console which is transferred to virtual_plugins after
86 // virtual console expansion.
87         ArrayList<VirtualNode*> new_virtual_plugins;
88
89 // Plugin servers to do signal processing
90         ArrayList<PluginServer*> plugin_servers;
91
92 // renderengine Plugindb entry
93         PluginServer *plugin_server;
94 // Pointer to the plugin object in EDL
95         Plugin *plugin;
96 // ID of plugin object in EDL
97         int plugin_id;
98         RenderEngine *renderengine;
99 // Current input buffer being loaded.  Determines when the plugin server is run
100 //      int current_buffer;
101
102 // Status of last buffer processed.
103 // Used in shared multichannel plugin to tell of it's already been processed
104 // or needs to be processed again for a different target.
105 // start_position is the end of the range if playing in reverse.
106         int64_t start_position;
107         int64_t len;
108         int64_t sample_rate;
109         double frame_rate;
110         int is_processed;
111         int data_type;
112
113         int multichannel_shared(int search_new);
114         int singlechannel();
115
116         int dump(FILE *fp=stdout);
117 };
118
119 #endif