Collection of tools useful for audio production
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

611 lines
21KB

  1. /*
  2. * Custom types to store LV2 information
  3. * Copyright (C) 2011-2012 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * 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 COPYING file
  16. */
  17. #ifndef LV2_RDF_INCLUDED
  18. #define LV2_RDF_INCLUDED
  19. // TODO - presets
  20. #include <cstdint>
  21. #include <cstdlib>
  22. // Base Types
  23. typedef float LV2_Data;
  24. typedef const char* LV2_URI;
  25. typedef uint32_t LV2_Property;
  26. typedef unsigned long long LV2_PluginType;
  27. // Port Midi Map Types
  28. #define LV2_PORT_MIDI_MAP_CC 0x1
  29. #define LV2_PORT_MIDI_MAP_NRPN 0x2
  30. #define LV2_IS_PORT_MIDI_MAP_CC(x) ((x) == LV2_PORT_MIDI_MAP_CC)
  31. #define LV2_IS_PORT_MIDI_MAP_NRPN(x) ((x) == LV2_PORT_MIDI_MAP_NRPN)
  32. // Port Point Hints
  33. #define LV2_PORT_POINT_DEFAULT 0x1
  34. #define LV2_PORT_POINT_MINIMUM 0x2
  35. #define LV2_PORT_POINT_MAXIMUM 0x4
  36. #define LV2_HAVE_DEFAULT_PORT_POINT(x) ((x) & LV2_PORT_POINT_DEFAULT)
  37. #define LV2_HAVE_MINIMUM_PORT_POINT(x) ((x) & LV2_PORT_POINT_MINIMUM)
  38. #define LV2_HAVE_MAXIMUM_PORT_POINT(x) ((x) & LV2_PORT_POINT_MAXIMUM)
  39. // Port Unit Types
  40. #define LV2_UNIT_BAR 0x01
  41. #define LV2_UNIT_BEAT 0x02
  42. #define LV2_UNIT_BPM 0x03
  43. #define LV2_UNIT_CENT 0x04
  44. #define LV2_UNIT_CM 0x05
  45. #define LV2_UNIT_COEF 0x06
  46. #define LV2_UNIT_DB 0x07
  47. #define LV2_UNIT_DEGREE 0x08
  48. #define LV2_UNIT_FRAME 0x09
  49. #define LV2_UNIT_HZ 0x0A
  50. #define LV2_UNIT_INCH 0x0B
  51. #define LV2_UNIT_KHZ 0x0C
  52. #define LV2_UNIT_KM 0x0D
  53. #define LV2_UNIT_M 0x0E
  54. #define LV2_UNIT_MHZ 0x0F
  55. #define LV2_UNIT_MIDINOTE 0x10
  56. #define LV2_UNIT_MILE 0x11
  57. #define LV2_UNIT_MIN 0x12
  58. #define LV2_UNIT_MM 0x13
  59. #define LV2_UNIT_MS 0x14
  60. #define LV2_UNIT_OCT 0x15
  61. #define LV2_UNIT_PC 0x16
  62. #define LV2_UNIT_S 0x17
  63. #define LV2_UNIT_SEMITONE 0x18
  64. #define LV2_IS_UNIT_BAR(x) ((x) == LV2_UNIT_BAR)
  65. #define LV2_IS_UNIT_BEAT(x) ((x) == LV2_UNIT_BEAT)
  66. #define LV2_IS_UNIT_BPM(x) ((x) == LV2_UNIT_BPM)
  67. #define LV2_IS_UNIT_CENT(x) ((x) == LV2_UNIT_CENT)
  68. #define LV2_IS_UNIT_CM(x) ((x) == LV2_UNIT_CM)
  69. #define LV2_IS_UNIT_COEF(x) ((x) == LV2_UNIT_COEF)
  70. #define LV2_IS_UNIT_DB(x) ((x) == LV2_UNIT_DB)
  71. #define LV2_IS_UNIT_DEGREE(x) ((x) == LV2_UNIT_DEGREE)
  72. #define LV2_IS_UNIT_FRAME(x) ((x) == LV2_UNIT_FRAME)
  73. #define LV2_IS_UNIT_HZ(x) ((x) == LV2_UNIT_HZ)
  74. #define LV2_IS_UNIT_INCH(x) ((x) == LV2_UNIT_INCH)
  75. #define LV2_IS_UNIT_KHZ(x) ((x) == LV2_UNIT_KHZ)
  76. #define LV2_IS_UNIT_KM(x) ((x) == LV2_UNIT_KM)
  77. #define LV2_IS_UNIT_M(x) ((x) == LV2_UNIT_M)
  78. #define LV2_IS_UNIT_MHZ(x) ((x) == LV2_UNIT_MHZ)
  79. #define LV2_IS_UNIT_MIDINOTE(x) ((x) == LV2_UNIT_MIDINOTE)
  80. #define LV2_IS_UNIT_MILE(x) ((x) == LV2_UNIT_MILE)
  81. #define LV2_IS_UNIT_MIN(x) ((x) == LV2_UNIT_MIN)
  82. #define LV2_IS_UNIT_MM(x) ((x) == LV2_UNIT_MM)
  83. #define LV2_IS_UNIT_MS(x) ((x) == LV2_UNIT_MS)
  84. #define LV2_IS_UNIT_OCT(x) ((x) == LV2_UNIT_OCT)
  85. #define LV2_IS_UNIT_PC(x) ((x) == LV2_UNIT_PC)
  86. #define LV2_IS_UNIT_S(x) ((x) == LV2_UNIT_S)
  87. #define LV2_IS_UNIT_SEMITONE(x) ((x) == LV2_UNIT_SEMITONE)
  88. // Port Unit Hints
  89. #define LV2_PORT_UNIT 0x1
  90. #define LV2_PORT_UNIT_NAME 0x2
  91. #define LV2_PORT_UNIT_RENDER 0x4
  92. #define LV2_PORT_UNIT_SYMBOL 0x8
  93. #define LV2_HAVE_UNIT(x) ((x) & LV2_PORT_UNIT)
  94. #define LV2_HAVE_UNIT_NAME(x) ((x) & LV2_PORT_UNIT_NAME)
  95. #define LV2_HAVE_UNIT_RENDER(x) ((x) & LV2_PORT_UNIT_RENDER)
  96. #define LV2_HAVE_UNIT_SYMBOL(x) ((x) & LV2_PORT_UNIT_SYMBOL)
  97. // Port Types
  98. #define LV2_PORT_INPUT 0x01
  99. #define LV2_PORT_OUTPUT 0x02
  100. #define LV2_PORT_CONTROL 0x04
  101. #define LV2_PORT_AUDIO 0x08
  102. #define LV2_PORT_CV 0x10
  103. #define LV2_PORT_ATOM 0x20
  104. #define LV2_PORT_ATOM_SEQUENCE (0x40 | LV2_PORT_ATOM)
  105. #define LV2_PORT_EVENT 0x80
  106. #define LV2_PORT_MIDI_LL 0x100
  107. // Port Support Types
  108. #define LV2_PORT_SUPPORTS_MIDI_EVENT 0x1000
  109. #define LV2_PORT_SUPPORTS_PATCH_MESSAGE 0x2000
  110. #define LV2_IS_PORT_INPUT(x) ((x) & LV2_PORT_INPUT)
  111. #define LV2_IS_PORT_OUTPUT(x) ((x) & LV2_PORT_OUTPUT)
  112. #define LV2_IS_PORT_CONTROL(x) ((x) & LV2_PORT_CONTROL)
  113. #define LV2_IS_PORT_AUDIO(x) ((x) & LV2_PORT_AUDIO)
  114. #define LV2_IS_PORT_ATOM_SEQUENCE(x) ((x) & LV2_PORT_ATOM_SEQUENCE)
  115. #define LV2_IS_PORT_CV(x) ((x) & LV2_PORT_CV)
  116. #define LV2_IS_PORT_EVENT(x) ((x) & LV2_PORT_EVENT)
  117. #define LV2_IS_PORT_MIDI_LL(x) ((x) & LV2_PORT_MIDI_LL)
  118. // Port Properties
  119. #define LV2_PORT_OPTIONAL 0x0001
  120. #define LV2_PORT_ENUMERATION 0x0002
  121. #define LV2_PORT_INTEGER 0x0004
  122. #define LV2_PORT_SAMPLE_RATE 0x0008
  123. #define LV2_PORT_TOGGLED 0x0010
  124. #define LV2_PORT_CAUSES_ARTIFACTS 0x0020
  125. #define LV2_PORT_CONTINUOUS_CV 0x0040
  126. #define LV2_PORT_DISCRETE_CV 0x0080
  127. #define LV2_PORT_EXPENSIVE 0x0100
  128. #define LV2_PORT_STRICT_BOUNDS 0x0200
  129. #define LV2_PORT_LOGARITHMIC 0x0400
  130. #define LV2_PORT_NOT_AUTOMATIC 0x0800
  131. #define LV2_PORT_NOT_ON_GUI 0x1000
  132. #define LV2_PORT_TRIGGER 0x2000
  133. #define LV2_IS_PORT_OPTIONAL(x) ((x) & LV2_PORT_OPTIONAL)
  134. #define LV2_IS_PORT_ENUMERATION(x) ((x) & LV2_PORT_ENUMERATION)
  135. #define LV2_IS_PORT_INTEGER(x) ((x) & LV2_PORT_INTEGER)
  136. #define LV2_IS_PORT_SAMPLE_RATE(x) ((x) & LV2_PORT_SAMPLE_RATE)
  137. #define LV2_IS_PORT_TOGGLED(x) ((x) & LV2_PORT_TOGGLED)
  138. #define LV2_IS_PORT_CAUSES_ARTIFACTS(x) ((x) & LV2_PORT_CAUSES_ARTIFACTS)
  139. #define LV2_IS_PORT_CONTINUOUS_CV(x) ((x) & LV2_PORT_CONTINUOUS_CV)
  140. #define LV2_IS_PORT_DISCRETE_CV(x) ((x) & LV2_PORT_DISCRETE_CV)
  141. #define LV2_IS_PORT_EXPENSIVE(x) ((x) & LV2_PORT_EXPENSIVE)
  142. #define LV2_IS_PORT_STRICT_BOUNDS(x) ((x) & LV2_PORT_STRICT_BOUNDS)
  143. #define LV2_IS_PORT_LOGARITHMIC(x) ((x) & LV2_PORT_LOGARITHMIC)
  144. #define LV2_IS_PORT_NOT_AUTOMATIC(x) ((x) & LV2_PORT_NOT_AUTOMATIC)
  145. #define LV2_IS_PORT_NOT_ON_GUI(x) ((x) & LV2_PORT_NOT_ON_GUI)
  146. #define LV2_IS_PORT_TRIGGER(x) ((x) & LV2_PORT_TRIGGER)
  147. // Port Designation
  148. #define LV2_PORT_DESIGNATION_FREEWHEELING 0x1
  149. #define LV2_PORT_DESIGNATION_LATENCY 0x2
  150. #define LV2_PORT_DESIGNATION_SAMPLE_RATE 0x3
  151. #define LV2_PORT_DESIGNATION_TIME_BAR 0x4
  152. #define LV2_PORT_DESIGNATION_TIME_BAR_BEAT 0x5
  153. #define LV2_PORT_DESIGNATION_TIME_BEAT 0x6
  154. #define LV2_PORT_DESIGNATION_TIME_BEAT_UNIT 0x7
  155. #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR 0x8
  156. #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE 0x9
  157. #define LV2_PORT_DESIGNATION_TIME_FRAME 0xA
  158. #define LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND 0xB
  159. #define LV2_PORT_DESIGNATION_TIME_POSITION 0xC
  160. #define LV2_PORT_DESIGNATION_TIME_SPEED 0xD
  161. #define LV2_IS_PORT_DESIGNATION_FREEWHEELING(x) ((x) == LV2_PORT_DESIGNATION_FREEWHEELING)
  162. #define LV2_IS_PORT_DESIGNATION_LATENCY(x) ((x) == LV2_PORT_DESIGNATION_LATENCY)
  163. #define LV2_IS_PORT_DESIGNATION_SAMPLE_RATE(x) ((x) == LV2_PORT_DESIGNATION_SAMPLE_RATE)
  164. #define LV2_IS_PORT_DESIGNATION_TIME_BAR(x) ((x) == LV2_PORT_DESIGNATION_TIME_BAR)
  165. #define LV2_IS_PORT_DESIGNATION_TIME_BAR_BEAT(x) ((x) == LV2_PORT_DESIGNATION_TIME_BAR_BEAT)
  166. #define LV2_IS_PORT_DESIGNATION_TIME_BEAT(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEAT)
  167. #define LV2_IS_PORT_DESIGNATION_TIME_BEAT_UNIT(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEAT_UNIT)
  168. #define LV2_IS_PORT_DESIGNATION_TIME_BEATS_PER_BAR(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR)
  169. #define LV2_IS_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE)
  170. #define LV2_IS_PORT_DESIGNATION_TIME_FRAME(x) ((x) == LV2_PORT_DESIGNATION_TIME_FRAME)
  171. #define LV2_IS_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND(x) ((x) == LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND)
  172. #define LV2_IS_PORT_DESIGNATION_TIME_POSITION(x) ((x) == LV2_PORT_DESIGNATION_TIME_POSITION)
  173. #define LV2_IS_PORT_DESIGNATION_TIME_SPEED(x) ((x) == LV2_PORT_DESIGNATION_TIME_SPEED)
  174. #define LV2_IS_PORT_DESIGNATION_TIME(x) ((x) == LV2_PORT_DESIGNATION_TIME_BAR || (x) == LV2_PORT_DESIGNATION_TIME_BAR_BEAT || \
  175. (x) == LV2_PORT_DESIGNATION_TIME_BEAT || (x) == LV2_PORT_DESIGNATION_TIME_BEAT_UNIT || \
  176. (x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR || (x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE || \
  177. (x) == LV2_PORT_DESIGNATION_TIME_FRAME || (x) == LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND || \
  178. (x) == LV2_PORT_DESIGNATION_TIME_POSITION || (x) == LV2_PORT_DESIGNATION_TIME_SPEED)
  179. // Preset State Types (TODO: Null is not a type, this is just a placeholder)
  180. #define LV2_PRESET_STATE_NULL 0x0
  181. #define LV2_IS_PRESET_STATE_NULL(x) ((x) == LV2_PRESET_STATE_NULL)
  182. // Feature Types
  183. #define LV2_FEATURE_OPTIONAL 0x1
  184. #define LV2_FEATURE_REQUIRED 0x2
  185. #define LV2_IS_FEATURE_OPTIONAL(x) ((x) == LV2_FEATURE_OPTIONAL)
  186. #define LV2_IS_FEATURE_REQUIRED(x) ((x) == LV2_FEATURE_REQUIRED)
  187. // UI Types
  188. #define LV2_UI_GTK2 0x1
  189. #define LV2_UI_GTK3 0x2
  190. #define LV2_UI_QT4 0x3
  191. #define LV2_UI_COCOA 0x4
  192. #define LV2_UI_WINDOWS 0x5
  193. #define LV2_UI_X11 0x6
  194. #define LV2_UI_EXTERNAL 0x7
  195. #define LV2_UI_OLD_EXTERNAL 0x8
  196. #define LV2_IS_UI_GTK2(x) ((x) == LV2_UI_GTK2)
  197. #define LV2_IS_UI_GTK3(x) ((x) == LV2_UI_GTK3)
  198. #define LV2_IS_UI_QT4(x) ((x) == LV2_UI_QT4)
  199. #define LV2_IS_UI_COCOA(x) ((x) == LV2_UI_COCOA)
  200. #define LV2_IS_UI_WINDOWS(x) ((x) == LV2_UI_WINDOWS)
  201. #define LV2_IS_UI_X11(x) ((x) == LV2_UI_X11)
  202. #define LV2_IS_UI_EXTERNAL(x) ((x) == LV2_UI_EXTERNAL)
  203. #define LV2_IS_UI_OLD_EXTERNAL(x) ((x) == LV2_UI_OLD_EXTERNAL)
  204. // Plugin Types
  205. #define LV2_CLASS_ALLPASS 0x000000001LL
  206. #define LV2_CLASS_AMPLIFIER 0x000000002LL
  207. #define LV2_CLASS_ANALYSER 0x000000004LL
  208. #define LV2_CLASS_BANDPASS 0x000000008LL
  209. #define LV2_CLASS_CHORUS 0x000000010LL
  210. #define LV2_CLASS_COMB 0x000000020LL
  211. #define LV2_CLASS_COMPRESSOR 0x000000040LL
  212. #define LV2_CLASS_CONSTANT 0x000000080LL
  213. #define LV2_CLASS_CONVERTER 0x000000100LL
  214. #define LV2_CLASS_DELAY 0x000000200LL
  215. #define LV2_CLASS_DISTORTION 0x000000400LL
  216. #define LV2_CLASS_DYNAMICS 0x000000800LL
  217. #define LV2_CLASS_EQ 0x000001000LL
  218. #define LV2_CLASS_EXPANDER 0x000002000LL
  219. #define LV2_CLASS_FILTER 0x000004000LL
  220. #define LV2_CLASS_FLANGER 0x000008000LL
  221. #define LV2_CLASS_FUNCTION 0x000010000LL
  222. #define LV2_CLASS_GATE 0x000020000LL
  223. #define LV2_CLASS_GENERATOR 0x000040000LL
  224. #define LV2_CLASS_HIGHPASS 0x000080000LL
  225. #define LV2_CLASS_INSTRUMENT 0x000100000LL
  226. #define LV2_CLASS_LIMITER 0x000200000LL
  227. #define LV2_CLASS_LOWPASS 0x000400000LL
  228. #define LV2_CLASS_MIXER 0x000800000LL
  229. #define LV2_CLASS_MODULATOR 0x001000000LL
  230. #define LV2_CLASS_MULTI_EQ 0x002000000LL
  231. #define LV2_CLASS_OSCILLATOR 0x004000000LL
  232. #define LV2_CLASS_PARA_EQ 0x008000000LL
  233. #define LV2_CLASS_PHASER 0x010000000LL
  234. #define LV2_CLASS_PITCH 0x020000000LL
  235. #define LV2_CLASS_REVERB 0x040000000LL
  236. #define LV2_CLASS_SIMULATOR 0x080000000LL
  237. #define LV2_CLASS_SPATIAL 0x100000000LL
  238. #define LV2_CLASS_SPECTRAL 0x200000000LL
  239. #define LV2_CLASS_UTILITY 0x400000000LL
  240. #define LV2_CLASS_WAVESHAPER 0x800000000LL
  241. #define LV2_GROUP_DELAY (LV2_CLASS_DELAY|LV2_CLASS_REVERB)
  242. #define LV2_GROUP_DISTORTION (LV2_CLASS_DISTORTION|LV2_CLASS_WAVESHAPER)
  243. #define LV2_GROUP_DYNAMICS (LV2_CLASS_DYNAMICS|LV2_CLASS_AMPLIFIER|LV2_CLASS_COMPRESSOR|LV2_CLASS_EXPANDER|LV2_CLASS_GATE|LV2_CLASS_LIMITER)
  244. #define LV2_GROUP_EQ (LV2_CLASS_EQ|LV2_CLASS_PARA_EQ|LV2_CLASS_MULTI_EQ)
  245. #define LV2_GROUP_FILTER (LV2_CLASS_FILTER|LV2_CLASS_ALLPASS|LV2_CLASS_BANDPASS|LV2_CLASS_COMB|LV2_GROUP_EQ|LV2_CLASS_HIGHPASS|LV2_CLASS_LOWPASS)
  246. #define LV2_GROUP_GENERATOR (LV2_CLASS_GENERATOR|LV2_CLASS_CONSTANT|LV2_CLASS_INSTRUMENT|LV2_CLASS_OSCILLATOR)
  247. #define LV2_GROUP_MODULATOR (LV2_CLASS_MODULATOR|LV2_CLASS_CHORUS|LV2_CLASS_FLANGER|LV2_CLASS_PHASER)
  248. #define LV2_GROUP_REVERB (LV2_CLASS_REVERB)
  249. #define LV2_GROUP_SIMULATOR (LV2_CLASS_SIMULATOR|LV2_CLASS_REVERB)
  250. #define LV2_GROUP_SPATIAL (LV2_CLASS_SPATIAL)
  251. #define LV2_GROUP_SPECTRAL (LV2_CLASS_SPECTRAL|LV2_CLASS_PITCH)
  252. #define LV2_GROUP_UTILITY (LV2_CLASS_UTILITY|LV2_CLASS_ANALYSER|LV2_CLASS_CONVERTER|LV2_CLASS_FUNCTION|LV2_CLASS_MIXER)
  253. #define LV2_IS_DELAY(x) ((x) & LV2_GROUP_DELAY)
  254. #define LV2_IS_DISTORTION(x) ((x) & LV2_GROUP_DISTORTION)
  255. #define LV2_IS_DYNAMICS(x) ((x) & LV2_GROUP_DYNAMICS)
  256. #define LV2_IS_EQ(x) ((x) & LV2_GROUP_EQ)
  257. #define LV2_IS_FILTER(x) ((x) & LV2_GROUP_FILTER)
  258. #define LV2_IS_GENERATOR(x) ((x) & LV2_GROUP_GENERATOR)
  259. #define LV2_IS_MODULATOR(x) ((x) & LV2_GROUP_MODULATOR)
  260. #define LV2_IS_REVERB(x) ((x) & LV2_GROUP_REVERB)
  261. #define LV2_IS_SIMULATOR(x) ((x) & LV2_GROUP_SIMULATOR)
  262. #define LV2_IS_SPATIAL(x) ((x) & LV2_GROUP_SPATIAL)
  263. #define LV2_IS_SPECTRAL(x) ((x) & LV2_GROUP_SPECTRAL)
  264. #define LV2_IS_UTILITY(x) ((x) & LV2_GROUP_UTILITY)
  265. // Port Midi Map
  266. struct LV2_RDF_PortMidiMap {
  267. LV2_Property Type;
  268. uint32_t Number;
  269. LV2_RDF_PortMidiMap()
  270. : Type(0),
  271. Number(0) {}
  272. };
  273. // Port Points
  274. struct LV2_RDF_PortPoints {
  275. LV2_Property Hints;
  276. LV2_Data Default;
  277. LV2_Data Minimum;
  278. LV2_Data Maximum;
  279. LV2_RDF_PortPoints()
  280. : Hints(0x0),
  281. Default(0.0f),
  282. Minimum(0.0f),
  283. Maximum(1.0f) {}
  284. };
  285. // Port Unit
  286. struct LV2_RDF_PortUnit {
  287. LV2_Property Type;
  288. LV2_Property Hints;
  289. const char* Name;
  290. const char* Render;
  291. const char* Symbol;
  292. LV2_RDF_PortUnit()
  293. : Type(0),
  294. Hints(0x0),
  295. Name(nullptr),
  296. Render(nullptr),
  297. Symbol(nullptr) {}
  298. ~LV2_RDF_PortUnit()
  299. {
  300. if (Name)
  301. ::free((void*)Name);
  302. if (Render)
  303. ::free((void*)Render);
  304. if (Symbol)
  305. ::free((void*)Symbol);
  306. }
  307. };
  308. // Port Scale Point
  309. struct LV2_RDF_PortScalePoint {
  310. const char* Label;
  311. LV2_Data Value;
  312. LV2_RDF_PortScalePoint()
  313. : Label(nullptr),
  314. Value(0.0f) {}
  315. ~LV2_RDF_PortScalePoint()
  316. {
  317. if (Label)
  318. ::free((void*)Label);
  319. }
  320. };
  321. // Port
  322. struct LV2_RDF_Port {
  323. LV2_Property Type;
  324. LV2_Property Properties;
  325. LV2_Property Designation;
  326. const char* Name;
  327. const char* Symbol;
  328. LV2_RDF_PortMidiMap MidiMap;
  329. LV2_RDF_PortPoints Points;
  330. LV2_RDF_PortUnit Unit;
  331. uint32_t ScalePointCount;
  332. LV2_RDF_PortScalePoint* ScalePoints;
  333. LV2_RDF_Port()
  334. : Type(0x0),
  335. Properties(0x0),
  336. Designation(0),
  337. Name(nullptr),
  338. Symbol(nullptr),
  339. ScalePointCount(0),
  340. ScalePoints(nullptr) {}
  341. ~LV2_RDF_Port()
  342. {
  343. if (Name)
  344. ::free((void*)Name);
  345. if (Symbol)
  346. ::free((void*)Symbol);
  347. if (ScalePoints)
  348. delete[] ScalePoints;
  349. }
  350. };
  351. // Preset Port
  352. struct LV2_RDF_PresetPort {
  353. const char* Symbol;
  354. LV2_Data Value;
  355. LV2_RDF_PresetPort()
  356. : Symbol(nullptr),
  357. Value(0.0f) {}
  358. ~LV2_RDF_PresetPort()
  359. {
  360. if (Symbol)
  361. ::free((void*)Symbol);
  362. }
  363. };
  364. // Preset State
  365. struct LV2_RDF_PresetState {
  366. LV2_Property Type;
  367. const char* Key;
  368. union {
  369. // TODO
  370. } Value;
  371. LV2_RDF_PresetState()
  372. : Type(0),
  373. Key(nullptr) {}
  374. ~LV2_RDF_PresetState()
  375. {
  376. if (Key)
  377. ::free((void*)Key);
  378. }
  379. };
  380. // Preset
  381. struct LV2_RDF_Preset {
  382. LV2_URI URI;
  383. const char* Label;
  384. uint32_t PortCount;
  385. LV2_RDF_PresetPort* Ports;
  386. uint32_t StateCount;
  387. LV2_RDF_PresetState* States;
  388. LV2_RDF_Preset()
  389. : URI(nullptr),
  390. Label(nullptr),
  391. PortCount(0),
  392. Ports(nullptr),
  393. StateCount(0),
  394. States(nullptr) {}
  395. ~LV2_RDF_Preset()
  396. {
  397. if (URI)
  398. ::free((void*)URI);
  399. if (Label)
  400. ::free((void*)Label);
  401. if (Ports)
  402. delete[] Ports;
  403. if (States)
  404. delete[] States;
  405. }
  406. };
  407. // Feature
  408. struct LV2_RDF_Feature {
  409. LV2_Property Type;
  410. LV2_URI URI;
  411. LV2_RDF_Feature()
  412. : Type(0),
  413. URI(nullptr) {}
  414. ~LV2_RDF_Feature()
  415. {
  416. if (URI)
  417. ::free((void*)URI);
  418. }
  419. };
  420. // UI
  421. struct LV2_RDF_UI {
  422. LV2_Property Type;
  423. LV2_URI URI;
  424. const char* Binary;
  425. const char* Bundle;
  426. uint32_t FeatureCount;
  427. LV2_RDF_Feature* Features;
  428. uint32_t ExtensionCount;
  429. LV2_URI* Extensions;
  430. LV2_RDF_UI()
  431. : Type(0),
  432. URI(nullptr),
  433. Binary(nullptr),
  434. Bundle(nullptr),
  435. FeatureCount(0),
  436. Features(nullptr),
  437. ExtensionCount(0),
  438. Extensions(nullptr) {}
  439. ~LV2_RDF_UI()
  440. {
  441. if (URI)
  442. ::free((void*)URI);
  443. if (Binary)
  444. ::free((void*)Binary);
  445. if (Bundle)
  446. ::free((void*)Bundle);
  447. if (Features)
  448. delete[] Features;
  449. if (Extensions)
  450. delete[] Extensions;
  451. }
  452. };
  453. // Plugin
  454. struct LV2_RDF_Descriptor {
  455. LV2_PluginType Type;
  456. LV2_URI URI;
  457. const char* Name;
  458. const char* Author;
  459. const char* License;
  460. const char* Binary;
  461. const char* Bundle;
  462. unsigned long UniqueID;
  463. uint32_t PortCount;
  464. LV2_RDF_Port* Ports;
  465. uint32_t PresetCount;
  466. LV2_RDF_Preset* Presets;
  467. uint32_t FeatureCount;
  468. LV2_RDF_Feature* Features;
  469. uint32_t ExtensionCount;
  470. LV2_URI* Extensions;
  471. uint32_t UICount;
  472. LV2_RDF_UI* UIs;
  473. LV2_RDF_Descriptor()
  474. : Type(0x0),
  475. URI(nullptr),
  476. Name(nullptr),
  477. Author(nullptr),
  478. License(nullptr),
  479. Binary(nullptr),
  480. Bundle(nullptr),
  481. UniqueID(0),
  482. PortCount(0),
  483. Ports(nullptr),
  484. PresetCount(0),
  485. Presets(nullptr),
  486. FeatureCount(0),
  487. Features(nullptr),
  488. ExtensionCount(0),
  489. Extensions(nullptr),
  490. UICount(0),
  491. UIs(nullptr) {}
  492. ~LV2_RDF_Descriptor()
  493. {
  494. if (URI)
  495. ::free((void*)URI);
  496. if (Name)
  497. ::free((void*)Name);
  498. if (Author)
  499. ::free((void*)Author);
  500. if (License)
  501. ::free((void*)License);
  502. if (Binary)
  503. ::free((void*)Binary);
  504. if (Bundle)
  505. ::free((void*)Bundle);
  506. if (Ports)
  507. delete[] Ports;
  508. if (Presets)
  509. delete[] Presets;
  510. if (Features)
  511. delete[] Features;
  512. if (Extensions)
  513. delete[] Extensions;
  514. if (UIs)
  515. delete[] UIs;
  516. }
  517. };
  518. #endif // LV2_RDF_INCLUDED