summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2012-06-01 04:13:44 +0000
committerDavid Robillard <d@drobilla.net>2012-06-01 04:13:44 +0000
commit9680cb0fd0fae53cfa93b8524cd25b551a07d25d (patch)
tree9436362d8cdc9c50d8767ebd49ec32c888a6cc47
parent31c80e3d4d222ddd8dfaceff9b84308e99a05df4 (diff)
downloadingen-9680cb0fd0fae53cfa93b8524cd25b551a07d25d.tar.gz
ingen-9680cb0fd0fae53cfa93b8524cd25b551a07d25d.tar.bz2
ingen-9680cb0fd0fae53cfa93b8524cd25b551a07d25d.zip
Functioning MIDI input and internals when running as an LV2.
Ingen can now be used to build working LV2 synthesizers. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4491 a436a847-0d15-0410-975c-d299462d15a1
-rw-r--r--src/server/NodeFactory.cpp1
-rw-r--r--src/server/events/CreatePort.cpp1
-rw-r--r--src/server/ingen_lv2.cpp12
-rw-r--r--src/shared/AtomReader.cpp8
4 files changed, 19 insertions, 3 deletions
diff --git a/src/server/NodeFactory.cpp b/src/server/NodeFactory.cpp
index c0b4d1e9..f42d32c8 100644
--- a/src/server/NodeFactory.cpp
+++ b/src/server/NodeFactory.cpp
@@ -43,6 +43,7 @@ NodeFactory::NodeFactory(Ingen::Shared::World* world)
, _lv2_info(new LV2Info(world))
, _has_loaded(false)
{
+ load_internal_plugins();
}
NodeFactory::~NodeFactory()
diff --git a/src/server/events/CreatePort.cpp b/src/server/events/CreatePort.cpp
index ca16ef8f..684e2fb0 100644
--- a/src/server/events/CreatePort.cpp
+++ b/src/server/events/CreatePort.cpp
@@ -49,6 +49,7 @@ CreatePort::CreatePort(Engine& engine,
, _patch(NULL)
, _patch_port(NULL)
, _ports_array(NULL)
+ , _old_ports_array(NULL)
, _engine_port(NULL)
, _properties(properties)
, _is_output(is_output)
diff --git a/src/server/ingen_lv2.cpp b/src/server/ingen_lv2.cpp
index c9c6907e..a4cd4247 100644
--- a/src/server/ingen_lv2.cpp
+++ b/src/server/ingen_lv2.cpp
@@ -101,9 +101,17 @@ public:
AudioBuffer* patch_buf = (AudioBuffer*)_patch_port->buffer(0).get();
patch_buf->copy((Sample*)_buffer, 0, context.nframes() - 1);
} else {
- LV2_Atom_Sequence* seq = (LV2_Atom_Sequence*)_buffer;
- bool enqueued = false;
+ LV2_Atom_Sequence* seq = (LV2_Atom_Sequence*)_buffer;
+ bool enqueued = false;
+ Buffer* patch_buf = _patch_port->buffer(0).get();
+ patch_buf->prepare_write(context);
LV2_ATOM_SEQUENCE_FOREACH(seq, ev) {
+ if (!patch_buf->append_event(
+ ev->time.frames, ev->body.size, ev->body.type,
+ (const uint8_t*)LV2_ATOM_BODY(&ev->body))) {
+ Raul::warn("Failed to write to MIDI buffer, events lost!\n");
+ }
+
// TODO: Only enqueue appropriate atoms
enqueue_message(context, _driver, &ev->body);
enqueued = true;
diff --git a/src/shared/AtomReader.cpp b/src/shared/AtomReader.cpp
index c6ff7e18..cd871079 100644
--- a/src/shared/AtomReader.cpp
+++ b/src/shared/AtomReader.cpp
@@ -39,7 +39,13 @@ AtomReader::get_atom(const LV2_Atom* in, Raul::Atom& out)
if (in) {
if (in->type == _uris.atom_URID) {
const LV2_Atom_URID* urid = (const LV2_Atom_URID*)in;
- out = _forge.alloc_uri(_map.unmap_uri(urid->body));
+ const char* uri = _map.unmap_uri(urid->body);
+ if (uri) {
+ out = _forge.alloc_uri(_map.unmap_uri(urid->body));
+ } else {
+ Raul::error(Raul::fmt("Unable to unmap URID %1%\n")
+ % urid->body);
+ }
} else {
out = _forge.alloc(in->size, in->type, LV2_ATOM_BODY(in));
}