SLV2 0.7.0alpha

slv2.h

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 */