aboutsummaryrefslogtreecommitdiffstats
path: root/src/jalv.c
diff options
context:
space:
mode:
authorHanspeter Portner <dev@open-music-kontrollers.ch>2016-01-14 15:00:16 +0100
committerDavid Robillard <d@drobilla.net>2016-07-09 20:40:19 -0400
commitb6157430e8d0ca506d539793849c568c14875547 (patch)
tree63cf8d2e08a5130f6d6852e128765ced37c7aab3 /src/jalv.c
parentbd1705ef2b7e3004c4c62fb54916045c4b50a3d9 (diff)
downloadjalv-b6157430e8d0ca506d539793849c568c14875547.tar.gz
jalv-b6157430e8d0ca506d539793849c568c14875547.tar.bz2
jalv-b6157430e8d0ca506d539793849c568c14875547.zip
Add support for lv2:CVPort via JACK metadata API
Diffstat (limited to 'src/jalv.c')
-rw-r--r--src/jalv.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/jalv.c b/src/jalv.c
index 718bd3f..fa08e64 100644
--- a/src/jalv.c
+++ b/src/jalv.c
@@ -231,6 +231,11 @@ create_port(Jalv* jalv,
} else if (lilv_port_is_a(jalv->plugin, port->lilv_port,
jalv->nodes.lv2_AudioPort)) {
port->type = TYPE_AUDIO;
+#ifdef HAVE_JACK_METADATA
+ } else if (lilv_port_is_a(jalv->plugin, port->lilv_port,
+ jalv->nodes.lv2_CVPort)) {
+ port->type = TYPE_CV;
+#endif
} else if (lilv_port_is_a(jalv->plugin, port->lilv_port,
jalv->nodes.ev_EventPort)) {
port->type = TYPE_EVENT;
@@ -375,6 +380,18 @@ activate_port(Jalv* jalv,
jalv->jack_client, lilv_node_as_string(sym),
JACK_DEFAULT_AUDIO_TYPE, jack_flags, 0);
break;
+#ifdef HAVE_JACK_METADATA
+ case TYPE_CV:
+ port->jack_port = jack_port_register(
+ jalv->jack_client, lilv_node_as_string(sym),
+ JACK_DEFAULT_AUDIO_TYPE, jack_flags, 0);
+ if(port->jack_port) {
+ jack_set_property(jalv->jack_client, jack_port_uuid(port->jack_port),
+ "http://jackaudio.org/metadata/signal-type", "CV",
+ "text/plain");
+ }
+ break;
+#endif
case TYPE_EVENT:
if (lilv_port_supports_event(
jalv->plugin, port->lilv_port, jalv->nodes.midi_MidiEvent)) {
@@ -516,7 +533,13 @@ jack_process_cb(jack_nframes_t nframes, void* data)
lilv_instance_connect_port(
jalv->instance, p,
jack_port_get_buffer(port->jack_port, nframes));
-
+#ifdef HAVE_JACK_METADATA
+ } else if (port->type == TYPE_CV && port->jack_port) {
+ /* Connect plugin port directly to Jack port buffer */
+ lilv_instance_connect_port(
+ jalv->instance, p,
+ jack_port_get_buffer(port->jack_port, nframes));
+#endif
} else if (port->type == TYPE_EVENT && port->flow == FLOW_INPUT) {
lv2_evbuf_reset(port->evbuf, true);
@@ -1061,6 +1084,7 @@ main(int argc, char** argv)
jalv.nodes.atom_Sequence = lilv_new_uri(world, LV2_ATOM__Sequence);
jalv.nodes.ev_EventPort = lilv_new_uri(world, LV2_EVENT__EventPort);
jalv.nodes.lv2_AudioPort = lilv_new_uri(world, LV2_CORE__AudioPort);
+ jalv.nodes.lv2_CVPort = lilv_new_uri(world, LV2_CORE__CVPort);
jalv.nodes.lv2_ControlPort = lilv_new_uri(world, LV2_CORE__ControlPort);
jalv.nodes.lv2_InputPort = lilv_new_uri(world, LV2_CORE__InputPort);
jalv.nodes.lv2_OutputPort = lilv_new_uri(world, LV2_CORE__OutputPort);