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.

714 lines
24KB

  1. diff --git a/source/modules/lilv/lilv-0.22.1/lilv/lilv.h b/source/modules/lilv/lilv-0.22.1/lilv/lilv.h
  2. index 27ed6d0..83fe233 100644
  3. --- a/source/modules/lilv/lilv-0.22.1/lilv/lilv.h
  4. +++ b/source/modules/lilv/lilv-0.22.1/lilv/lilv.h
  5. @@ -26,8 +26,9 @@
  6. #include <stdint.h>
  7. #include <stdio.h>
  8. -#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
  9. -#include "lv2/lv2plug.in/ns/ext/urid/urid.h"
  10. +#include "lv2/lv2.h"
  11. +#include "lv2/state.h"
  12. +#include "lv2/urid.h"
  13. #ifdef LILV_SHARED
  14. # ifdef _WIN32
  15. @@ -562,7 +563,7 @@ lilv_world_free(LilvWorld* world);
  16. with special plugin bundles which are installed to a known location).
  17. */
  18. LILV_API void
  19. -lilv_world_load_all(LilvWorld* world);
  20. +lilv_world_load_all(LilvWorld* world, const char* lv2_path);
  21. /**
  22. Load a specific bundle.
  23. @@ -1209,9 +1210,9 @@ lilv_port_get_scale_points(const LilvPlugin* plugin,
  24. @return A new LilvState which must be freed with lilv_state_free(), or NULL.
  25. */
  26. LILV_API LilvState*
  27. -lilv_state_new_from_world(LilvWorld* world,
  28. - LV2_URID_Map* map,
  29. - const LilvNode* subject);
  30. +lilv_state_new_from_world(LilvWorld* world,
  31. + const LV2_URID_Map* map,
  32. + const LilvNode* subject);
  33. /**
  34. Load a state snapshot from a file.
  35. @@ -1229,18 +1230,18 @@ lilv_state_new_from_world(LilvWorld* world,
  36. new memory consumed once this function returns.
  37. */
  38. LILV_API LilvState*
  39. -lilv_state_new_from_file(LilvWorld* world,
  40. - LV2_URID_Map* map,
  41. - const LilvNode* subject,
  42. - const char* path);
  43. +lilv_state_new_from_file(LilvWorld* world,
  44. + const LV2_URID_Map* map,
  45. + const LilvNode* subject,
  46. + const char* path);
  47. /**
  48. Load a state snapshot from a string made by lilv_state_to_string().
  49. */
  50. LILV_API LilvState*
  51. -lilv_state_new_from_string(LilvWorld* world,
  52. - LV2_URID_Map* map,
  53. - const char* str);
  54. +lilv_state_new_from_string(LilvWorld* world,
  55. + const LV2_URID_Map* map,
  56. + const char* str);
  57. /**
  58. Function to get a port value.
  59. @@ -1435,7 +1436,8 @@ lilv_state_emit_port_values(const LilvState* state,
  60. */
  61. LILV_API void
  62. lilv_state_restore(const LilvState* state,
  63. - LilvInstance* instance,
  64. + const LV2_State_Interface* iface,
  65. + LV2_Handle handle,
  66. LilvSetPortValueFunc set_value,
  67. void* user_data,
  68. uint32_t flags,
  69. @@ -1796,6 +1798,42 @@ LILV_API const LilvNode*
  70. lilv_ui_get_binary_uri(const LilvUI* ui);
  71. /**
  72. + Custom calls
  73. +*/
  74. +LILV_API LilvNode*
  75. +lilv_plugin_get_modgui_resources_directory(const LilvPlugin* plugin);
  76. +
  77. +LILV_API LilvNode*
  78. +lilv_plugin_get_modgui_stylesheet(const LilvPlugin* plugin);
  79. +
  80. +LILV_API LilvNode*
  81. +lilv_plugin_get_modgui_icon_template(const LilvPlugin* plugin);
  82. +
  83. +LILV_API LilvNode*
  84. +lilv_plugin_get_modgui_settings_template(const LilvPlugin* plugin);
  85. +
  86. +LILV_API LilvNode*
  87. +lilv_plugin_get_modgui_template_data(const LilvPlugin* plugin);
  88. +
  89. +LILV_API LilvNode*
  90. +lilv_plugin_get_modgui_screenshot(const LilvPlugin* plugin);
  91. +
  92. +LILV_API LilvNode*
  93. +lilv_plugin_get_modgui_thumbnail(const LilvPlugin* plugin);
  94. +
  95. +LILV_API const LilvNodes*
  96. +lilv_ui_get_supported_features(const LilvUI* ui);
  97. +
  98. +LILV_API const LilvNodes*
  99. +lilv_ui_get_required_features(const LilvUI* ui);
  100. +
  101. +LILV_API const LilvNodes*
  102. +lilv_ui_get_optional_features(const LilvUI* ui);
  103. +
  104. +LILV_API const LilvNodes*
  105. +lilv_ui_get_extension_data(const LilvUI* ui);
  106. +
  107. +/**
  108. @}
  109. @}
  110. */
  111. diff --git a/source/modules/lilv/lilv-0.22.1/lilv/lilvmm.hpp b/source/modules/lilv/lilv-0.22.1/lilv/lilvmm.hpp
  112. index b9b3a69..1f67e81 100644
  113. --- a/source/modules/lilv/lilv-0.22.1/lilv/lilvmm.hpp
  114. +++ b/source/modules/lilv/lilv-0.22.1/lilv/lilvmm.hpp
  115. @@ -17,6 +17,8 @@
  116. #ifndef LILV_LILVMM_HPP
  117. #define LILV_LILVMM_HPP
  118. +#include "CarlaDefines.h"
  119. +
  120. #include "lilv/lilv.h"
  121. #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
  122. @@ -27,14 +29,12 @@
  123. namespace Lilv {
  124. -static inline const char*
  125. -uri_to_path(const char* uri) {
  126. - return lilv_uri_to_path(uri);
  127. -}
  128. -
  129. #define LILV_WRAP0(RT, prefix, name) \
  130. inline RT name() { return lilv_ ## prefix ## _ ## name (me); }
  131. +#define LILV_WRAP0_CONST(RT, prefix, name) \
  132. + inline RT name() const { return lilv_ ## prefix ## _ ## name (me); }
  133. +
  134. #define LILV_WRAP0_VOID(prefix, name) \
  135. inline void name() { lilv_ ## prefix ## _ ## name(me); }
  136. @@ -65,6 +65,7 @@ uri_to_path(const char* uri) {
  137. #endif
  138. struct Node {
  139. + inline Node(LilvNode* node) : me(node) {}
  140. inline Node(const LilvNode* node) : me(lilv_node_duplicate(node)) {}
  141. inline Node(const Node& copy) : me(lilv_node_duplicate(copy.me)) {}
  142. @@ -78,20 +79,26 @@ struct Node {
  143. LILV_WRAP_CONVERSION(LilvNode);
  144. - LILV_WRAP0(char*, node, get_turtle_token);
  145. - LILV_WRAP0(bool, node, is_uri);
  146. - LILV_WRAP0(const char*, node, as_uri);
  147. - LILV_WRAP0(bool, node, is_blank);
  148. - LILV_WRAP0(const char*, node, as_blank);
  149. - LILV_WRAP0(bool, node, is_literal);
  150. - LILV_WRAP0(bool, node, is_string);
  151. - LILV_WRAP0(const char*, node, as_string);
  152. - LILV_WRAP0(bool, node, is_float);
  153. - LILV_WRAP0(float, node, as_float);
  154. - LILV_WRAP0(bool, node, is_int);
  155. - LILV_WRAP0(int, node, as_int);
  156. - LILV_WRAP0(bool, node, is_bool);
  157. - LILV_WRAP0(bool, node, as_bool);
  158. + LILV_WRAP0_CONST(char*, node, get_turtle_token);
  159. + LILV_WRAP0_CONST(bool, node, is_uri);
  160. + LILV_WRAP0_CONST(const char*, node, as_uri);
  161. + LILV_WRAP0_CONST(bool, node, is_blank);
  162. + LILV_WRAP0_CONST(const char*, node, as_blank);
  163. + LILV_WRAP0_CONST(bool, node, is_literal);
  164. + LILV_WRAP0_CONST(bool, node, is_string);
  165. + LILV_WRAP0_CONST(const char*, node, as_string);
  166. + LILV_WRAP0_CONST(bool, node, is_float);
  167. + LILV_WRAP0_CONST(float, node, as_float);
  168. + LILV_WRAP0_CONST(bool, node, is_int);
  169. + LILV_WRAP0_CONST(int, node, as_int);
  170. + LILV_WRAP0_CONST(bool, node, is_bool);
  171. + LILV_WRAP0_CONST(bool, node, as_bool);
  172. +
  173. + Node& operator=(const Node& copy) {
  174. + lilv_node_free(me);
  175. + me = lilv_node_duplicate(copy.me);
  176. + return *this;
  177. + }
  178. LilvNode* me;
  179. };
  180. @@ -126,7 +133,7 @@ struct PluginClass {
  181. LILV_WRAP0(LilvIter*, prefix, begin); \
  182. LILV_WRAP1(LilvIter*, prefix, next, LilvIter*, i); \
  183. LILV_WRAP1(bool, prefix, is_end, LilvIter*, i); \
  184. - const Lilv ## CT* me; \
  185. + const Lilv ## CT* me
  186. struct PluginClasses {
  187. LILV_WRAP_COLL(PluginClasses, PluginClass, plugin_classes);
  188. @@ -141,22 +148,24 @@ struct ScalePoints {
  189. struct Nodes {
  190. LILV_WRAP_COLL(Nodes, Node, nodes);
  191. LILV_WRAP1(bool, nodes, contains, const Node, node);
  192. - LILV_WRAP0(Node, nodes, get_first);
  193. +
  194. + inline Node get_first() const {
  195. + return Node((const LilvNode*)lilv_nodes_get_first(me));
  196. + }
  197. };
  198. struct UI {
  199. inline UI(const LilvUI* c_obj) : me(c_obj) {}
  200. LILV_WRAP_CONVERSION(const LilvUI);
  201. - LILV_WRAP0(const LilvNode*, ui, get_uri);
  202. - LILV_WRAP0(const LilvNode*, ui, get_bundle_uri);
  203. - LILV_WRAP0(const LilvNode*, ui, get_binary_uri);
  204. - LILV_WRAP0(const LilvNodes*, ui, get_classes);
  205. - /*LILV_WRAP3(bool, ui, is_supported,
  206. - LilvUISupportedFunc, supported_func,
  207. - const LilvNode*, container_type,
  208. - const LilvNode**, ui_type);*/
  209. - LILV_WRAP1(bool, ui, is_a, const LilvNode*, class_uri);
  210. + LILV_WRAP0(Node, ui, get_uri);
  211. + LILV_WRAP1(bool, ui, is_a, LilvNode*, ui_class);
  212. + LILV_WRAP0(Node, ui, get_bundle_uri);
  213. + LILV_WRAP0(Node, ui, get_binary_uri);
  214. + LILV_WRAP0(Nodes, ui, get_supported_features);
  215. + LILV_WRAP0(Nodes, ui, get_required_features);
  216. + LILV_WRAP0(Nodes, ui, get_optional_features);
  217. + LILV_WRAP0(Nodes, ui, get_extension_data);
  218. const LilvUI* me;
  219. };
  220. @@ -220,6 +229,13 @@ struct Plugin {
  221. LILV_WRAP0(Nodes, plugin, get_extension_data);
  222. LILV_WRAP0(UIs, plugin, get_uis);
  223. LILV_WRAP1(Nodes, plugin, get_related, Node, type);
  224. + LILV_WRAP0(Node, plugin, get_modgui_resources_directory);
  225. + LILV_WRAP0(Node, plugin, get_modgui_stylesheet);
  226. + LILV_WRAP0(Node, plugin, get_modgui_icon_template);
  227. + LILV_WRAP0(Node, plugin, get_modgui_settings_template);
  228. + LILV_WRAP0(Node, plugin, get_modgui_template_data);
  229. + LILV_WRAP0(Node, plugin, get_modgui_screenshot);
  230. + LILV_WRAP0(Node, plugin, get_modgui_thumbnail);
  231. inline Port get_port_by_index(unsigned index) {
  232. return Port(me, lilv_plugin_get_port_by_index(me, index));
  233. @@ -259,15 +275,13 @@ struct Instance {
  234. inline Instance(LilvInstance* instance) : me(instance) {}
  235. LILV_DEPRECATED
  236. - inline Instance(Plugin plugin, double sample_rate) {
  237. - me = lilv_plugin_instantiate(plugin, sample_rate, NULL);
  238. - }
  239. + inline Instance(Plugin plugin, double sample_rate)
  240. + : me(lilv_plugin_instantiate(plugin, sample_rate, NULL)) {}
  241. LILV_DEPRECATED inline Instance(Plugin plugin,
  242. double sample_rate,
  243. - LV2_Feature* const* features) {
  244. - me = lilv_plugin_instantiate(plugin, sample_rate, features);
  245. - }
  246. + LV2_Feature* const* features)
  247. + : me(lilv_plugin_instantiate(plugin, sample_rate, features)) {}
  248. static inline Instance* create(Plugin plugin,
  249. double sample_rate,
  250. @@ -304,22 +318,25 @@ struct Instance {
  251. };
  252. struct World {
  253. - inline World() : me(lilv_world_new()) {}
  254. - inline ~World() { lilv_world_free(me); }
  255. + inline World() : me(lilv_world_new()) {}
  256. + inline virtual ~World() { lilv_world_free(me); }
  257. - inline LilvNode* new_uri(const char* uri) {
  258. + inline LilvNode* new_uri(const char* uri) const {
  259. return lilv_new_uri(me, uri);
  260. }
  261. - inline LilvNode* new_string(const char* str) {
  262. + inline LilvNode* new_file_uri(const char* host, const char* path) const {
  263. + return lilv_new_file_uri(me, host, path);
  264. + }
  265. + inline LilvNode* new_string(const char* str) const {
  266. return lilv_new_string(me, str);
  267. }
  268. - inline LilvNode* new_int(int val) {
  269. + inline LilvNode* new_int(int val) const {
  270. return lilv_new_int(me, val);
  271. }
  272. - inline LilvNode* new_float(float val) {
  273. + inline LilvNode* new_float(float val) const {
  274. return lilv_new_float(me, val);
  275. }
  276. - inline LilvNode* new_bool(bool val) {
  277. + inline LilvNode* new_bool(bool val) const {
  278. return lilv_new_bool(me, val);
  279. }
  280. inline Nodes find_nodes(const LilvNode* subject,
  281. @@ -329,7 +346,7 @@ struct World {
  282. }
  283. LILV_WRAP2_VOID(world, set_option, const char*, uri, LilvNode*, value);
  284. - LILV_WRAP0_VOID(world, load_all);
  285. + LILV_WRAP1_VOID(world, load_all, const char*, lv2_path);
  286. LILV_WRAP1_VOID(world, load_bundle, LilvNode*, bundle_uri);
  287. LILV_WRAP0(const LilvPluginClass*, world, get_plugin_class);
  288. LILV_WRAP0(const LilvPluginClasses*, world, get_plugin_classes);
  289. @@ -337,6 +354,8 @@ struct World {
  290. LILV_WRAP1(int, world, load_resource, const LilvNode*, resource);
  291. LilvWorld* me;
  292. +
  293. + CARLA_DECLARE_NON_COPY_STRUCT(World)
  294. };
  295. } /* namespace Lilv */
  296. diff --git a/source/modules/lilv/lilv-0.22.1/src/lilv_internal.h b/source/modules/lilv/lilv-0.22.1/src/lilv_internal.h
  297. index 15b00dc..ee906fd 100644
  298. --- a/source/modules/lilv/lilv-0.22.1/src/lilv_internal.h
  299. +++ b/source/modules/lilv/lilv-0.22.1/src/lilv_internal.h
  300. @@ -58,7 +58,7 @@ static inline char* dlerror(void) { return "Unknown error"; }
  301. #include "lilv/lilv.h"
  302. #ifdef LILV_DYN_MANIFEST
  303. -# include "lv2/lv2plug.in/ns/ext/dynmanifest/dynmanifest.h"
  304. +# include "lv2/dynmanifest.h"
  305. #endif
  306. /*
  307. diff --git a/source/modules/lilv/lilv-0.22.1/src/plugin.c b/source/modules/lilv/lilv-0.22.1/src/plugin.c
  308. index bf0843b..d825192 100644
  309. --- a/source/modules/lilv/lilv-0.22.1/src/plugin.c
  310. +++ b/source/modules/lilv/lilv-0.22.1/src/plugin.c
  311. @@ -27,10 +27,11 @@
  312. #include "lilv_config.h"
  313. #include "lilv_internal.h"
  314. -#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
  315. +#include "lv2/ui.h"
  316. #define NS_DOAP (const uint8_t*)"http://usefulinc.com/ns/doap#"
  317. #define NS_FOAF (const uint8_t*)"http://xmlns.com/foaf/0.1/"
  318. +#define NS_MOD (const uint8_t*)"http://moddevices.com/ns/modgui#"
  319. /** Ownership of `uri` is taken */
  320. LilvPlugin*
  321. @@ -908,6 +909,131 @@ lilv_plugin_get_author_homepage(const LilvPlugin* plugin)
  322. return NULL;
  323. }
  324. +static const SordNode*
  325. +lilv_plugin_get_modgui(const LilvPlugin* p)
  326. +{
  327. + lilv_plugin_load_if_necessary(p);
  328. +
  329. + SordNode* mod_gui = sord_new_uri(
  330. + p->world->world, NS_MOD "gui");
  331. +
  332. + SordIter* gui = lilv_world_query_internal(
  333. + p->world,
  334. + p->plugin_uri->node,
  335. + mod_gui,
  336. + NULL);
  337. +
  338. + sord_node_free(p->world->world, mod_gui);
  339. +
  340. + if (sord_iter_end(gui)) {
  341. + sord_iter_free(gui);
  342. + return NULL;
  343. + }
  344. +
  345. + const SordNode* Gui = sord_iter_get_node(gui, SORD_OBJECT);
  346. +
  347. + sord_iter_free(gui);
  348. + return Gui;
  349. +}
  350. +
  351. +LILV_API LilvNode*
  352. +lilv_plugin_get_modgui_resources_directory(const LilvPlugin* plugin)
  353. +{
  354. + const SordNode* modgui = lilv_plugin_get_modgui(plugin);
  355. + if (modgui) {
  356. + SordWorld* sworld = plugin->world->world;
  357. + SordNode* modgui_res = sord_new_uri(sworld, NS_MOD "resourcesDirectory");
  358. + LilvNode* ret = lilv_plugin_get_one(plugin, modgui, modgui_res);
  359. + sord_node_free(sworld, modgui_res);
  360. + return ret;
  361. + }
  362. + return NULL;
  363. +}
  364. +
  365. +LILV_API LilvNode*
  366. +lilv_plugin_get_modgui_stylesheet(const LilvPlugin* plugin)
  367. +{
  368. + const SordNode* modgui = lilv_plugin_get_modgui(plugin);
  369. + if (modgui) {
  370. + SordWorld* sworld = plugin->world->world;
  371. + SordNode* modgui_style = sord_new_uri(sworld, NS_MOD "stylesheet");
  372. + LilvNode* ret = lilv_plugin_get_one(plugin, modgui, modgui_style);
  373. + sord_node_free(sworld, modgui_style);
  374. + return ret;
  375. + }
  376. + return NULL;
  377. +}
  378. +
  379. +LILV_API LilvNode*
  380. +lilv_plugin_get_modgui_icon_template(const LilvPlugin* plugin)
  381. +{
  382. + const SordNode* modgui = lilv_plugin_get_modgui(plugin);
  383. + if (modgui) {
  384. + SordWorld* sworld = plugin->world->world;
  385. + SordNode* modgui_tmpl = sord_new_uri(sworld, NS_MOD "iconTemplate");
  386. + LilvNode* ret = lilv_plugin_get_one(plugin, modgui, modgui_tmpl);
  387. + sord_node_free(sworld, modgui_tmpl);
  388. + return ret;
  389. + }
  390. + return NULL;
  391. +}
  392. +
  393. +LILV_API LilvNode*
  394. +lilv_plugin_get_modgui_settings_template(const LilvPlugin* plugin)
  395. +{
  396. + const SordNode* modgui = lilv_plugin_get_modgui(plugin);
  397. + if (modgui) {
  398. + SordWorld* sworld = plugin->world->world;
  399. + SordNode* modgui_tmpl = sord_new_uri(sworld, NS_MOD "settingsTemplate");
  400. + LilvNode* ret = lilv_plugin_get_one(plugin, modgui, modgui_tmpl);
  401. + sord_node_free(sworld, modgui_tmpl);
  402. + return ret;
  403. + }
  404. + return NULL;
  405. +}
  406. +
  407. +LILV_API LilvNode*
  408. +lilv_plugin_get_modgui_template_data(const LilvPlugin* plugin)
  409. +{
  410. + const SordNode* modgui = lilv_plugin_get_modgui(plugin);
  411. + if (modgui) {
  412. + SordWorld* sworld = plugin->world->world;
  413. + SordNode* modgui_tmpl = sord_new_uri(sworld, NS_MOD "templateData");
  414. + LilvNode* ret = lilv_plugin_get_one(plugin, modgui, modgui_tmpl);
  415. + sord_node_free(sworld, modgui_tmpl);
  416. + return ret;
  417. + }
  418. + return NULL;
  419. +}
  420. +
  421. +LILV_API LilvNode*
  422. +lilv_plugin_get_modgui_screenshot(const LilvPlugin* plugin)
  423. +{
  424. + const SordNode* modgui = lilv_plugin_get_modgui(plugin);
  425. + if (modgui) {
  426. + SordWorld* sworld = plugin->world->world;
  427. + SordNode* modgui_scr = sord_new_uri(sworld, NS_MOD "screenshot");
  428. + LilvNode* ret = lilv_plugin_get_one(plugin, modgui, modgui_scr);
  429. + sord_node_free(sworld, modgui_scr);
  430. + return ret;
  431. + }
  432. + return NULL;
  433. +}
  434. +
  435. +LILV_API LilvNode*
  436. +lilv_plugin_get_modgui_thumbnail(const LilvPlugin* plugin)
  437. +{
  438. + const SordNode* modgui = lilv_plugin_get_modgui(plugin);
  439. + if (modgui) {
  440. + SordWorld* sworld = plugin->world->world;
  441. + SordNode* modgui_thumb = sord_new_uri(sworld, NS_MOD "thumbnail");
  442. + LilvNode* ret = lilv_plugin_get_one(plugin, modgui, modgui_thumb);
  443. + sord_node_free(sworld, modgui_thumb);
  444. + return ret;
  445. + }
  446. + return NULL;
  447. +}
  448. +
  449. LILV_API bool
  450. lilv_plugin_is_replaced(const LilvPlugin* plugin)
  451. {
  452. diff --git a/source/modules/lilv/lilv-0.22.1/src/port.c b/source/modules/lilv/lilv-0.22.1/src/port.c
  453. index 6bf8fc7..0a50891 100644
  454. --- a/source/modules/lilv/lilv-0.22.1/src/port.c
  455. +++ b/source/modules/lilv/lilv-0.22.1/src/port.c
  456. @@ -20,8 +20,8 @@
  457. #include <stdlib.h>
  458. #include <string.h>
  459. -#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
  460. -#include "lv2/lv2plug.in/ns/ext/event/event.h"
  461. +#include "lv2/atom.h"
  462. +#include "lv2/event.h"
  463. #include "lilv_internal.h"
  464. diff --git a/source/modules/lilv/lilv-0.22.1/src/state.c b/source/modules/lilv/lilv-0.22.1/src/state.c
  465. index ccc1b22..dc2a55c 100644
  466. --- a/source/modules/lilv/lilv-0.22.1/src/state.c
  467. +++ b/source/modules/lilv/lilv-0.22.1/src/state.c
  468. @@ -18,10 +18,10 @@
  469. #include <stdio.h>
  470. #include <string.h>
  471. -#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
  472. -#include "lv2/lv2plug.in/ns/ext/atom/forge.h"
  473. -#include "lv2/lv2plug.in/ns/ext/presets/presets.h"
  474. -#include "lv2/lv2plug.in/ns/ext/state/state.h"
  475. +#include "lv2/atom.h"
  476. +#include "lv2/atom-forge.h"
  477. +#include "lv2/presets.h"
  478. +#include "lv2/state.h"
  479. #include "lilv_config.h"
  480. #include "lilv_internal.h"
  481. @@ -415,35 +415,18 @@ lilv_state_emit_port_values(const LilvState* state,
  482. LILV_API void
  483. lilv_state_restore(const LilvState* state,
  484. - LilvInstance* instance,
  485. + const LV2_State_Interface* iface,
  486. + LV2_Handle handle,
  487. LilvSetPortValueFunc set_value,
  488. void* user_data,
  489. uint32_t flags,
  490. const LV2_Feature *const * features)
  491. {
  492. - if (!state) {
  493. - LILV_ERROR("lilv_state_restore() called on NULL state\n");
  494. - return;
  495. - }
  496. -
  497. - LV2_State_Map_Path map_path = {
  498. - (LilvState*)state, abstract_path, absolute_path };
  499. - LV2_Feature map_feature = { LV2_STATE__mapPath, &map_path };
  500. -
  501. - const LV2_Feature** sfeatures = add_features(features, &map_feature, NULL);
  502. -
  503. - const LV2_Descriptor* desc = instance ? instance->lv2_descriptor : NULL;
  504. - const LV2_State_Interface* iface = (desc && desc->extension_data)
  505. - ? (const LV2_State_Interface*)desc->extension_data(LV2_STATE__interface)
  506. - : NULL;
  507. -
  508. if (iface) {
  509. - iface->restore(instance->lv2_handle, retrieve_callback,
  510. - (LV2_State_Handle)state, flags, sfeatures);
  511. + iface->restore(handle, retrieve_callback,
  512. + (LV2_State_Handle)state, flags, features);
  513. }
  514. - free(sfeatures);
  515. -
  516. if (set_value) {
  517. lilv_state_emit_port_values(state, set_value, user_data);
  518. }
  519. @@ -590,9 +573,9 @@ new_state_from_model(LilvWorld* world,
  520. }
  521. LILV_API LilvState*
  522. -lilv_state_new_from_world(LilvWorld* world,
  523. - LV2_URID_Map* map,
  524. - const LilvNode* node)
  525. +lilv_state_new_from_world(LilvWorld* world,
  526. + const LV2_URID_Map* map,
  527. + const LilvNode* node)
  528. {
  529. if (!lilv_node_is_uri(node) && !lilv_node_is_blank(node)) {
  530. LILV_ERRORF("Subject `%s' is not a URI or blank node.\n",
  531. @@ -604,10 +587,10 @@ lilv_state_new_from_world(LilvWorld* world,
  532. }
  533. LILV_API LilvState*
  534. -lilv_state_new_from_file(LilvWorld* world,
  535. - LV2_URID_Map* map,
  536. - const LilvNode* subject,
  537. - const char* path)
  538. +lilv_state_new_from_file(LilvWorld* world,
  539. + const LV2_URID_Map* map,
  540. + const LilvNode* subject,
  541. + const char* path)
  542. {
  543. if (subject && !lilv_node_is_uri(subject)
  544. && !lilv_node_is_blank(subject)) {
  545. @@ -657,9 +640,9 @@ set_prefixes(SerdEnv* env)
  546. }
  547. LILV_API LilvState*
  548. -lilv_state_new_from_string(LilvWorld* world,
  549. - LV2_URID_Map* map,
  550. - const char* str)
  551. +lilv_state_new_from_string(LilvWorld* world,
  552. + const LV2_URID_Map* map,
  553. + const char* str)
  554. {
  555. if (!str) {
  556. return NULL;
  557. diff --git a/source/modules/lilv/lilv-0.22.1/src/ui.c b/source/modules/lilv/lilv-0.22.1/src/ui.c
  558. index 0f4f2f6..a3e17da 100644
  559. --- a/source/modules/lilv/lilv-0.22.1/src/ui.c
  560. +++ b/source/modules/lilv/lilv-0.22.1/src/ui.c
  561. @@ -109,3 +109,54 @@ lilv_ui_get_binary_uri(const LilvUI* ui)
  562. {
  563. return ui->binary_uri;
  564. }
  565. +
  566. +static LilvNodes*
  567. +lilv_ui_get_value_internal(const LilvUI* ui, const SordNode* predicate)
  568. +{
  569. + assert(ui);
  570. + return lilv_world_find_nodes_internal(ui->world, ui->uri->node, predicate, NULL);
  571. +}
  572. +
  573. +LILV_API const LilvNodes*
  574. +lilv_ui_get_supported_features(const LilvUI* ui)
  575. +{
  576. + assert(ui);
  577. + LilvNodes* optional = lilv_ui_get_optional_features(ui);
  578. + LilvNodes* required = lilv_ui_get_required_features(ui);
  579. + LilvNodes* result = lilv_nodes_new();
  580. +
  581. + LILV_FOREACH(nodes, i, optional)
  582. + zix_tree_insert((ZixTree*)result, lilv_node_duplicate(lilv_nodes_get(optional, i)), NULL);
  583. +
  584. + LILV_FOREACH(nodes, i, required)
  585. + zix_tree_insert((ZixTree*)result, lilv_node_duplicate(lilv_nodes_get(required, i)), NULL);
  586. +
  587. + lilv_nodes_free(optional);
  588. + lilv_nodes_free(required);
  589. +
  590. + return result;
  591. +}
  592. +
  593. +LILV_API const LilvNodes*
  594. +lilv_ui_get_required_features(const LilvUI* ui)
  595. +{
  596. + assert(ui);
  597. + assert(ui->world);
  598. + return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_requiredFeature);
  599. +}
  600. +
  601. +LILV_API const LilvNodes*
  602. +lilv_ui_get_optional_features(const LilvUI* ui)
  603. +{
  604. + assert(ui);
  605. + assert(ui->world);
  606. + return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_optionalFeature);
  607. +}
  608. +
  609. +LILV_API const LilvNodes*
  610. +lilv_ui_get_extension_data(const LilvUI* ui)
  611. +{
  612. + assert(ui);
  613. + assert(ui->world);
  614. + return lilv_ui_get_value_internal(ui, ui->world->uris.lv2_extensionData);
  615. +}
  616. diff --git a/source/modules/lilv/lilv-0.22.1/src/util.c b/source/modules/lilv/lilv-0.22.1/src/util.c
  617. index d999942..5393d7c 100644
  618. --- a/source/modules/lilv/lilv-0.22.1/src/util.c
  619. +++ b/source/modules/lilv/lilv-0.22.1/src/util.c
  620. @@ -29,7 +29,6 @@
  621. #include <string.h>
  622. #ifdef _WIN32
  623. -# define _WIN32_WINNT 0x0600 /* for CreateSymbolicLink */
  624. # include <windows.h>
  625. # include <direct.h>
  626. # include <io.h>
  627. @@ -459,10 +458,7 @@ lilv_symlink(const char* oldpath, const char* newpath)
  628. int ret = 0;
  629. if (strcmp(oldpath, newpath)) {
  630. #ifdef _WIN32
  631. - ret = !CreateSymbolicLink(newpath, oldpath, 0);
  632. - if (ret) {
  633. - ret = !CreateHardLink(newpath, oldpath, 0);
  634. - }
  635. + ret = 1;
  636. #else
  637. ret = symlink(oldpath, newpath);
  638. #endif
  639. diff --git a/source/modules/lilv/lilv-0.22.1/src/world.c b/source/modules/lilv/lilv-0.22.1/src/world.c
  640. index 02dbeec..8b2db95 100644
  641. --- a/source/modules/lilv/lilv-0.22.1/src/world.c
  642. +++ b/source/modules/lilv/lilv-0.22.1/src/world.c
  643. @@ -19,7 +19,7 @@
  644. #include <stdlib.h>
  645. #include <string.h>
  646. -#include "lv2/lv2plug.in/ns/ext/presets/presets.h"
  647. +#include "lv2/presets.h"
  648. #include "lilv_internal.h"
  649. @@ -797,12 +797,8 @@ lilv_world_load_plugin_classes(LilvWorld* world)
  650. }
  651. LILV_API void
  652. -lilv_world_load_all(LilvWorld* world)
  653. +lilv_world_load_all(LilvWorld* world, const char* lv2_path)
  654. {
  655. - const char* lv2_path = getenv("LV2_PATH");
  656. - if (!lv2_path)
  657. - lv2_path = LILV_DEFAULT_LV2_PATH;
  658. -
  659. // Discover bundles and read all manifest files into model
  660. lilv_world_load_path(world, lv2_path);