[SCM] calf/master: + LV2: update to the most recent LV2 context (but probably still unfinished) extension

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


The following commit has been merged in the master branch:
commit e69864765364eb18d2c69b6d4ca0ffe8e56b69cc
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Fri Dec 26 17:04:35 2008 +0000

    + LV2: update to the most recent LV2 context (but probably still unfinished) extension

diff --git a/src/calf/giface.h b/src/calf/giface.h
index 86e3800..3b53324 100644
--- a/src/calf/giface.h
+++ b/src/calf/giface.h
@@ -329,9 +329,9 @@ public:
     inline void params_reset() {}
     /// Handle 'message context' port message
     /// @arg output_ports pointer to bit array of output port "changed" flags, note that 0 = first audio input, not first parameter (use input_count + output_count)
-    inline void message_run(uint32_t *output_ports) { 
+    inline uint32_t message_run(uint32_t *valid_ports, uint32_t *output_ports) { 
         fprintf(stderr, "ERROR: message run not implemented\n");
-        // configure(param_props[parameter].short_name, dynamic_cast<>()); 
+        return 0;
     }
 };
 
diff --git a/src/calf/lv2_contexts.h b/src/calf/lv2_contexts.h
index 23cdd6e..1d43707 100644
--- a/src/calf/lv2_contexts.h
+++ b/src/calf/lv2_contexts.h
@@ -1,5 +1,5 @@
 /* LV2 OSC Messages Extension
- * Copyright (C) 2007 Dave Robillard <dave at drobilla.net>
+ * Copyright (C) 2007-2008 Dave Robillard <dave at drobilla.net>
  * 
  * This header is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the Free
@@ -19,24 +19,55 @@
 #ifndef LV2_CONTEXTS_H
 #define LV2_CONTEXTS_H
 
+#include <stdint.h>
+
 #define LV2_CONTEXTS_URI "http://lv2plug.in/ns/dev/contexts"
 
 #define LV2_CONTEXT_MESSAGE "http://lv2plug.in/ns/dev/contexts#MessageContext"
 
-#define LV2_CONTEXTS_SET_OUTPUT_WRITTEN(flags, index) \
-	((uint8_t*)flags)[(index) / 8] |= 1 << ((index) % 8)
+static inline void
+lv2_contexts_set_port_valid(uint32_t* flags, uint32_t index) {
+	((uint8_t*)flags)[(index) / 8] |= 1 << ((index) % 8);
+}
+
+static inline void
+lv2_contexts_unset_port_valid(uint32_t* flags, uint32_t index) {
+	((uint8_t*)flags)[(index) / 8] &= ~(1 << ((index) % 8));
+}
 
-#define LV2_CONTEXTS_UNSET_OUTPUT_WRITTEN(flags, index) \
-	((uint8_t*)flags)[(index) / 8] &= ~(1 << ((index) % 8))
+static inline int
+lv2_contexts_port_is_valid(uint32_t flags, uint32_t index) {
+	return ((flags & (1 << index)) != 0);
+}
 
 #include "lv2.h"
 #include <stdbool.h>
 
 
 typedef struct {
-	bool (*message_run)(LV2_Handle instance, uint32_t* outputs_written);
-	void (*message_connect_port)(LV2_Handle instance, uint32_t port, void* data);
+	/** The message run function.  This is called once to process a set of
+	 * inputs and produce a set of outputs.  Before calling the host MUST
+	 * set valid_inputs such that the bit corresponding to each input port
+	 * is 1 iff data is present.  The plugin MUST only inspect bits
+	 * corresponding to ports in the message thread.  Before returning the
+	 * plugin MUST set valid_outputs such that the bit corresponding to
+	 * each output port of the message context is 1 iff data has been written
+	 * to that port in the duration of this function invocation.
+	 * The plugin must return 1 if outputs have been written, 0 otherwise.
+	 */
+	uint32_t (*message_run)(LV2_Handle instance,
+	                        uint32_t*  valid_inputs,
+	                        uint32_t*  valid_outputs);
+
+	/** The message thread function alalogous to the LV2 connect_port
+	 * function.  This function must only be used to connect ports that
+	 * belong to the message context. */ 
+	void (*message_connect_port)(LV2_Handle instance,
+	                             uint32_t   port,
+	                             void*      data);
+
 } LV2MessageContext;
 
 
 #endif // LV2_CONTEXTS_H
+
diff --git a/src/calf/lv2wrap.h b/src/calf/lv2wrap.h
index 79aad9e..d6dbf26 100644
--- a/src/calf/lv2wrap.h
+++ b/src/calf/lv2wrap.h
@@ -115,7 +115,7 @@ struct lv2_instance: public plugin_ctl_iface, public Module
     void send_configures(send_configure_iface *sci) { 
         Module::send_configures(sci);
     }
-    void impl_message_run(uint32_t *output_ports) {
+    uint32_t impl_message_run(uint32_t *valid_inputs, uint32_t *output_ports) {
         for (unsigned int i = 0; i < message_params.size(); i++)
         {
             int pn = message_params[i];
@@ -126,7 +126,7 @@ struct lv2_instance: public plugin_ctl_iface, public Module
                 configure(pp.short_name, ((LV2_String_Data *)Module::params[pn])->data);
             }
         }
-        Module::message_run(output_ports);
+        return Module::message_run(valid_inputs, output_ports);
     }
     char *configure(const char *key, const char *value) { 
         // disambiguation - the plugin_ctl_iface version is just a stub, so don't use it
@@ -257,10 +257,9 @@ struct lv2_wrapper
         }
     }
 
-    static bool cb_message_run(LV2_Handle Instance, uint32_t *outputs_written) {
+    static uint32_t cb_message_run(LV2_Handle Instance, uint32_t *valid_inputs, uint32_t *outputs_written) {
         instance *mod = (instance *)Instance;
-        mod->impl_message_run(outputs_written);
-        return true;
+        return mod->impl_message_run(valid_inputs, outputs_written);
     }
     static void cb_run(LV2_Handle Instance, uint32_t SampleCount) {
         instance *const mod = (instance *)Instance;
diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index 6b29b6a..a1fb5ee 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -248,8 +248,9 @@ public:
     
     char *configure(const char *key, const char *value);
     void send_configures(send_configure_iface *);
-    void message_run(uint32_t *output_ports) { 
+    uint32_t message_run(uint32_t *valid_inputs, uint32_t *output_ports) { 
         // silence a default printf (which is kind of a warning about unhandled message_run)
+        return 0;
     }
 };
 
diff --git a/src/modules_small.cpp b/src/modules_small.cpp
index 2fee1d4..3bc788d 100644
--- a/src/modules_small.cpp
+++ b/src/modules_small.cpp
@@ -1250,13 +1250,13 @@ public:
     void process(uint32_t)
     {
     }
-    static bool message_run(LV2_Handle instance, uint32_t *outputs_written)
+    static uint32_t message_run(LV2_Handle instance, uint32_t *valid_inputs, uint32_t *outputs_written)
     {
         print_em_audio_module *self =  (print_em_audio_module *)instance;
         printf("message_run (events = %p, count = %d)\n", self->events, self->events->event_count);
         self->dump(self->events);
         *outputs_written = 0;
-        return false;
+        return 0;
     }
     static void message_connect_port(LV2_Handle instance, uint32_t port, void* data)
     {
@@ -1292,12 +1292,12 @@ public:
     void process(uint32_t)
     {
     }
-    static bool message_run(LV2_Handle instance, uint32_t *outputs_written)
+    static uint32_t message_run(LV2_Handle instance, uint32_t *valid_inputs, uint32_t *outputs_written)
     {
         copy_em_audio_module *self =  (copy_em_audio_module *)instance;
-        return self->message_run(outputs_written);
+        return self->message_run(valid_inputs, outputs_written);
     }
-    bool message_run(uint32_t *outputs_written)
+    uint32_t message_run(uint32_t *inputs_written, uint32_t *outputs_written)
     {
         event_port_read_iterator ri(events_in);
         event_port_write_iterator wi(events_out);
@@ -1312,7 +1312,7 @@ public:
             *wi++ = event;
         }
         *outputs_written = (events_in->event_count != 0) ? 2 : 0;
-        return true;
+        return *outputs_written != 0 ? 1 : 0;
     }
     static void message_connect_port(LV2_Handle instance, uint32_t port, void* data)
     {

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list