Audio plugin host https://kx.studio/carla
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.

lv2_rdf.hpp 22KB

11 years ago
11 years ago
11 years ago
11 years ago
10 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
10 years ago
11 years ago
10 years ago
10 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. /*
  2. * Custom types to store LV2 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. #ifndef LV2_RDF_HPP_INCLUDED
  18. #define LV2_RDF_HPP_INCLUDED
  19. #include "CarlaDefines.h"
  20. #ifdef CARLA_PROPER_CPP11_SUPPORT
  21. # include <cstdint>
  22. #else
  23. # include <stdint.h>
  24. #endif
  25. // Base Types
  26. typedef const char* LV2_URI;
  27. typedef uint32_t LV2_Property;
  28. // Port Midi Map Types
  29. #define LV2_PORT_MIDI_MAP_CC 1
  30. #define LV2_PORT_MIDI_MAP_NRPN 2
  31. #define LV2_IS_PORT_MIDI_MAP_CC(x) ((x) == LV2_PORT_MIDI_MAP_CC)
  32. #define LV2_IS_PORT_MIDI_MAP_NRPN(x) ((x) == LV2_PORT_MIDI_MAP_NRPN)
  33. // Port Point Hints
  34. #define LV2_PORT_POINT_DEFAULT 0x1
  35. #define LV2_PORT_POINT_MINIMUM 0x2
  36. #define LV2_PORT_POINT_MAXIMUM 0x4
  37. #define LV2_HAVE_DEFAULT_PORT_POINT(x) ((x) & LV2_PORT_POINT_DEFAULT)
  38. #define LV2_HAVE_MINIMUM_PORT_POINT(x) ((x) & LV2_PORT_POINT_MINIMUM)
  39. #define LV2_HAVE_MAXIMUM_PORT_POINT(x) ((x) & LV2_PORT_POINT_MAXIMUM)
  40. // Port Unit Hints
  41. #define LV2_PORT_UNIT_NAME 0x1
  42. #define LV2_PORT_UNIT_RENDER 0x2
  43. #define LV2_PORT_UNIT_SYMBOL 0x4
  44. #define LV2_PORT_UNIT_UNIT 0x8
  45. #define LV2_HAVE_PORT_UNIT_NAME(x) ((x) & LV2_PORT_UNIT_NAME)
  46. #define LV2_HAVE_PORT_UNIT_RENDER(x) ((x) & LV2_PORT_UNIT_RENDER)
  47. #define LV2_HAVE_PORT_UNIT_SYMBOL(x) ((x) & LV2_PORT_UNIT_SYMBOL)
  48. #define LV2_HAVE_PORT_UNIT_UNIT(x) ((x) & LV2_PORT_UNIT_UNIT)
  49. // Port Unit Unit
  50. #define LV2_PORT_UNIT_BAR 1
  51. #define LV2_PORT_UNIT_BEAT 2
  52. #define LV2_PORT_UNIT_BPM 3
  53. #define LV2_PORT_UNIT_CENT 4
  54. #define LV2_PORT_UNIT_CM 5
  55. #define LV2_PORT_UNIT_COEF 6
  56. #define LV2_PORT_UNIT_DB 7
  57. #define LV2_PORT_UNIT_DEGREE 8
  58. #define LV2_PORT_UNIT_FRAME 9
  59. #define LV2_PORT_UNIT_HZ 10
  60. #define LV2_PORT_UNIT_INCH 11
  61. #define LV2_PORT_UNIT_KHZ 12
  62. #define LV2_PORT_UNIT_KM 13
  63. #define LV2_PORT_UNIT_M 14
  64. #define LV2_PORT_UNIT_MHZ 15
  65. #define LV2_PORT_UNIT_MIDINOTE 16
  66. #define LV2_PORT_UNIT_MILE 17
  67. #define LV2_PORT_UNIT_MIN 18
  68. #define LV2_PORT_UNIT_MM 19
  69. #define LV2_PORT_UNIT_MS 20
  70. #define LV2_PORT_UNIT_OCT 21
  71. #define LV2_PORT_UNIT_PC 22
  72. #define LV2_PORT_UNIT_S 23
  73. #define LV2_PORT_UNIT_SEMITONE 24
  74. #define LV2_IS_PORT_UNIT_BAR(x) ((x) == LV2_PORT_UNIT_BAR)
  75. #define LV2_IS_PORT_UNIT_BEAT(x) ((x) == LV2_PORT_UNIT_BEAT)
  76. #define LV2_IS_PORT_UNIT_BPM(x) ((x) == LV2_PORT_UNIT_BPM)
  77. #define LV2_IS_PORT_UNIT_CENT(x) ((x) == LV2_PORT_UNIT_CENT)
  78. #define LV2_IS_PORT_UNIT_CM(x) ((x) == LV2_PORT_UNIT_CM)
  79. #define LV2_IS_PORT_UNIT_COEF(x) ((x) == LV2_PORT_UNIT_COEF)
  80. #define LV2_IS_PORT_UNIT_DB(x) ((x) == LV2_PORT_UNIT_DB)
  81. #define LV2_IS_PORT_UNIT_DEGREE(x) ((x) == LV2_PORT_UNIT_DEGREE)
  82. #define LV2_IS_PORT_UNIT_FRAME(x) ((x) == LV2_PORT_UNIT_FRAME)
  83. #define LV2_IS_PORT_UNIT_HZ(x) ((x) == LV2_PORT_UNIT_HZ)
  84. #define LV2_IS_PORT_UNIT_INCH(x) ((x) == LV2_PORT_UNIT_INCH)
  85. #define LV2_IS_PORT_UNIT_KHZ(x) ((x) == LV2_PORT_UNIT_KHZ)
  86. #define LV2_IS_PORT_UNIT_KM(x) ((x) == LV2_PORT_UNIT_KM)
  87. #define LV2_IS_PORT_UNIT_M(x) ((x) == LV2_PORT_UNIT_M)
  88. #define LV2_IS_PORT_UNIT_MHZ(x) ((x) == LV2_PORT_UNIT_MHZ)
  89. #define LV2_IS_PORT_UNIT_MIDINOTE(x) ((x) == LV2_PORT_UNIT_MIDINOTE)
  90. #define LV2_IS_PORT_UNIT_MILE(x) ((x) == LV2_PORT_UNIT_MILE)
  91. #define LV2_IS_PORT_UNIT_MIN(x) ((x) == LV2_PORT_UNIT_MIN)
  92. #define LV2_IS_PORT_UNIT_MM(x) ((x) == LV2_PORT_UNIT_MM)
  93. #define LV2_IS_PORT_UNIT_MS(x) ((x) == LV2_PORT_UNIT_MS)
  94. #define LV2_IS_PORT_UNIT_OCT(x) ((x) == LV2_PORT_UNIT_OCT)
  95. #define LV2_IS_PORT_UNIT_PC(x) ((x) == LV2_PORT_UNIT_PC)
  96. #define LV2_IS_PORT_UNIT_S(x) ((x) == LV2_PORT_UNIT_S)
  97. #define LV2_IS_PORT_UNIT_SEMITONE(x) ((x) == LV2_PORT_UNIT_SEMITONE)
  98. // Port Types
  99. #define LV2_PORT_INPUT 0x001
  100. #define LV2_PORT_OUTPUT 0x002
  101. #define LV2_PORT_CONTROL 0x004
  102. #define LV2_PORT_AUDIO 0x008
  103. #define LV2_PORT_CV 0x010
  104. #define LV2_PORT_ATOM 0x020
  105. #define LV2_PORT_ATOM_SEQUENCE (0x040 | LV2_PORT_ATOM)
  106. #define LV2_PORT_EVENT 0x080
  107. #define LV2_PORT_MIDI_LL 0x100
  108. // Port Data Types
  109. #define LV2_PORT_DATA_MIDI_EVENT 0x1000
  110. #define LV2_PORT_DATA_OSC_EVENT 0x2000
  111. #define LV2_PORT_DATA_PATCH_MESSAGE 0x4000
  112. #define LV2_PORT_DATA_TIME_POSITION 0x8000
  113. #define LV2_IS_PORT_INPUT(x) ((x) & LV2_PORT_INPUT)
  114. #define LV2_IS_PORT_OUTPUT(x) ((x) & LV2_PORT_OUTPUT)
  115. #define LV2_IS_PORT_CONTROL(x) ((x) & LV2_PORT_CONTROL)
  116. #define LV2_IS_PORT_AUDIO(x) ((x) & LV2_PORT_AUDIO)
  117. #define LV2_IS_PORT_CV(x) ((x) & LV2_PORT_CV)
  118. #define LV2_IS_PORT_ATOM_SEQUENCE(x) ((x) & LV2_PORT_ATOM_SEQUENCE)
  119. #define LV2_IS_PORT_EVENT(x) ((x) & LV2_PORT_EVENT)
  120. #define LV2_IS_PORT_MIDI_LL(x) ((x) & LV2_PORT_MIDI_LL)
  121. #define LV2_PORT_SUPPORTS_MIDI_EVENT(x) ((x) & LV2_PORT_DATA_MIDI_EVENT)
  122. #define LV2_PORT_SUPPORTS_OSC_EVENT(x) ((x) & LV2_PORT_DATA_OSC_EVENT)
  123. #define LV2_PORT_SUPPORTS_PATCH_MESSAGE(x) ((x) & LV2_PORT_DATA_PATCH_MESSAGE)
  124. #define LV2_PORT_SUPPORTS_TIME_POSITION(x) ((x) & LV2_PORT_DATA_TIME_POSITION)
  125. // Port Properties
  126. #define LV2_PORT_OPTIONAL 0x0001
  127. #define LV2_PORT_ENUMERATION 0x0002
  128. #define LV2_PORT_INTEGER 0x0004
  129. #define LV2_PORT_SAMPLE_RATE 0x0008
  130. #define LV2_PORT_TOGGLED 0x0010
  131. #define LV2_PORT_CAUSES_ARTIFACTS 0x0020
  132. #define LV2_PORT_CONTINUOUS_CV 0x0040
  133. #define LV2_PORT_DISCRETE_CV 0x0080
  134. #define LV2_PORT_EXPENSIVE 0x0100
  135. #define LV2_PORT_STRICT_BOUNDS 0x0200
  136. #define LV2_PORT_LOGARITHMIC 0x0400
  137. #define LV2_PORT_NOT_AUTOMATIC 0x0800
  138. #define LV2_PORT_NOT_ON_GUI 0x1000
  139. #define LV2_PORT_TRIGGER 0x2000
  140. #define LV2_PORT_NON_AUTOMABLE 0x4000
  141. #define LV2_IS_PORT_OPTIONAL(x) ((x) & LV2_PORT_OPTIONAL)
  142. #define LV2_IS_PORT_ENUMERATION(x) ((x) & LV2_PORT_ENUMERATION)
  143. #define LV2_IS_PORT_INTEGER(x) ((x) & LV2_PORT_INTEGER)
  144. #define LV2_IS_PORT_SAMPLE_RATE(x) ((x) & LV2_PORT_SAMPLE_RATE)
  145. #define LV2_IS_PORT_TOGGLED(x) ((x) & LV2_PORT_TOGGLED)
  146. #define LV2_IS_PORT_CAUSES_ARTIFACTS(x) ((x) & LV2_PORT_CAUSES_ARTIFACTS)
  147. #define LV2_IS_PORT_CONTINUOUS_CV(x) ((x) & LV2_PORT_CONTINUOUS_CV)
  148. #define LV2_IS_PORT_DISCRETE_CV(x) ((x) & LV2_PORT_DISCRETE_CV)
  149. #define LV2_IS_PORT_EXPENSIVE(x) ((x) & LV2_PORT_EXPENSIVE)
  150. #define LV2_IS_PORT_STRICT_BOUNDS(x) ((x) & LV2_PORT_STRICT_BOUNDS)
  151. #define LV2_IS_PORT_LOGARITHMIC(x) ((x) & LV2_PORT_LOGARITHMIC)
  152. #define LV2_IS_PORT_NOT_AUTOMATIC(x) ((x) & LV2_PORT_NOT_AUTOMATIC)
  153. #define LV2_IS_PORT_NOT_ON_GUI(x) ((x) & LV2_PORT_NOT_ON_GUI)
  154. #define LV2_IS_PORT_TRIGGER(x) ((x) & LV2_PORT_TRIGGER)
  155. #define LV2_IS_PORT_NON_AUTOMABLE(x) ((x) & LV2_PORT_NON_AUTOMABLE)
  156. // Port Designation
  157. #define LV2_PORT_DESIGNATION_CONTROL 1
  158. #define LV2_PORT_DESIGNATION_FREEWHEELING 2
  159. #define LV2_PORT_DESIGNATION_LATENCY 3
  160. #define LV2_PORT_DESIGNATION_SAMPLE_RATE 4
  161. #define LV2_PORT_DESIGNATION_TIME_BAR 5
  162. #define LV2_PORT_DESIGNATION_TIME_BAR_BEAT 6
  163. #define LV2_PORT_DESIGNATION_TIME_BEAT 7
  164. #define LV2_PORT_DESIGNATION_TIME_BEAT_UNIT 8
  165. #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR 9
  166. #define LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE 10
  167. #define LV2_PORT_DESIGNATION_TIME_FRAME 11
  168. #define LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND 12
  169. #define LV2_PORT_DESIGNATION_TIME_SPEED 13
  170. #define LV2_PORT_DESIGNATION_TIME_TICKS_PER_BEAT 14
  171. #define LV2_IS_PORT_DESIGNATION_CONTROL(x) ((x) == LV2_PORT_DESIGNATION_CONTROL)
  172. #define LV2_IS_PORT_DESIGNATION_FREEWHEELING(x) ((x) == LV2_PORT_DESIGNATION_FREEWHEELING)
  173. #define LV2_IS_PORT_DESIGNATION_LATENCY(x) ((x) == LV2_PORT_DESIGNATION_LATENCY)
  174. #define LV2_IS_PORT_DESIGNATION_SAMPLE_RATE(x) ((x) == LV2_PORT_DESIGNATION_SAMPLE_RATE)
  175. #define LV2_IS_PORT_DESIGNATION_TIME_BAR(x) ((x) == LV2_PORT_DESIGNATION_TIME_BAR)
  176. #define LV2_IS_PORT_DESIGNATION_TIME_BAR_BEAT(x) ((x) == LV2_PORT_DESIGNATION_TIME_BAR_BEAT)
  177. #define LV2_IS_PORT_DESIGNATION_TIME_BEAT(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEAT)
  178. #define LV2_IS_PORT_DESIGNATION_TIME_BEAT_UNIT(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEAT_UNIT)
  179. #define LV2_IS_PORT_DESIGNATION_TIME_BEATS_PER_BAR(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_BAR)
  180. #define LV2_IS_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE(x) ((x) == LV2_PORT_DESIGNATION_TIME_BEATS_PER_MINUTE)
  181. #define LV2_IS_PORT_DESIGNATION_TIME_FRAME(x) ((x) == LV2_PORT_DESIGNATION_TIME_FRAME)
  182. #define LV2_IS_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND(x) ((x) == LV2_PORT_DESIGNATION_TIME_FRAMES_PER_SECOND)
  183. #define LV2_IS_PORT_DESIGNATION_TIME_SPEED(x) ((x) == LV2_PORT_DESIGNATION_TIME_SPEED)
  184. #define LV2_IS_PORT_DESIGNATION_TIME_TICKS_PER_BEAT(x) ((x) == LV2_PORT_DESIGNATION_TIME_TICKS_PER_BEAT)
  185. #define LV2_IS_PORT_DESIGNATION_TIME(x) ((x) >= LV2_PORT_DESIGNATION_TIME_BAR && (x) <= LV2_PORT_DESIGNATION_TIME_TICKS_PER_BEAT)
  186. // UI Types
  187. #define LV2_UI_GTK2 1
  188. #define LV2_UI_GTK3 2
  189. #define LV2_UI_QT4 3
  190. #define LV2_UI_QT5 4
  191. #define LV2_UI_COCOA 5
  192. #define LV2_UI_WINDOWS 6
  193. #define LV2_UI_X11 7
  194. #define LV2_UI_EXTERNAL 8
  195. #define LV2_UI_OLD_EXTERNAL 9
  196. #define LV2_UI_MOD 10
  197. #define LV2_IS_UI_GTK2(x) ((x) == LV2_UI_GTK2)
  198. #define LV2_IS_UI_GTK3(x) ((x) == LV2_UI_GTK3)
  199. #define LV2_IS_UI_QT4(x) ((x) == LV2_UI_QT4)
  200. #define LV2_IS_UI_QT5(x) ((x) == LV2_UI_QT5)
  201. #define LV2_IS_UI_COCOA(x) ((x) == LV2_UI_COCOA)
  202. #define LV2_IS_UI_WINDOWS(x) ((x) == LV2_UI_WINDOWS)
  203. #define LV2_IS_UI_X11(x) ((x) == LV2_UI_X11)
  204. #define LV2_IS_UI_EXTERNAL(x) ((x) == LV2_UI_EXTERNAL)
  205. #define LV2_IS_UI_OLD_EXTERNAL(x) ((x) == LV2_UI_OLD_EXTERNAL)
  206. #define LV2_IS_UI_MOD(x) ((x) == LV2_UI_MOD)
  207. // Plugin Types
  208. #define LV2_PLUGIN_DELAY 0x000001
  209. #define LV2_PLUGIN_REVERB 0x000002
  210. #define LV2_PLUGIN_SIMULATOR 0x000004
  211. #define LV2_PLUGIN_DISTORTION 0x000008
  212. #define LV2_PLUGIN_WAVESHAPER 0x000010
  213. #define LV2_PLUGIN_DYNAMICS 0x000020
  214. #define LV2_PLUGIN_AMPLIFIER 0x000040
  215. #define LV2_PLUGIN_COMPRESSOR 0x000080
  216. #define LV2_PLUGIN_ENVELOPE 0x000100
  217. #define LV2_PLUGIN_EXPANDER 0x000200
  218. #define LV2_PLUGIN_GATE 0x000400
  219. #define LV2_PLUGIN_LIMITER 0x000800
  220. #define LV2_PLUGIN_EQ 0x001000
  221. #define LV2_PLUGIN_MULTI_EQ 0x002000
  222. #define LV2_PLUGIN_PARA_EQ 0x004000
  223. #define LV2_PLUGIN_FILTER 0x008000
  224. #define LV2_PLUGIN_ALLPASS 0x010000
  225. #define LV2_PLUGIN_BANDPASS 0x020000
  226. #define LV2_PLUGIN_COMB 0x040000
  227. #define LV2_PLUGIN_HIGHPASS 0x080000
  228. #define LV2_PLUGIN_LOWPASS 0x100000
  229. #define LV2_PLUGIN_GENERATOR 0x000001
  230. #define LV2_PLUGIN_CONSTANT 0x000002
  231. #define LV2_PLUGIN_INSTRUMENT 0x000004
  232. #define LV2_PLUGIN_OSCILLATOR 0x000008
  233. #define LV2_PLUGIN_MODULATOR 0x000010
  234. #define LV2_PLUGIN_CHORUS 0x000020
  235. #define LV2_PLUGIN_FLANGER 0x000040
  236. #define LV2_PLUGIN_PHASER 0x000080
  237. #define LV2_PLUGIN_SPATIAL 0x000100
  238. #define LV2_PLUGIN_SPECTRAL 0x000200
  239. #define LV2_PLUGIN_PITCH 0x000400
  240. #define LV2_PLUGIN_UTILITY 0x000800
  241. #define LV2_PLUGIN_ANALYSER 0x001000
  242. #define LV2_PLUGIN_CONVERTER 0x002000
  243. #define LV2_PLUGIN_FUNCTION 0x008000
  244. #define LV2_PLUGIN_MIXER 0x010000
  245. #define LV2_GROUP_DELAY (LV2_PLUGIN_DELAY|LV2_PLUGIN_REVERB)
  246. #define LV2_GROUP_DISTORTION (LV2_PLUGIN_DISTORTION|LV2_PLUGIN_WAVESHAPER)
  247. #define LV2_GROUP_DYNAMICS (LV2_PLUGIN_DYNAMICS|LV2_PLUGIN_AMPLIFIER|LV2_PLUGIN_COMPRESSOR|LV2_PLUGIN_ENVELOPE|LV2_PLUGIN_EXPANDER|LV2_PLUGIN_GATE|LV2_PLUGIN_LIMITER)
  248. #define LV2_GROUP_EQ (LV2_PLUGIN_EQ|LV2_PLUGIN_MULTI_EQ|LV2_PLUGIN_PARA_EQ)
  249. #define LV2_GROUP_FILTER (LV2_PLUGIN_FILTER|LV2_PLUGIN_ALLPASS|LV2_PLUGIN_BANDPASS|LV2_PLUGIN_COMB|LV2_GROUP_EQ|LV2_PLUGIN_HIGHPASS|LV2_PLUGIN_LOWPASS)
  250. #define LV2_GROUP_GENERATOR (LV2_PLUGIN_GENERATOR|LV2_PLUGIN_CONSTANT|LV2_PLUGIN_INSTRUMENT|LV2_PLUGIN_OSCILLATOR)
  251. #define LV2_GROUP_MODULATOR (LV2_PLUGIN_MODULATOR|LV2_PLUGIN_CHORUS|LV2_PLUGIN_FLANGER|LV2_PLUGIN_PHASER)
  252. #define LV2_GROUP_REVERB (LV2_PLUGIN_REVERB)
  253. #define LV2_GROUP_SIMULATOR (LV2_PLUGIN_SIMULATOR|LV2_PLUGIN_REVERB)
  254. #define LV2_GROUP_SPATIAL (LV2_PLUGIN_SPATIAL)
  255. #define LV2_GROUP_SPECTRAL (LV2_PLUGIN_SPECTRAL|LV2_PLUGIN_PITCH)
  256. #define LV2_GROUP_UTILITY (LV2_PLUGIN_UTILITY|LV2_PLUGIN_ANALYSER|LV2_PLUGIN_CONVERTER|LV2_PLUGIN_FUNCTION|LV2_PLUGIN_MIXER)
  257. #define LV2_IS_DELAY(x, y) ((x) & LV2_GROUP_DELAY)
  258. #define LV2_IS_DISTORTION(x, y) ((x) & LV2_GROUP_DISTORTION)
  259. #define LV2_IS_DYNAMICS(x, y) ((x) & LV2_GROUP_DYNAMICS)
  260. #define LV2_IS_EQ(x, y) ((x) & LV2_GROUP_EQ)
  261. #define LV2_IS_FILTER(x, y) ((x) & LV2_GROUP_FILTER)
  262. #define LV2_IS_GENERATOR(x, y) ((y) & LV2_GROUP_GENERATOR)
  263. #define LV2_IS_INSTRUMENT(x, y) ((y) & LV2_PLUGIN_INSTRUMENT)
  264. #define LV2_IS_MODULATOR(x, y) ((y) & LV2_GROUP_MODULATOR)
  265. #define LV2_IS_REVERB(x, y) ((x) & LV2_GROUP_REVERB)
  266. #define LV2_IS_SIMULATOR(x, y) ((x) & LV2_GROUP_SIMULATOR)
  267. #define LV2_IS_SPATIAL(x, y) ((y) & LV2_GROUP_SPATIAL)
  268. #define LV2_IS_SPECTRAL(x, y) ((y) & LV2_GROUP_SPECTRAL)
  269. #define LV2_IS_UTILITY(x, y) ((y) & LV2_GROUP_UTILITY)
  270. // Port Midi Map
  271. struct LV2_RDF_PortMidiMap {
  272. LV2_Property Type;
  273. uint32_t Number;
  274. LV2_RDF_PortMidiMap() noexcept
  275. : Type(0),
  276. Number(0) {}
  277. };
  278. // Port Points
  279. struct LV2_RDF_PortPoints {
  280. LV2_Property Hints;
  281. float Default;
  282. float Minimum;
  283. float Maximum;
  284. LV2_RDF_PortPoints() noexcept
  285. : Hints(0x0),
  286. Default(0.0f),
  287. Minimum(0.0f),
  288. Maximum(1.0f) {}
  289. };
  290. // Port Unit
  291. struct LV2_RDF_PortUnit {
  292. LV2_Property Hints;
  293. const char* Name;
  294. const char* Render;
  295. const char* Symbol;
  296. LV2_Property Unit;
  297. LV2_RDF_PortUnit() noexcept
  298. : Hints(0x0),
  299. Name(nullptr),
  300. Render(nullptr),
  301. Symbol(nullptr),
  302. Unit(0) {}
  303. ~LV2_RDF_PortUnit() noexcept
  304. {
  305. if (Name != nullptr)
  306. {
  307. delete[] Name;
  308. Name = nullptr;
  309. }
  310. if (Render != nullptr)
  311. {
  312. delete[] Render;
  313. Render = nullptr;
  314. }
  315. if (Symbol != nullptr)
  316. {
  317. delete[] Symbol;
  318. Symbol = nullptr;
  319. }
  320. }
  321. CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_PortUnit)
  322. };
  323. // Port Scale Point
  324. struct LV2_RDF_PortScalePoint {
  325. const char* Label;
  326. float Value;
  327. LV2_RDF_PortScalePoint() noexcept
  328. : Label(nullptr),
  329. Value(0.0f) {}
  330. ~LV2_RDF_PortScalePoint() noexcept
  331. {
  332. if (Label != nullptr)
  333. {
  334. delete[] Label;
  335. Label = nullptr;
  336. }
  337. }
  338. CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_PortScalePoint)
  339. };
  340. // Port
  341. struct LV2_RDF_Port {
  342. LV2_Property Types;
  343. LV2_Property Properties;
  344. LV2_Property Designation;
  345. const char* Name;
  346. const char* Symbol;
  347. LV2_RDF_PortMidiMap MidiMap;
  348. LV2_RDF_PortPoints Points;
  349. LV2_RDF_PortUnit Unit;
  350. uint32_t MinimumSize;
  351. uint32_t ScalePointCount;
  352. LV2_RDF_PortScalePoint* ScalePoints;
  353. LV2_RDF_Port() noexcept
  354. : Types(0x0),
  355. Properties(0x0),
  356. Designation(0),
  357. Name(nullptr),
  358. Symbol(nullptr),
  359. MidiMap(),
  360. Points(),
  361. Unit(),
  362. MinimumSize(0),
  363. ScalePointCount(0),
  364. ScalePoints(nullptr) {}
  365. ~LV2_RDF_Port() noexcept
  366. {
  367. if (Name != nullptr)
  368. {
  369. delete[] Name;
  370. Name = nullptr;
  371. }
  372. if (Symbol != nullptr)
  373. {
  374. delete[] Symbol;
  375. Symbol = nullptr;
  376. }
  377. if (ScalePoints != nullptr)
  378. {
  379. delete[] ScalePoints;
  380. ScalePoints = nullptr;
  381. }
  382. }
  383. CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_Port)
  384. };
  385. // Preset
  386. struct LV2_RDF_Preset {
  387. LV2_URI URI;
  388. const char* Label;
  389. LV2_RDF_Preset() noexcept
  390. : URI(nullptr),
  391. Label(nullptr) {}
  392. ~LV2_RDF_Preset() noexcept
  393. {
  394. if (URI != nullptr)
  395. {
  396. delete[] URI;
  397. URI = nullptr;
  398. }
  399. if (Label != nullptr)
  400. {
  401. delete[] Label;
  402. Label = nullptr;
  403. }
  404. }
  405. CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_Preset)
  406. };
  407. // Feature
  408. struct LV2_RDF_Feature {
  409. bool Required;
  410. LV2_URI URI;
  411. LV2_RDF_Feature() noexcept
  412. : Required(false),
  413. URI(nullptr) {}
  414. ~LV2_RDF_Feature() noexcept
  415. {
  416. if (URI != nullptr)
  417. {
  418. delete[] URI;
  419. URI = nullptr;
  420. }
  421. }
  422. CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_Feature)
  423. };
  424. // UI
  425. struct LV2_RDF_UI {
  426. LV2_Property Type;
  427. LV2_URI URI;
  428. const char* Binary;
  429. const char* Bundle;
  430. uint32_t FeatureCount;
  431. LV2_RDF_Feature* Features;
  432. uint32_t ExtensionCount;
  433. LV2_URI* Extensions;
  434. LV2_RDF_UI() noexcept
  435. : Type(0),
  436. URI(nullptr),
  437. Binary(nullptr),
  438. Bundle(nullptr),
  439. FeatureCount(0),
  440. Features(nullptr),
  441. ExtensionCount(0),
  442. Extensions(nullptr) {}
  443. ~LV2_RDF_UI() noexcept
  444. {
  445. if (URI != nullptr)
  446. {
  447. delete[] URI;
  448. URI = nullptr;
  449. }
  450. if (Binary != nullptr)
  451. {
  452. delete[] Binary;
  453. Binary = nullptr;
  454. }
  455. if (Bundle != nullptr)
  456. {
  457. delete[] Bundle;
  458. Bundle = nullptr;
  459. }
  460. if (Features != nullptr)
  461. {
  462. delete[] Features;
  463. Features = nullptr;
  464. }
  465. if (Extensions != nullptr)
  466. {
  467. for (uint32_t i=0; i<ExtensionCount; ++i)
  468. {
  469. if (Extensions[i] != nullptr)
  470. {
  471. delete[] Extensions[i];
  472. Extensions[i] = nullptr;
  473. }
  474. }
  475. delete[] Extensions;
  476. Extensions = nullptr;
  477. }
  478. }
  479. CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_UI)
  480. };
  481. // Plugin Descriptor
  482. struct LV2_RDF_Descriptor {
  483. LV2_Property Type[2];
  484. LV2_URI URI;
  485. const char* Name;
  486. const char* Author;
  487. const char* License;
  488. const char* Binary;
  489. const char* Bundle;
  490. ulong UniqueID;
  491. uint32_t PortCount;
  492. LV2_RDF_Port* Ports;
  493. uint32_t PresetCount;
  494. LV2_RDF_Preset* Presets;
  495. uint32_t FeatureCount;
  496. LV2_RDF_Feature* Features;
  497. uint32_t ExtensionCount;
  498. LV2_URI* Extensions;
  499. uint32_t UICount;
  500. LV2_RDF_UI* UIs;
  501. LV2_RDF_Descriptor() noexcept
  502. : URI(nullptr),
  503. Name(nullptr),
  504. Author(nullptr),
  505. License(nullptr),
  506. Binary(nullptr),
  507. Bundle(nullptr),
  508. UniqueID(0),
  509. PortCount(0),
  510. Ports(nullptr),
  511. PresetCount(0),
  512. Presets(nullptr),
  513. FeatureCount(0),
  514. Features(nullptr),
  515. ExtensionCount(0),
  516. Extensions(nullptr),
  517. UICount(0),
  518. UIs(nullptr)
  519. {
  520. Type[0] = Type[1] = 0x0;
  521. }
  522. ~LV2_RDF_Descriptor() noexcept
  523. {
  524. if (URI != nullptr)
  525. {
  526. delete[] URI;
  527. URI = nullptr;
  528. }
  529. if (Name != nullptr)
  530. {
  531. delete[] Name;
  532. Name = nullptr;
  533. }
  534. if (Author != nullptr)
  535. {
  536. delete[] Author;
  537. Author = nullptr;
  538. }
  539. if (License != nullptr)
  540. {
  541. delete[] License;
  542. License = nullptr;
  543. }
  544. if (Binary != nullptr)
  545. {
  546. delete[] Binary;
  547. Binary = nullptr;
  548. }
  549. if (Bundle != nullptr)
  550. {
  551. delete[] Bundle;
  552. Bundle = nullptr;
  553. }
  554. if (Ports != nullptr)
  555. {
  556. delete[] Ports;
  557. Ports = nullptr;
  558. }
  559. if (Presets != nullptr)
  560. {
  561. delete[] Presets;
  562. Presets = nullptr;
  563. }
  564. if (Features != nullptr)
  565. {
  566. delete[] Features;
  567. Features = nullptr;
  568. }
  569. if (Extensions != nullptr)
  570. {
  571. for (uint32_t i=0; i<ExtensionCount; ++i)
  572. {
  573. if (Extensions[i] != nullptr)
  574. {
  575. delete[] Extensions[i];
  576. Extensions[i] = nullptr;
  577. }
  578. }
  579. delete[] Extensions;
  580. Extensions = nullptr;
  581. }
  582. if (UIs != nullptr)
  583. {
  584. delete[] UIs;
  585. UIs = nullptr;
  586. }
  587. }
  588. CARLA_DECLARE_NON_COPY_STRUCT(LV2_RDF_Descriptor)
  589. };
  590. #endif // LV2_RDF_HPP_INCLUDED