[SCM] calf/master: + LV2: try to send configure calls via string port (work in progress, doesn't work)

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:38:43 UTC 2013


The following commit has been merged in the master branch:
commit 457f2742d050b5c965646807a26d01dda4090c59
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sun Nov 30 22:45:24 2008 +0000

    + LV2: try to send configure calls via string port (work in progress, doesn't work)

diff --git a/src/lv2gui.cpp b/src/lv2gui.cpp
index 8466a3e..41702ff 100644
--- a/src/lv2gui.cpp
+++ b/src/lv2gui.cpp
@@ -26,7 +26,9 @@
 #include <calf/gui.h>
 #include <calf/main_win.h>
 #include <calf/lv2_data_access.h>
+#include <calf/lv2_string_port.h>
 #include <calf/lv2_ui.h>
+#include <calf/lv2_uri_map.h>
 #include <calf/preset_gui.h>
 #include <calf/utils.h>
 #include <calf/lv2helpers.h>
@@ -54,6 +56,9 @@ struct plugin_proxy: public plugin_ctl_iface, public plugin_metadata_proxy
     int source_id;
     LV2_Handle instance_handle;
     LV2_Extension_Data_Feature *data_access;
+    LV2_URI_Map_Feature *uri_map;
+    map<string, int> params_by_name;
+    uint32_t string_port_uri;
     
     plugin_proxy(plugin_metadata_iface *md)
     : plugin_metadata_proxy(md)
@@ -65,8 +70,14 @@ struct plugin_proxy: public plugin_ctl_iface, public plugin_metadata_proxy
         send = true;
         param_count = get_param_count();
         params = new float[param_count];
+        string_port_uri = 0;
         for (int i = 0; i < param_count; i++)
-            params[i] = get_param_props(i)->def_value;
+        {
+            parameter_properties *pp = get_param_props(i);
+            params_by_name[pp->short_name] = i;
+            if ((pp->flags & PF_TYPEMASK) < PF_STRING)
+                params[i] = pp->def_value;
+        }
     }
     
     void setup(LV2UI_Write_Function wfn, LV2UI_Controller ctl)
@@ -84,6 +95,11 @@ struct plugin_proxy: public plugin_ctl_iface, public plugin_metadata_proxy
     virtual void set_param_value(int param_no, float value) {
         if (param_no < 0 || param_no >= param_count)
             return;
+        if ((get_param_props(param_no)->flags & PF_TYPEMASK) >= PF_STRING)
+        {
+            //assert(0);
+            return;
+        }
         params[param_no] = value;
         if (send) {
             scope_assign<bool> _a_(send, false);
@@ -102,14 +118,31 @@ struct plugin_proxy: public plugin_ctl_iface, public plugin_metadata_proxy
         return NULL;
     }
     
+    virtual char *configure(const char *key, const char *value)
+    {
+        map<string, int>::iterator i = params_by_name.find(key);
+        if (i == params_by_name.end())
+        {
+            fprintf(stderr, "ERROR: configure called for unknown key %s\n", key);
+            assert(0);
+            return NULL;
+        }
+        LV2_String_Data data;
+        
+        int idx = i->second;
+        if (string_port_uri) {
+            printf("write port\n");
+            write_function(controller, idx + get_param_port_offset(), sizeof(LV2_String_Data), string_port_uri, &data);
+        }
+        
+        return NULL;
+    }
+    
     virtual float get_level(unsigned int port) { return 0.f; }
     virtual void execute(int command_no) { assert(0); }
     void send_configures(send_configure_iface *sci) { 
         fprintf(stderr, "TODO: send_configures (non-control port configuration dump) not implemented in LV2 GUIs\n");
     }
-    void clear_preset() {
-        fprintf(stderr, "TODO: clear_preset (reset to init state) not implemented in LV2 GUIs\n");
-    }
     void resolve_instance() {
         fprintf(stderr, "CALF DEBUG: instance %p data %p\n", instance_handle, data_access);
         if (instance_handle && data_access)
@@ -120,6 +153,12 @@ struct plugin_proxy: public plugin_ctl_iface, public plugin_metadata_proxy
                 instance = calf->get_pci(instance_handle);
         }
     }
+    uint32_t map_uri(const char *mapURI, const char *keyURI)
+    {
+        if (!uri_map)
+            return 0;
+        return uri_map->uri_to_id(uri_map->callback_data, mapURI, keyURI);
+    }
         
     ~plugin_proxy()
     {
@@ -159,12 +198,14 @@ LV2UI_Handle gui_instantiate(const struct _LV2UI_Descriptor* descriptor,
     for (int i = 0; features[i]; i++)
     {
         if (!strcmp(features[i]->URI, "http://lv2plug.in/ns/ext/instance-access"))
-        {
             proxy->instance_handle = features[i]->data;
-        }
-        if (!strcmp(features[i]->URI, "http://lv2plug.in/ns/ext/data-access"))
-        {
+        else if (!strcmp(features[i]->URI, "http://lv2plug.in/ns/ext/data-access"))
             proxy->data_access = (LV2_Extension_Data_Feature *)features[i]->data;
+        else if (!strcmp(features[i]->URI, LV2_URI_MAP_URI))
+        {
+            proxy->uri_map = (LV2_URI_Map_Feature *)features[i]->data;
+            proxy->string_port_uri = proxy->map_uri("http://lv2plug.in/ns/extensions/ui", 
+                LV2_STRING_PORT_URI);
         }
     }
     proxy->resolve_instance();

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list