1 /* 2 * Custom types to store LADSPA-RDF information 3 * Copyright (C) 2011-2014 Filipe Coelho <falktx@falktx.com> 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation; either version 2 of 8 * the License, or any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * For a full copy of the GNU General Public License see the doc/GPL.txt file. 16 */ 17 18 #ifndef LADSPA_RDF_HPP_INCLUDED 19 #define LADSPA_RDF_HPP_INCLUDED 20 21 #include "CarlaDefines.h" 22 #include "ladspa/ladspa.h" 23 24 // Base Types 25 typedef int LADSPA_RDF_Property; 26 typedef unsigned long long LADSPA_RDF_PluginType; 27 28 // Unit Types 29 #define LADSPA_RDF_UNIT_DB 0x01 30 #define LADSPA_RDF_UNIT_COEF 0x02 31 #define LADSPA_RDF_UNIT_HZ 0x04 32 #define LADSPA_RDF_UNIT_S 0x08 33 #define LADSPA_RDF_UNIT_MS 0x10 34 #define LADSPA_RDF_UNIT_MIN 0x20 35 36 #define LADSPA_RDF_UNIT_CLASS_AMPLITUDE (LADSPA_RDF_UNIT_DB|LADSPA_RDF_UNIT_COEF) 37 #define LADSPA_RDF_UNIT_CLASS_FREQUENCY (LADSPA_RDF_UNIT_HZ) 38 #define LADSPA_RDF_UNIT_CLASS_TIME (LADSPA_RDF_UNIT_S|LADSPA_RDF_UNIT_MS|LADSPA_RDF_UNIT_MIN) 39 40 #define LADSPA_RDF_IS_UNIT_DB(x) ((x) == LADSPA_RDF_UNIT_DB) 41 #define LADSPA_RDF_IS_UNIT_COEF(x) ((x) == LADSPA_RDF_UNIT_COEF) 42 #define LADSPA_RDF_IS_UNIT_HZ(x) ((x) == LADSPA_RDF_UNIT_HZ) 43 #define LADSPA_RDF_IS_UNIT_S(x) ((x) == LADSPA_RDF_UNIT_S) 44 #define LADSPA_RDF_IS_UNIT_MS(x) ((x) == LADSPA_RDF_UNIT_MS) 45 #define LADSPA_RDF_IS_UNIT_MIN(x) ((x) == LADSPA_RDF_UNIT_MIN) 46 47 #define LADSPA_RDF_IS_UNIT_CLASS_AMPLITUDE(x) ((x) & LADSPA_RDF_UNIT_CLASS_AMPLITUDE) 48 #define LADSPA_RDF_IS_UNIT_CLASS_FREQUENCY(x) ((x) & LADSPA_RDF_UNIT_CLASS_FREQUENCY) 49 #define LADSPA_RDF_IS_UNIT_CLASS_TIME(x) ((x) & LADSPA_RDF_UNIT_CLASS_TIME) 50 51 // Port Hints 52 #define LADSPA_RDF_PORT_UNIT 0x1 53 #define LADSPA_RDF_PORT_DEFAULT 0x2 54 #define LADSPA_RDF_PORT_LABEL 0x4 55 56 #define LADSPA_RDF_PORT_HAS_UNIT(x) ((x) & LADSPA_RDF_PORT_UNIT) 57 #define LADSPA_RDF_PORT_HAS_DEFAULT(x) ((x) & LADSPA_RDF_PORT_DEFAULT) 58 #define LADSPA_RDF_PORT_HAS_LABEL(x) ((x) & LADSPA_RDF_PORT_LABEL) 59 60 // Plugin Types 61 #define LADSPA_RDF_PLUGIN_UTILITY 0x000000001LL 62 #define LADSPA_RDF_PLUGIN_GENERATOR 0x000000002LL 63 #define LADSPA_RDF_PLUGIN_SIMULATOR 0x000000004LL 64 #define LADSPA_RDF_PLUGIN_OSCILLATOR 0x000000008LL 65 #define LADSPA_RDF_PLUGIN_TIME 0x000000010LL 66 #define LADSPA_RDF_PLUGIN_DELAY 0x000000020LL 67 #define LADSPA_RDF_PLUGIN_PHASER 0x000000040LL 68 #define LADSPA_RDF_PLUGIN_FLANGER 0x000000080LL 69 #define LADSPA_RDF_PLUGIN_CHORUS 0x000000100LL 70 #define LADSPA_RDF_PLUGIN_REVERB 0x000000200LL 71 #define LADSPA_RDF_PLUGIN_FREQUENCY 0x000000400LL 72 #define LADSPA_RDF_PLUGIN_FREQUENCY_METER 0x000000800LL 73 #define LADSPA_RDF_PLUGIN_FILTER 0x000001000LL 74 #define LADSPA_RDF_PLUGIN_LOWPASS 0x000002000LL 75 #define LADSPA_RDF_PLUGIN_HIGHPASS 0x000004000LL 76 #define LADSPA_RDF_PLUGIN_BANDPASS 0x000008000LL 77 #define LADSPA_RDF_PLUGIN_COMB 0x000010000LL 78 #define LADSPA_RDF_PLUGIN_ALLPASS 0x000020000LL 79 #define LADSPA_RDF_PLUGIN_EQ 0x000040000LL 80 #define LADSPA_RDF_PLUGIN_PARAEQ 0x000080000LL 81 #define LADSPA_RDF_PLUGIN_MULTIEQ 0x000100000LL 82 #define LADSPA_RDF_PLUGIN_AMPLITUDE 0x000200000LL 83 #define LADSPA_RDF_PLUGIN_PITCH 0x000400000LL 84 #define LADSPA_RDF_PLUGIN_AMPLIFIER 0x000800000LL 85 #define LADSPA_RDF_PLUGIN_WAVESHAPER 0x001000000LL 86 #define LADSPA_RDF_PLUGIN_MODULATOR 0x002000000LL 87 #define LADSPA_RDF_PLUGIN_DISTORTION 0x004000000LL 88 #define LADSPA_RDF_PLUGIN_DYNAMICS 0x008000000LL 89 #define LADSPA_RDF_PLUGIN_COMPRESSOR 0x010000000LL 90 #define LADSPA_RDF_PLUGIN_EXPANDER 0x020000000LL 91 #define LADSPA_RDF_PLUGIN_LIMITER 0x040000000LL 92 #define LADSPA_RDF_PLUGIN_GATE 0x080000000LL 93 #define LADSPA_RDF_PLUGIN_SPECTRAL 0x100000000LL 94 #define LADSPA_RDF_PLUGIN_NOTCH 0x200000000LL 95 96 #define LADSPA_RDF_GROUP_DYNAMICS (LADSPA_RDF_PLUGIN_DYNAMICS|LADSPA_RDF_PLUGIN_COMPRESSOR|LADSPA_RDF_PLUGIN_EXPANDER|LADSPA_RDF_PLUGIN_LIMITER|LADSPA_RDF_PLUGIN_GATE) 97 #define LADSPA_RDF_GROUP_AMPLITUDE (LADSPA_RDF_PLUGIN_AMPLITUDE|LADSPA_RDF_PLUGIN_AMPLIFIER|LADSPA_RDF_PLUGIN_WAVESHAPER|LADSPA_RDF_PLUGIN_MODULATOR|LADSPA_RDF_PLUGIN_DISTORTION|LADSPA_RDF_GROUP_DYNAMICS) 98 #define LADSPA_RDF_GROUP_EQ (LADSPA_RDF_PLUGIN_EQ|LADSPA_RDF_PLUGIN_PARAEQ|LADSPA_RDF_PLUGIN_MULTIEQ) 99 #define LADSPA_RDF_GROUP_FILTER (LADSPA_RDF_PLUGIN_FILTER|LADSPA_RDF_PLUGIN_LOWPASS|LADSPA_RDF_PLUGIN_HIGHPASS|LADSPA_RDF_PLUGIN_BANDPASS|LADSPA_RDF_PLUGIN_COMB|LADSPA_RDF_PLUGIN_ALLPASS|LADSPA_RDF_PLUGIN_NOTCH) 100 #define LADSPA_RDF_GROUP_FREQUENCY (LADSPA_RDF_PLUGIN_FREQUENCY|LADSPA_RDF_PLUGIN_FREQUENCY_METER|LADSPA_RDF_GROUP_FILTER|LADSPA_RDF_GROUP_EQ|LADSPA_RDF_PLUGIN_PITCH) 101 #define LADSPA_RDF_GROUP_SIMULATOR (LADSPA_RDF_PLUGIN_SIMULATOR|LADSPA_RDF_PLUGIN_REVERB) 102 #define LADSPA_RDF_GROUP_TIME (LADSPA_RDF_PLUGIN_TIME|LADSPA_RDF_PLUGIN_DELAY|LADSPA_RDF_PLUGIN_PHASER|LADSPA_RDF_PLUGIN_FLANGER|LADSPA_RDF_PLUGIN_CHORUS|LADSPA_RDF_PLUGIN_REVERB) 103 #define LADSPA_RDF_GROUP_GENERATOR (LADSPA_RDF_PLUGIN_GENERATOR|LADSPA_RDF_PLUGIN_OSCILLATOR) 104 105 #define LADSPA_RDF_IS_PLUGIN_DYNAMICS(x) ((x) & LADSPA_RDF_GROUP_DYNAMICS) 106 #define LADSPA_RDF_IS_PLUGIN_AMPLITUDE(x) ((x) & LADSPA_RDF_GROUP_AMPLITUDE) 107 #define LADSPA_RDF_IS_PLUGIN_EQ(x) ((x) & LADSPA_RDF_GROUP_EQ) 108 #define LADSPA_RDF_IS_PLUGIN_FILTER(x) ((x) & LADSPA_RDF_GROUP_FILTER) 109 #define LADSPA_RDF_IS_PLUGIN_FREQUENCY(x) ((x) & LADSPA_RDF_GROUP_FREQUENCY) 110 #define LADSPA_RDF_IS_PLUGIN_SIMULATOR(x) ((x) & LADSPA_RDF_GROUP_SIMULATOR) 111 #define LADSPA_RDF_IS_PLUGIN_TIME(x) ((x) & LADSPA_RDF_GROUP_TIME) 112 #define LADSPA_RDF_IS_PLUGIN_GENERATOR(x) ((x) & LADSPA_RDF_GROUP_GENERATOR) 113 114 // Scale Point 115 struct LADSPA_RDF_ScalePoint { 116 LADSPA_Data Value; 117 const char* Label; 118 LADSPA_RDF_ScalePointLADSPA_RDF_ScalePoint119 LADSPA_RDF_ScalePoint() noexcept 120 : Value(0.0f), 121 Label(nullptr) {} 122 ~LADSPA_RDF_ScalePointLADSPA_RDF_ScalePoint123 ~LADSPA_RDF_ScalePoint() noexcept 124 { 125 if (Label != nullptr) 126 { 127 delete[] Label; 128 Label = nullptr; 129 } 130 } 131 132 CARLA_DECLARE_NON_COPY_STRUCT(LADSPA_RDF_ScalePoint) 133 }; 134 135 // Port 136 struct LADSPA_RDF_Port { 137 LADSPA_RDF_Property Type; 138 LADSPA_RDF_Property Hints; 139 const char* Label; 140 LADSPA_Data Default; 141 LADSPA_RDF_Property Unit; 142 143 unsigned long ScalePointCount; 144 LADSPA_RDF_ScalePoint* ScalePoints; 145 LADSPA_RDF_PortLADSPA_RDF_Port146 LADSPA_RDF_Port() noexcept 147 : Type(0x0), 148 Hints(0x0), 149 Label(nullptr), 150 Default(0.0f), 151 Unit(0), 152 ScalePointCount(0), 153 ScalePoints(nullptr) {} 154 ~LADSPA_RDF_PortLADSPA_RDF_Port155 ~LADSPA_RDF_Port() noexcept 156 { 157 if (Label != nullptr) 158 { 159 delete[] Label; 160 Label = nullptr; 161 } 162 if (ScalePoints != nullptr) 163 { 164 delete[] ScalePoints; 165 ScalePoints = nullptr; 166 } 167 } 168 169 CARLA_DECLARE_NON_COPY_STRUCT(LADSPA_RDF_Port) 170 }; 171 172 // Plugin Descriptor 173 struct LADSPA_RDF_Descriptor { 174 LADSPA_RDF_PluginType Type; 175 unsigned long UniqueID; 176 const char* Title; 177 const char* Creator; 178 179 unsigned long PortCount; 180 LADSPA_RDF_Port* Ports; 181 LADSPA_RDF_DescriptorLADSPA_RDF_Descriptor182 LADSPA_RDF_Descriptor() noexcept 183 : Type(0x0), 184 UniqueID(0), 185 Title(nullptr), 186 Creator(nullptr), 187 PortCount(0), 188 Ports(nullptr) {} 189 ~LADSPA_RDF_DescriptorLADSPA_RDF_Descriptor190 ~LADSPA_RDF_Descriptor() noexcept 191 { 192 if (Title != nullptr) 193 { 194 delete[] Title; 195 Title = nullptr; 196 } 197 if (Creator != nullptr) 198 { 199 delete[] Creator; 200 Creator = nullptr; 201 } 202 if (Ports != nullptr) 203 { 204 delete[] Ports; 205 Ports = nullptr; 206 } 207 } 208 209 CARLA_DECLARE_NON_COPY_STRUCT(LADSPA_RDF_Descriptor) 210 }; 211 212 #endif // LADSPA_RDF_HPP_INCLUDED 213