SLV2 0.7.0alpha
|
00001 /* 00002 Copyright 2007-2011 David Robillard <http://drobilla.net> 00003 00004 Redistribution and use in source and binary forms, with or without 00005 modification, are permitted provided that the following conditions are met: 00006 00007 1. Redistributions of source code must retain the above copyright notice, 00008 this list of conditions and the following disclaimer. 00009 00010 2. Redistributions in binary form must reproduce the above copyright 00011 notice, this list of conditions and the following disclaimer in the 00012 documentation and/or other materials provided with the distribution. 00013 00014 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 00015 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 00016 AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00017 AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 00018 OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00019 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00020 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00021 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00022 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 00023 THE POSSIBILITY OF SUCH DAMAGE. 00024 */ 00025 00030 #ifndef SLV2_SLV2_H 00031 #define SLV2_SLV2_H 00032 00033 #include <stdbool.h> 00034 #include <stdint.h> 00035 00036 #include "lv2/lv2plug.in/ns/lv2core/lv2.h" 00037 #include "lv2/lv2plug.in/ns/extensions/ui/ui.h" 00038 00039 #ifdef SLV2_SHARED 00040 #if defined _WIN32 || defined __CYGWIN__ 00041 #define SLV2_LIB_IMPORT __declspec(dllimport) 00042 #define SLV2_LIB_EXPORT __declspec(dllexport) 00043 #else 00044 #define SLV2_LIB_IMPORT __attribute__ ((visibility("default"))) 00045 #define SLV2_LIB_EXPORT __attribute__ ((visibility("default"))) 00046 #endif 00047 #ifdef SLV2_INTERNAL 00048 #define SLV2_API SLV2_LIB_EXPORT 00049 #else 00050 #define SLV2_API SLV2_LIB_IMPORT 00051 #endif 00052 #else 00053 #define SLV2_API 00054 #endif 00055 00056 #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) 00057 #ifdef SLV2_INTERNAL 00058 #define SLV2_DEPRECATED 00059 #else 00060 #define SLV2_DEPRECATED __attribute__((__deprecated__)) 00061 #endif 00062 #else 00063 #define SLV2_DEPRECATED 00064 #endif 00065 00066 #ifdef __cplusplus 00067 extern "C" { 00068 #endif 00069 00070 #define SLV2_NAMESPACE_LV2 "http://lv2plug.in/ns/lv2core#" 00071 #define SLV2_PORT_CLASS_PORT "http://lv2plug.in/ns/lv2core#Port" 00072 #define SLV2_PORT_CLASS_INPUT "http://lv2plug.in/ns/lv2core#InputPort" 00073 #define SLV2_PORT_CLASS_OUTPUT "http://lv2plug.in/ns/lv2core#OutputPort" 00074 #define SLV2_PORT_CLASS_CONTROL "http://lv2plug.in/ns/lv2core#ControlPort" 00075 #define SLV2_PORT_CLASS_AUDIO "http://lv2plug.in/ns/lv2core#AudioPort" 00076 #define SLV2_PORT_CLASS_EVENT "http://lv2plug.in/ns/ext/event#EventPort" 00077 #define SLV2_EVENT_CLASS_MIDI "http://lv2plug.in/ns/ext/midi#MidiEvent" 00078 00079 typedef struct _SLV2Plugin* SLV2Plugin; 00080 typedef struct _SLV2PluginClass* SLV2PluginClass; 00081 typedef struct _SLV2Port* SLV2Port; 00082 typedef struct _SLV2ScalePoint* SLV2ScalePoint; 00083 typedef struct _SLV2UI* SLV2UI; 00084 typedef struct _SLV2Value* SLV2Value; 00085 typedef struct _SLV2World* SLV2World; 00086 typedef struct _SLV2UIInstance* SLV2UIInstance; 00095 typedef struct _SLV2UIHost* SLV2UIHost; 00096 00097 typedef void* SLV2PluginClasses; 00098 typedef void* SLV2Plugins; 00099 typedef void* SLV2ScalePoints; 00100 typedef void* SLV2UIs; 00101 typedef void* SLV2Values; 00123 SLV2_API 00124 const char* 00125 slv2_uri_to_path(const char* uri); 00126 00131 SLV2_API 00132 SLV2Value 00133 slv2_value_new_uri(SLV2World world, const char* uri); 00134 00139 SLV2_API 00140 SLV2Value 00141 slv2_value_new_string(SLV2World world, const char* str); 00142 00147 SLV2_API 00148 SLV2Value 00149 slv2_value_new_int(SLV2World world, int val); 00150 00155 SLV2_API 00156 SLV2Value 00157 slv2_value_new_float(SLV2World world, float val); 00158 00163 SLV2_API 00164 SLV2Value 00165 slv2_value_new_bool(SLV2World world, bool val); 00166 00170 SLV2_API 00171 void 00172 slv2_value_free(SLV2Value val); 00173 00177 SLV2_API 00178 SLV2Value 00179 slv2_value_duplicate(SLV2Value val); 00180 00184 SLV2_API 00185 bool 00186 slv2_value_equals(SLV2Value value, SLV2Value other); 00187 00201 SLV2_API 00202 char* 00203 slv2_value_get_turtle_token(SLV2Value value); 00204 00208 SLV2_API 00209 bool 00210 slv2_value_is_uri(SLV2Value value); 00211 00217 SLV2_API 00218 const char* 00219 slv2_value_as_uri(SLV2Value value); 00220 00224 SLV2_API 00225 bool 00226 slv2_value_is_blank(SLV2Value value); 00227 00233 SLV2_API 00234 const char* 00235 slv2_value_as_blank(SLV2Value value); 00236 00241 SLV2_API 00242 bool 00243 slv2_value_is_literal(SLV2Value value); 00244 00249 SLV2_API 00250 bool 00251 slv2_value_is_string(SLV2Value value); 00252 00256 SLV2_API 00257 const char* 00258 slv2_value_as_string(SLV2Value value); 00259 00263 SLV2_API 00264 bool 00265 slv2_value_is_float(SLV2Value value); 00266 00272 SLV2_API 00273 float 00274 slv2_value_as_float(SLV2Value value); 00275 00279 SLV2_API 00280 bool 00281 slv2_value_is_int(SLV2Value value); 00282 00287 SLV2_API 00288 int 00289 slv2_value_as_int(SLV2Value value); 00290 00294 SLV2_API 00295 bool 00296 slv2_value_is_bool(SLV2Value value); 00297 00302 SLV2_API 00303 bool 00304 slv2_value_as_bool(SLV2Value value); 00305 00328 /* Iter */ 00329 00330 typedef void* SLV2Iter; 00331 00333 SLV2_API 00334 SLV2Iter 00335 slv2_iter_next(SLV2Iter i); 00336 00338 SLV2_API 00339 bool 00340 slv2_iter_end(SLV2Iter i); 00341 00342 /* Collection */ 00343 00344 typedef void* SLV2Collection; 00345 00346 SLV2_API 00347 SLV2Iter 00348 slv2_collection_begin(SLV2Collection collection); 00349 00350 SLV2_API 00351 void* 00352 slv2_collection_get(SLV2Collection collection, 00353 SLV2Iter i); 00354 00355 #define SLV2_FOREACH(iter, collection) \ 00356 for (SLV2Iter (iter) = slv2_collection_begin(collection); \ 00357 !slv2_iter_end(iter); \ 00358 (iter) = slv2_iter_next(iter)) 00359 00360 /* SLV2PluginClasses */ 00361 00362 SLV2_API 00363 void 00364 slv2_plugin_classes_free(SLV2PluginClasses collection); 00365 00366 SLV2_API 00367 unsigned 00368 slv2_plugin_classes_size(SLV2PluginClasses collection); 00369 00370 SLV2_API 00371 SLV2Iter 00372 slv2_plugin_classes_begin(SLV2PluginClasses collection); 00373 00374 SLV2_API 00375 SLV2PluginClass 00376 slv2_plugin_classes_get(SLV2PluginClasses collection, SLV2Iter i); 00377 00378 SLV2_DEPRECATED 00379 SLV2_API 00380 SLV2PluginClass 00381 slv2_plugin_classes_get_at(SLV2PluginClasses collection, unsigned index); 00382 00383 /* SLV2ScalePoints */ 00384 00385 SLV2_API 00386 SLV2ScalePoints 00387 slv2_scale_points_new(void); 00388 00389 SLV2_API 00390 void 00391 slv2_scale_points_free(SLV2ScalePoints collection); 00392 00393 SLV2_API 00394 unsigned 00395 slv2_scale_points_size(SLV2ScalePoints collection); 00396 00397 SLV2_API 00398 SLV2Iter 00399 slv2_scale_points_begin(SLV2ScalePoints collection); 00400 00401 SLV2_API 00402 SLV2ScalePoint 00403 slv2_scale_points_get(SLV2ScalePoints collection, SLV2Iter i); 00404 00405 SLV2_DEPRECATED 00406 SLV2_API 00407 SLV2ScalePoint 00408 slv2_scale_points_get_at(SLV2ScalePoints collection, unsigned index); 00409 00410 /* UIs */ 00411 00412 SLV2_API 00413 void 00414 slv2_uis_free(SLV2UIs collection); 00415 00416 SLV2_API 00417 unsigned 00418 slv2_uis_size(SLV2UIs collection); 00419 00420 SLV2_API 00421 SLV2Iter 00422 slv2_uis_begin(SLV2UIs collection); 00423 00424 SLV2_API 00425 SLV2UI 00426 slv2_uis_get(SLV2UIs collection, SLV2Iter i); 00427 00428 SLV2_DEPRECATED 00429 SLV2_API 00430 SLV2UI 00431 slv2_uis_get_at(SLV2UIs collection, unsigned index); 00432 00433 /* Values */ 00434 00435 SLV2_API 00436 SLV2ScalePoints 00437 slv2_values_new(void); 00438 00439 SLV2_API 00440 void 00441 slv2_values_free(SLV2Values collection); 00442 00443 SLV2_API 00444 unsigned 00445 slv2_values_size(SLV2Values collection); 00446 00447 SLV2_API 00448 SLV2Iter 00449 slv2_values_begin(SLV2Values collection); 00450 00451 SLV2_API 00452 SLV2Value 00453 slv2_values_get(SLV2Values collection, SLV2Iter i); 00454 00455 SLV2_API 00456 SLV2Value 00457 slv2_values_get_first(SLV2Values collection); 00458 00459 SLV2_DEPRECATED 00460 SLV2_API 00461 SLV2Value 00462 slv2_values_get_at(SLV2Values collection, unsigned index); 00463 00464 /* Plugins */ 00465 00466 SLV2_API 00467 unsigned 00468 slv2_plugins_size(SLV2Plugins collection); 00469 00470 SLV2_API 00471 SLV2Iter 00472 slv2_plugins_begin(SLV2Plugins collection); 00473 00474 SLV2_API 00475 SLV2Plugin 00476 slv2_plugins_get(SLV2Plugins collection, SLV2Iter i); 00477 00478 SLV2_DEPRECATED 00479 SLV2_API 00480 SLV2Plugin 00481 slv2_plugins_get_at(SLV2Plugins collection, unsigned index); 00482 00486 SLV2_DEPRECATED 00487 SLV2_API 00488 void 00489 slv2_plugins_free(SLV2World world, SLV2Plugins plugins); 00490 00497 SLV2_API 00498 SLV2Plugin 00499 slv2_plugins_get_by_uri(SLV2Plugins plugins, 00500 SLV2Value uri); 00501 00508 SLV2_API 00509 SLV2PluginClass 00510 slv2_plugin_classes_get_by_uri(SLV2PluginClasses classes, 00511 SLV2Value uri); 00512 00516 SLV2_API 00517 bool 00518 slv2_values_contains(SLV2Values values, SLV2Value value); 00519 00534 SLV2_API 00535 SLV2World 00536 slv2_world_new(void); 00537 00545 #define SLV2_OPTION_FILTER_LANG "http://drobilla.net/ns/slv2#filter-lang" 00546 00551 #define SLV2_OPTION_DYN_MANIFEST "http://drobilla.net/ns/slv2#dyn-manifest" 00552 00560 SLV2_API 00561 void 00562 slv2_world_set_option(SLV2World world, 00563 const char* uri, 00564 const SLV2Value value); 00565 00572 SLV2_API 00573 void 00574 slv2_world_free(SLV2World world); 00575 00587 SLV2_API 00588 void 00589 slv2_world_load_all(SLV2World world); 00590 00603 SLV2_API 00604 void 00605 slv2_world_load_bundle(SLV2World world, 00606 SLV2Value bundle_uri); 00607 00611 SLV2_API 00612 SLV2PluginClass 00613 slv2_world_get_plugin_class(SLV2World world); 00614 00619 SLV2_API 00620 SLV2PluginClasses 00621 slv2_world_get_plugin_classes(SLV2World world); 00622 00634 SLV2_API 00635 SLV2Plugins 00636 slv2_world_get_all_plugins(SLV2World world); 00637 00641 SLV2_API 00642 SLV2Plugin 00643 slv2_world_get_plugin_by_uri_string(SLV2World world, 00644 const char* uri); 00645 00662 SLV2_API 00663 bool 00664 slv2_plugin_verify(SLV2Plugin plugin); 00665 00680 SLV2_API 00681 SLV2Value 00682 slv2_plugin_get_uri(SLV2Plugin plugin); 00683 00695 SLV2_API 00696 SLV2Value 00697 slv2_plugin_get_bundle_uri(SLV2Plugin plugin); 00698 00707 SLV2_API 00708 SLV2Values 00709 slv2_plugin_get_data_uris(SLV2Plugin plugin); 00710 00717 SLV2_API 00718 SLV2Value 00719 slv2_plugin_get_library_uri(SLV2Plugin plugin); 00720 00728 SLV2_API 00729 SLV2Value 00730 slv2_plugin_get_name(SLV2Plugin plugin); 00731 00735 SLV2_API 00736 SLV2PluginClass 00737 slv2_plugin_get_class(SLV2Plugin plugin); 00738 00751 SLV2_API 00752 SLV2Values 00753 slv2_plugin_get_value(SLV2Plugin p, 00754 SLV2Value predicate); 00755 00762 SLV2_API 00763 SLV2Values 00764 slv2_plugin_get_value_by_qname(SLV2Plugin p, 00765 const char* predicate); 00766 00782 SLV2_API 00783 SLV2Values 00784 slv2_plugin_get_value_for_subject(SLV2Plugin p, 00785 SLV2Value subject_uri, 00786 SLV2Value predicate_uri); 00787 00793 SLV2_API 00794 bool 00795 slv2_plugin_has_feature(SLV2Plugin p, 00796 SLV2Value feature_uri); 00797 00808 SLV2_API 00809 SLV2Values 00810 slv2_plugin_get_supported_features(SLV2Plugin p); 00811 00823 SLV2_API 00824 SLV2Values 00825 slv2_plugin_get_required_features(SLV2Plugin p); 00826 00835 SLV2_API 00836 SLV2Values 00837 slv2_plugin_get_optional_features(SLV2Plugin p); 00838 00842 SLV2_API 00843 uint32_t 00844 slv2_plugin_get_num_ports(SLV2Plugin p); 00845 00860 SLV2_API 00861 void 00862 slv2_plugin_get_port_ranges_float(SLV2Plugin p, 00863 float* min_values, 00864 float* max_values, 00865 float* def_values); 00866 00873 SLV2_API 00874 uint32_t 00875 slv2_plugin_get_num_ports_of_class(SLV2Plugin p, 00876 SLV2Value class_1, ...); 00877 00883 SLV2_API 00884 bool 00885 slv2_plugin_has_latency(SLV2Plugin p); 00886 00896 SLV2_API 00897 uint32_t 00898 slv2_plugin_get_latency_port_index(SLV2Plugin p); 00899 00903 SLV2_API 00904 SLV2Port 00905 slv2_plugin_get_port_by_index(SLV2Plugin plugin, 00906 uint32_t index); 00907 00913 SLV2_API 00914 SLV2Port 00915 slv2_plugin_get_port_by_symbol(SLV2Plugin plugin, 00916 SLV2Value symbol); 00917 00923 SLV2_API 00924 SLV2Value 00925 slv2_plugin_get_author_name(SLV2Plugin plugin); 00926 00932 SLV2_API 00933 SLV2Value 00934 slv2_plugin_get_author_email(SLV2Plugin plugin); 00935 00941 SLV2_API 00942 SLV2Value 00943 slv2_plugin_get_author_homepage(SLV2Plugin plugin); 00944 00951 SLV2_API 00952 bool 00953 slv2_plugin_is_replaced(SLV2Plugin plugin); 00954 00964 SLV2_API 00965 SLV2Values 00966 slv2_port_get_value(SLV2Plugin plugin, 00967 SLV2Port port, 00968 SLV2Value predicate); 00969 00973 SLV2_API 00974 SLV2Values 00975 slv2_port_get_value_by_qname(SLV2Plugin plugin, 00976 SLV2Port port, 00977 const char* predicate); 00978 00982 SLV2_API 00983 SLV2Values 00984 slv2_port_get_properties(SLV2Plugin plugin, 00985 SLV2Port port); 00986 00990 SLV2_API 00991 bool 00992 slv2_port_has_property(SLV2Plugin p, 00993 SLV2Port port, 00994 SLV2Value property_uri); 00995 00999 SLV2_API 01000 bool 01001 slv2_port_supports_event(SLV2Plugin p, 01002 SLV2Port port, 01003 SLV2Value event_uri); 01004 01010 SLV2_API 01011 SLV2Value 01012 slv2_port_get_symbol(SLV2Plugin plugin, 01013 SLV2Port port); 01014 01021 SLV2_API 01022 SLV2Value 01023 slv2_port_get_name(SLV2Plugin plugin, 01024 SLV2Port port); 01025 01033 SLV2_API 01034 SLV2Values 01035 slv2_port_get_classes(SLV2Plugin plugin, 01036 SLV2Port port); 01037 01046 SLV2_API 01047 bool 01048 slv2_port_is_a(SLV2Plugin plugin, 01049 SLV2Port port, 01050 SLV2Value port_class); 01051 01059 SLV2_API 01060 void 01061 slv2_port_get_range(SLV2Plugin plugin, 01062 SLV2Port port, 01063 SLV2Value* deflt, 01064 SLV2Value* min, 01065 SLV2Value* max); 01066 01074 SLV2_API 01075 SLV2ScalePoints 01076 slv2_port_get_scale_points(SLV2Plugin plugin, 01077 SLV2Port port); 01078 01079 01090 SLV2_API 01091 SLV2Value 01092 slv2_scale_point_get_label(SLV2ScalePoint point); 01093 01098 SLV2_API 01099 SLV2Value 01100 slv2_scale_point_get_value(SLV2ScalePoint point); 01101 01113 SLV2_API 01114 SLV2Value 01115 slv2_plugin_class_get_parent_uri(SLV2PluginClass plugin_class); 01116 01121 SLV2_API 01122 SLV2Value 01123 slv2_plugin_class_get_uri(SLV2PluginClass plugin_class); 01124 01129 SLV2_API 01130 SLV2Value slv2_plugin_class_get_label(SLV2PluginClass plugin_class); 01131 01136 SLV2_API 01137 SLV2PluginClasses 01138 slv2_plugin_class_get_children(SLV2PluginClass plugin_class); 01139 01146 typedef struct _SLV2InstanceImpl* SLV2InstanceImpl; 01147 01152 /* Instance of a plugin. 01153 This is exposed in the ABI to allow inlining of performance critical 01154 functions like slv2_instance_run (simple wrappers of functions in lv2.h). 01155 This is for performance reasons, user code should not use this definition 01156 in any way (which is why it is not machine documented). 01157 Truly private implementation details are hidden via @a ref pimpl. 01158 */ 01159 typedef struct _Instance { 01160 const LV2_Descriptor* lv2_descriptor; 01161 LV2_Handle lv2_handle; 01162 SLV2InstanceImpl pimpl; 01163 }* SLV2Instance; 01164 01178 SLV2_API 01179 SLV2Instance 01180 slv2_plugin_instantiate(SLV2Plugin plugin, 01181 double sample_rate, 01182 const LV2_Feature*const* features); 01183 01188 SLV2_API 01189 void 01190 slv2_instance_free(SLV2Instance instance); 01191 01192 #ifndef SLV2_INTERNAL 01193 01198 static inline const char* 01199 slv2_instance_get_uri(SLV2Instance instance) 01200 { 01201 return instance->lv2_descriptor->URI; 01202 } 01203 01209 static inline void 01210 slv2_instance_connect_port(SLV2Instance instance, 01211 uint32_t port_index, 01212 void* data_location) 01213 { 01214 instance->lv2_descriptor->connect_port 01215 (instance->lv2_handle, port_index, data_location); 01216 } 01217 01224 static inline void 01225 slv2_instance_activate(SLV2Instance instance) 01226 { 01227 if (instance->lv2_descriptor->activate) 01228 instance->lv2_descriptor->activate(instance->lv2_handle); 01229 } 01230 01236 static inline void 01237 slv2_instance_run(SLV2Instance instance, 01238 uint32_t sample_count) 01239 { 01240 instance->lv2_descriptor->run(instance->lv2_handle, sample_count); 01241 } 01242 01248 static inline void 01249 slv2_instance_deactivate(SLV2Instance instance) 01250 { 01251 if (instance->lv2_descriptor->deactivate) 01252 instance->lv2_descriptor->deactivate(instance->lv2_handle); 01253 } 01254 01260 static inline const void* 01261 slv2_instance_get_extension_data(SLV2Instance instance, 01262 const char* uri) 01263 { 01264 if (instance->lv2_descriptor->extension_data) 01265 return instance->lv2_descriptor->extension_data(uri); 01266 else 01267 return NULL; 01268 } 01269 01277 static inline const LV2_Descriptor* 01278 slv2_instance_get_descriptor(SLV2Instance instance) 01279 { 01280 return instance->lv2_descriptor; 01281 } 01282 01290 static inline LV2_Handle 01291 slv2_instance_get_handle(SLV2Instance instance) 01292 { 01293 return instance->lv2_handle; 01294 } 01295 01296 #endif /* SLV2_INTERNAL */ 01297 01310 SLV2_API 01311 SLV2UI 01312 slv2_uis_get_by_uri(SLV2UIs uis, 01313 SLV2Value uri); 01314 01319 SLV2_API 01320 SLV2UIs 01321 slv2_plugin_get_uis(SLV2Plugin plugin); 01322 01337 SLV2_API 01338 SLV2UI 01339 slv2_plugin_get_default_ui(SLV2Plugin plugin, 01340 SLV2Value widget_type_uri); 01341 01347 SLV2_API 01348 SLV2Value 01349 slv2_ui_get_uri(SLV2UI ui); 01350 01354 SLV2_API 01355 bool 01356 slv2_ui_supported(SLV2UI ui, 01357 SLV2Value widget_type_uri); 01358 01364 SLV2_API 01365 SLV2Values 01366 slv2_ui_get_classes(SLV2UI ui); 01367 01373 SLV2_API 01374 bool 01375 slv2_ui_is_a(SLV2UI ui, SLV2Value class_uri); 01376 01382 SLV2_API 01383 SLV2Value 01384 slv2_ui_get_bundle_uri(SLV2UI ui); 01385 01391 SLV2_API 01392 SLV2Value 01393 slv2_ui_get_binary_uri(SLV2UI ui); 01394 01406 SLV2_DEPRECATED 01407 SLV2_API 01408 SLV2UIInstance 01409 slv2_ui_instantiate(SLV2Plugin plugin, 01410 SLV2UI ui, 01411 LV2UI_Write_Function write_function, 01412 LV2UI_Controller controller, 01413 const LV2_Feature* const* features); 01414 01415 typedef uint32_t (*SLV2PortIndexFunction)(LV2UI_Controller controller, 01416 const char* port_symbol); 01417 01418 typedef uint32_t (*SLV2PortSubscribeFunction)(LV2UI_Controller controller, 01419 uint32_t port_index, 01420 uint32_t protocol); 01421 01422 typedef uint32_t (*SLV2PortUnsubscribeFunction)(LV2UI_Controller controller, 01423 uint32_t port_index, 01424 uint32_t protocol); 01425 01434 SLV2_API 01435 SLV2UIHost 01436 slv2_ui_host_new(LV2UI_Write_Function write_function, 01437 SLV2PortIndexFunction port_index_function, 01438 SLV2PortSubscribeFunction port_subscribe_function, 01439 SLV2PortUnsubscribeFunction port_unsubscribe_function); 01440 01444 SLV2_API 01445 void 01446 slv2_ui_host_free(SLV2UIHost ui_host); 01447 01467 SLV2_API 01468 SLV2UIInstance 01469 slv2_ui_instance_new(SLV2Plugin plugin, 01470 SLV2UI ui, 01471 SLV2Value widget_type_uri, 01472 SLV2UIHost ui_host, 01473 LV2UI_Controller controller, 01474 const LV2_Feature* const* features); 01475 01483 SLV2_API 01484 void 01485 slv2_ui_instance_free(SLV2UIInstance instance); 01486 01490 SLV2_API 01491 LV2UI_Widget 01492 slv2_ui_instance_get_widget(SLV2UIInstance instance); 01493 01497 SLV2_API 01498 void 01499 slv2_ui_instance_port_event(SLV2UIInstance instance, 01500 uint32_t port_index, 01501 uint32_t buffer_size, 01502 uint32_t format, 01503 const void* buffer); 01504 01508 SLV2_API 01509 const void* 01510 slv2_ui_instance_extension_data(SLV2UIInstance instance, 01511 const char* uri); 01512 01520 SLV2_API 01521 const LV2UI_Descriptor* 01522 slv2_ui_instance_get_descriptor(SLV2UIInstance instance); 01523 01531 SLV2_API 01532 LV2UI_Handle 01533 slv2_ui_instance_get_handle(SLV2UIInstance instance); 01534 01540 #ifdef __cplusplus 01541 } /* extern "C" */ 01542 #endif 01543 01544 #endif /* SLV2_SLV2_H */