Fix build with gcc 4.7
[cadence.git] / src / carla / ladspa_rdf.h
blobd02459a22990f46ad2385aaa98898842266a44f9
1 /* Custom types to store LADSPA RDF information */
3 #ifndef LADSPA_RDF_INCLUDED
4 #define LADSPA_RDF_INCLUDED
6 // Base Types
7 typedef float LADSPA_Data;
8 typedef int LADSPA_Property;
9 typedef unsigned long long LADSPA_PluginType;
11 // Unit Types
12 #define LADSPA_UNIT_DB 0x01
13 #define LADSPA_UNIT_COEF 0x02
14 #define LADSPA_UNIT_HZ 0x04
15 #define LADSPA_UNIT_S 0x08
16 #define LADSPA_UNIT_MS 0x10
17 #define LADSPA_UNIT_MIN 0x20
19 #define LADSPA_UNIT_CLASS_AMPLITUDE (LADSPA_UNIT_DB|LADSPA_UNIT_COEF)
20 #define LADSPA_UNIT_CLASS_FREQUENCY (LADSPA_UNIT_HZ)
21 #define LADSPA_UNIT_CLASS_TIME (LADSPA_UNIT_S|LADSPA_UNIT_MS|LADSPA_UNIT_MIN)
23 #define LADSPA_IS_UNIT_DB(x) ((x) == LADSPA_UNIT_DB)
24 #define LADSPA_IS_UNIT_COEF(x) ((x) == LADSPA_UNIT_COEF)
25 #define LADSPA_IS_UNIT_HZ(x) ((x) == LADSPA_UNIT_HZ)
26 #define LADSPA_IS_UNIT_S(x) ((x) == LADSPA_UNIT_S)
27 #define LADSPA_IS_UNIT_MS(x) ((x) == LADSPA_UNIT_MS)
28 #define LADSPA_IS_UNIT_MIN(x) ((x) == LADSPA_UNIT_MIN)
30 #define LADSPA_IS_UNIT_CLASS_AMPLITUDE(x) ((x) & LADSPA_UNIT_CLASS_AMPLITUDE)
31 #define LADSPA_IS_UNIT_CLASS_FREQUENCY(x) ((x) & LADSPA_UNIT_CLASS_FREQUENCY)
32 #define LADSPA_IS_UNIT_CLASS_TIME(x) ((x) & LADSPA_UNIT_CLASS_TIME)
34 // Port Types (Official API)
35 #define LADSPA_PORT_INPUT 0x1
36 #define LADSPA_PORT_OUTPUT 0x2
37 #define LADSPA_PORT_CONTROL 0x4
38 #define LADSPA_PORT_AUDIO 0x8
40 // Port Hints
41 #define LADSPA_PORT_UNIT 0x1
42 #define LADSPA_PORT_DEFAULT 0x2
43 #define LADSPA_PORT_LABEL 0x4
45 #define LADSPA_PORT_HAS_UNIT(x) ((x) & LADSPA_PORT_UNIT)
46 #define LADSPA_PORT_HAS_DEFAULT(x) ((x) & LADSPA_PORT_DEFAULT)
47 #define LADSPA_PORT_HAS_LABEL(x) ((x) & LADSPA_PORT_LABEL)
49 // Plugin Types
50 #define LADSPA_CLASS_UTILITY 0x000000001
51 #define LADSPA_CLASS_GENERATOR 0x000000002
52 #define LADSPA_CLASS_SIMULATOR 0x000000004
53 #define LADSPA_CLASS_OSCILLATOR 0x000000008
54 #define LADSPA_CLASS_TIME 0x000000010
55 #define LADSPA_CLASS_DELAY 0x000000020
56 #define LADSPA_CLASS_PHASER 0x000000040
57 #define LADSPA_CLASS_FLANGER 0x000000080
58 #define LADSPA_CLASS_CHORUS 0x000000100
59 #define LADSPA_CLASS_REVERB 0x000000200
60 #define LADSPA_CLASS_FREQUENCY 0x000000400
61 #define LADSPA_CLASS_FREQUENCY_METER 0x000000800
62 #define LADSPA_CLASS_FILTER 0x000001000
63 #define LADSPA_CLASS_LOWPASS 0x000002000
64 #define LADSPA_CLASS_HIGHPASS 0x000004000
65 #define LADSPA_CLASS_BANDPASS 0x000008000
66 #define LADSPA_CLASS_COMB 0x000010000
67 #define LADSPA_CLASS_ALLPASS 0x000020000
68 #define LADSPA_CLASS_EQ 0x000040000
69 #define LADSPA_CLASS_PARAEQ 0x000080000
70 #define LADSPA_CLASS_MULTIEQ 0x000100000
71 #define LADSPA_CLASS_AMPLITUDE 0x000200000
72 #define LADSPA_CLASS_PITCH 0x000400000
73 #define LADSPA_CLASS_AMPLIFIER 0x000800000
74 #define LADSPA_CLASS_WAVESHAPER 0x001000000
75 #define LADSPA_CLASS_MODULATOR 0x002000000
76 #define LADSPA_CLASS_DISTORTION 0x004000000
77 #define LADSPA_CLASS_DYNAMICS 0x008000000
78 #define LADSPA_CLASS_COMPRESSOR 0x010000000
79 #define LADSPA_CLASS_EXPANDER 0x020000000
80 #define LADSPA_CLASS_LIMITER 0x040000000
81 #define LADSPA_CLASS_GATE 0x080000000
82 #define LADSPA_CLASS_SPECTRAL 0x100000000LL
83 #define LADSPA_CLASS_NOTCH 0x200000000LL
85 #define LADSPA_GROUP_DYNAMICS (LADSPA_CLASS_DYNAMICS|LADSPA_CLASS_COMPRESSOR|LADSPA_CLASS_EXPANDER|LADSPA_CLASS_LIMITER|LADSPA_CLASS_GATE)
86 #define LADSPA_GROUP_AMPLITUDE (LADSPA_CLASS_AMPLITUDE|LADSPA_CLASS_AMPLIFIER|LADSPA_CLASS_WAVESHAPER|LADSPA_CLASS_MODULATOR|LADSPA_CLASS_DISTORTION|LADSPA_GROUP_DYNAMICS)
87 #define LADSPA_GROUP_EQ (LADSPA_CLASS_EQ|LADSPA_CLASS_PARAEQ|LADSPA_CLASS_MULTIEQ)
88 #define LADSPA_GROUP_FILTER (LADSPA_CLASS_FILTER|LADSPA_CLASS_LOWPASS|LADSPA_CLASS_HIGHPASS|LADSPA_CLASS_BANDPASS|LADSPA_CLASS_COMB|LADSPA_CLASS_ALLPASS|LADSPA_CLASS_NOTCH)
89 #define LADSPA_GROUP_FREQUENCY (LADSPA_CLASS_FREQUENCY|LADSPA_CLASS_FREQUENCY_METER|LADSPA_GROUP_FILTER|LADSPA_GROUP_EQ|LADSPA_CLASS_PITCH)
90 #define LADSPA_GROUP_SIMULATOR (LADSPA_CLASS_SIMULATOR|LADSPA_CLASS_REVERB)
91 #define LADSPA_GROUP_TIME (LADSPA_CLASS_TIME|LADSPA_CLASS_DELAY|LADSPA_CLASS_PHASER|LADSPA_CLASS_FLANGER|LADSPA_CLASS_CHORUS|LADSPA_CLASS_REVERB)
92 #define LADSPA_GROUP_GENERATOR (LADSPA_CLASS_GENERATOR|LADSPA_CLASS_OSCILLATOR)
94 #define LADSPA_IS_PLUGIN_DYNAMICS(x) ((x) & LADSPA_GROUP_DYNAMICS)
95 #define LADSPA_IS_PLUGIN_AMPLITUDE(x) ((x) & LADSPA_GROUP_AMPLITUDE)
96 #define LADSPA_IS_PLUGIN_EQ(x) ((x) & LADSPA_GROUP_EQ)
97 #define LADSPA_IS_PLUGIN_FILTER(x) ((x) & LADSPA_GROUP_FILTER)
98 #define LADSPA_IS_PLUGIN_FREQUENCY(x) ((x) & LADSPA_GROUP_FREQUENCY)
99 #define LADSPA_IS_PLUGIN_SIMULATOR(x) ((x) & LADSPA_GROUP_SIMULATOR)
100 #define LADSPA_IS_PLUGIN_TIME(x) ((x) & LADSPA_GROUP_TIME)
101 #define LADSPA_IS_PLUGIN_GENERATOR(x) ((x) & LADSPA_GROUP_GENERATOR)
103 // Plugin Hints
104 #define LADSPA_PLUGIN_CREATOR 0x1
105 #define LADSPA_PLUGIN_TITLE 0x2
106 #define LADSPA_PLUGIN_RIGHTS 0x4
108 #define LADSPA_PLUGIN_HAS_CREATOR(x) ((x) & LADSPA_PLUGIN_CREATOR)
109 #define LADSPA_PLUGIN_HAS_TITLE(x) ((x) & LADSPA_PLUGIN_TITLE)
110 #define LADSPA_PLUGIN_HAS_RIGHTS(x) ((x) & LADSPA_PLUGIN_RIGHTS)
112 // A Scale Point
113 struct LADSPA_RDF_ScalePoint {
114 LADSPA_Data Value;
115 const char* Label;
118 // A Port
119 struct LADSPA_RDF_Port {
120 LADSPA_Property Type;
121 LADSPA_Property Hints;
122 LADSPA_Property Unit;
123 LADSPA_Data Default;
124 const char* Label;
126 unsigned long ScalePointCount;
127 LADSPA_RDF_ScalePoint* ScalePoints;
130 // The actual plugin descriptor
131 struct LADSPA_RDF_Descriptor {
132 LADSPA_PluginType Type;
133 LADSPA_Property Hints;
134 unsigned long UniqueID;
135 const char* Creator;
136 const char* Title;
137 const char* Rights;
139 unsigned long PortCount;
140 LADSPA_RDF_Port* Ports;
144 // Copy RDF object
145 inline const LADSPA_RDF_Descriptor* ladspa_rdf_dup(LADSPA_RDF_Descriptor* rdf_descriptor)
147 unsigned long i, j;
148 LADSPA_RDF_Descriptor* new_descriptor = new LADSPA_RDF_Descriptor;
150 new_descriptor->Type = rdf_descriptor->Type;
151 new_descriptor->Hints = rdf_descriptor->Hints;
152 new_descriptor->UniqueID = rdf_descriptor->UniqueID;
153 new_descriptor->PortCount = rdf_descriptor->PortCount;
155 new_descriptor->Creator = strdup(rdf_descriptor->Creator);
156 new_descriptor->Title = strdup(rdf_descriptor->Title);
157 new_descriptor->Rights = strdup(rdf_descriptor->Rights);
159 if (new_descriptor->PortCount > 0)
161 new_descriptor->Ports = new LADSPA_RDF_Port[new_descriptor->PortCount];
163 for (i=0; i < new_descriptor->PortCount; i++)
165 LADSPA_RDF_Port* Port = &new_descriptor->Ports[i];
166 Port->Type = rdf_descriptor->Ports[i].Type;
167 Port->Hints = rdf_descriptor->Ports[i].Hints;
168 Port->Unit = rdf_descriptor->Ports[i].Unit;
169 Port->Default = rdf_descriptor->Ports[i].Default;
170 Port->ScalePointCount = rdf_descriptor->Ports[i].ScalePointCount;
172 Port->Label = strdup(rdf_descriptor->Ports[i].Label);
174 if (Port->ScalePointCount > 0)
176 Port->ScalePoints = new LADSPA_RDF_ScalePoint[Port->ScalePointCount];
178 for (j=0; j < Port->ScalePointCount; j++)
180 Port->ScalePoints[j].Value = rdf_descriptor->Ports[i].ScalePoints[j].Value;
181 Port->ScalePoints[j].Label = strdup(rdf_descriptor->Ports[i].ScalePoints[j].Label);
184 else
185 Port->ScalePoints = nullptr;
188 else
189 new_descriptor->Ports = nullptr;
191 return new_descriptor;
194 // Delete copied object
195 inline void ladspa_rdf_free(const LADSPA_RDF_Descriptor* rdf_descriptor)
197 unsigned long i, j;
199 free((void*)rdf_descriptor->Creator);
200 free((void*)rdf_descriptor->Title);
201 free((void*)rdf_descriptor->Rights);
203 if (rdf_descriptor->PortCount > 0)
205 for (i=0; i < rdf_descriptor->PortCount; i++)
207 LADSPA_RDF_Port* Port = &rdf_descriptor->Ports[i];
208 free((void*)Port->Label);
210 if (Port->ScalePointCount > 0)
212 for (j=0; j < Port->ScalePointCount; j++)
213 free((void*)Port->ScalePoints[j].Label);
215 delete[] Port->ScalePoints;
218 delete[] rdf_descriptor->Ports;
220 delete rdf_descriptor;
223 #endif // LADSPA_RDF_INCLUDED