diff options
author | David Robillard <d@drobilla.net> | 2011-10-21 05:16:22 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2011-10-21 05:16:22 +0000 |
commit | bcc2b2a1032306711591ae59205b81ed67d08387 (patch) | |
tree | c98c936b113bc9ea5950877467eaaa8d9c13d62a /src | |
parent | d0197b2f5fadc55c5ab3bf62e96fef81d753b2de (diff) | |
download | ingen-bcc2b2a1032306711591ae59205b81ed67d08387.tar.gz ingen-bcc2b2a1032306711591ae59205b81ed67d08387.tar.bz2 ingen-bcc2b2a1032306711591ae59205b81ed67d08387.zip |
Fix running as an LV2 plugin.
Install template bundles for loading Ingen in LV2 hosts.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@3555 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src')
-rw-r--r-- | src/serialisation/Parser.cpp | 11 | ||||
-rw-r--r-- | src/server/Engine.cpp | 4 | ||||
-rw-r--r-- | src/server/Engine.hpp | 6 | ||||
-rw-r--r-- | src/server/events/Get.cpp | 15 | ||||
-rw-r--r-- | src/server/ingen_lv2.cpp | 23 | ||||
-rw-r--r-- | src/server/wscript | 12 | ||||
-rw-r--r-- | src/shared/LV2URIMap.cpp | 1 | ||||
-rw-r--r-- | src/shared/LV2URIMap.hpp | 1 |
8 files changed, 55 insertions, 18 deletions
diff --git a/src/serialisation/Parser.cpp b/src/serialisation/Parser.cpp index 27110c9d..92577294 100644 --- a/src/serialisation/Parser.cpp +++ b/src/serialisation/Parser.cpp @@ -564,10 +564,15 @@ Parser::find_patches(Ingen::Shared::World* world, std::list<PatchRecord> records; for (Sord::Iter i = model.find(nil, rdf_type, ingen_Patch); !i.end(); ++i) { - const Sord::Node patch = i.get_subject(); - Sord::Iter f = model.find(patch, rdfs_seeAlso, nil); + const Sord::Node patch = i.get_subject(); + Sord::Iter f = model.find(patch, rdfs_seeAlso, nil); + std::string patch_uri_str = patch.to_c_string(); + if (patch_uri_str[0] == '/') { + // FIXME: Kludge path to be a proper URI (not sure why this is happening) + patch_uri_str = string("file://") + patch_uri_str; + } if (!f.end()) { - records.push_back(PatchRecord(patch.to_c_string(), + records.push_back(PatchRecord(patch_uri_str, f.get_object().to_c_string())); } else { LOG(error) << "Patch has no rdfs:seeAlso" << endl; diff --git a/src/server/Engine.cpp b/src/server/Engine.cpp index 5d27ae2e..9ba52c88 100644 --- a/src/server/Engine.cpp +++ b/src/server/Engine.cpp @@ -179,6 +179,8 @@ Engine::activate() in_properties.insert(make_pair(uris.rdf_type, uris.lv2_InputPort)); in_properties.insert(make_pair(uris.rdf_type, uris.ev_EventPort)); in_properties.insert(make_pair(uris.lv2_index, 0)); + in_properties.insert(make_pair(uris.lv2_portProperty, + uris.lv2_connectionOptional)); in_properties.insert(make_pair(uris.ingenui_canvas_x, Resource::Property(32.0f, Resource::EXTERNAL))); in_properties.insert(make_pair(uris.ingenui_canvas_y, @@ -193,6 +195,8 @@ Engine::activate() out_properties.insert(make_pair(uris.rdf_type, uris.lv2_OutputPort)); out_properties.insert(make_pair(uris.rdf_type, uris.ev_EventPort)); out_properties.insert(make_pair(uris.lv2_index, 1)); + in_properties.insert(make_pair(uris.lv2_portProperty, + uris.lv2_connectionOptional)); out_properties.insert(make_pair(uris.ingenui_canvas_x, Resource::Property(128.0f, Resource::EXTERNAL))); out_properties.insert(make_pair(uris.ingenui_canvas_y, diff --git a/src/server/Engine.hpp b/src/server/Engine.hpp index b3cf6688..d4f39bd8 100644 --- a/src/server/Engine.hpp +++ b/src/server/Engine.hpp @@ -70,11 +70,11 @@ public: virtual bool main_iteration(); - void set_driver(SharedPtr<Driver> driver); + virtual void set_driver(SharedPtr<Driver> driver); - void add_event_source(SharedPtr<EventSource> source); + virtual void add_event_source(SharedPtr<EventSource> source); - void process_events(ProcessContext& context); + virtual void process_events(ProcessContext& context); Ingen::Shared::World* world() const { return _world; } diff --git a/src/server/events/Get.cpp b/src/server/events/Get.cpp index 27bdef92..ae649e1f 100644 --- a/src/server/events/Get.cpp +++ b/src/server/events/Get.cpp @@ -64,15 +64,20 @@ Get::post_process() { if (_uri == "ingen:plugins") { _request->respond_ok(); - _engine.broadcaster()->send_plugins_to(_request->client(), _plugins); + if (_request->client()) { + _engine.broadcaster()->send_plugins_to(_request->client(), _plugins); + } } else if (!_object && !_plugin) { _request->respond_error("Unable to find object requested."); } else if (_request->client()) { _request->respond_ok(); - if (_object) - ObjectSender::send_object(_request->client(), _object, true); - else if (_plugin) - _request->client()->put(_uri, _plugin->properties()); + if (_request->client()) { + if (_object) { + ObjectSender::send_object(_request->client(), _object, true); + } else if (_plugin) { + _request->client()->put(_uri, _plugin->properties()); + } + } } else { _request->respond_error("Unable to find client to send object."); } diff --git a/src/server/ingen_lv2.cpp b/src/server/ingen_lv2.cpp index c8ea9fbe..02eed484 100644 --- a/src/server/ingen_lv2.cpp +++ b/src/server/ingen_lv2.cpp @@ -17,6 +17,7 @@ */ #include <stdlib.h> +#include <time.h> #include <string> #include <vector> @@ -230,8 +231,25 @@ lv2_descriptor(uint32_t index) return index < lib.patches.size() ? &lib.patches[index]->descriptor : NULL; } +class MainThread : public Raul::Thread +{ +public: + MainThread(SharedPtr<Engine> engine) : _engine(engine) {} + +private: + virtual void _run() { + static const timespec main_rate = { 0, 125000000 }; // 1/8 second + while (_engine->main_iteration()) { + nanosleep(&main_rate, NULL); + } + } + + SharedPtr<Engine> _engine; +}; + struct IngenPlugin { Ingen::Shared::World* world; + MainThread* main; }; static LV2_Handle @@ -264,6 +282,8 @@ ingen_instantiate(const LV2_Descriptor* descriptor, SharedPtr<Server::Engine> engine(new Server::Engine(plugin->world)); plugin->world->set_local_engine(engine); + plugin->main = new MainThread(engine); + plugin->main->set_name("Main"); SharedPtr<Server::QueuedEngineInterface> interface( new Server::QueuedEngineInterface(*engine.get())); @@ -302,6 +322,8 @@ ingen_instantiate(const LV2_Descriptor* descriptor, engine->deactivate(); + plugin->world->load_module("osc"); + return (LV2_Handle)plugin; } @@ -326,6 +348,7 @@ ingen_activate(LV2_Handle instance) { IngenPlugin* me = (IngenPlugin*)instance; me->world->local_engine()->activate(); + me->main->start(); } static void diff --git a/src/server/wscript b/src/server/wscript index dd0dfa8f..e0c7a7d1 100644 --- a/src/server/wscript +++ b/src/server/wscript @@ -69,8 +69,6 @@ def build(bld): if bld.is_defined('HAVE_SOUP'): obj = bld(features = 'cxx cxxshlib') obj.source = ''' - EventSource.cpp - QueuedEngineInterface.cpp HTTPClientSender.cpp HTTPEngineReceiver.cpp ingen_http.cpp @@ -79,13 +77,12 @@ def build(bld): obj.name = 'libingen_http' obj.target = 'ingen_http' obj.install_path = '${LIBDIR}' + obj.use = 'libingen_server' autowaf.use_lib(bld, obj, core_libs + ' SOUP') if bld.is_defined('HAVE_LIBLO'): obj = bld(features = 'cxx cxxshlib') obj.source = ''' - EventSource.cpp - QueuedEngineInterface.cpp OSCClientSender.cpp OSCEngineReceiver.cpp ingen_osc.cpp @@ -95,6 +92,7 @@ def build(bld): obj.name = 'libingen_osc' obj.target = 'ingen_osc' obj.install_path = '${LIBDIR}' + obj.use = 'libingen_server' autowaf.use_lib(bld, obj, core_libs + ' LIBLO') if bld.is_defined('HAVE_JACK'): @@ -115,7 +113,7 @@ def build(bld): obj.includes = ['.', '..', '../..', '../../include'] obj.name = 'libingen_lv2' obj.target = 'ingen_lv2' - obj.install_path = '${LIBDIR}' - obj.use = 'libingen_shared' - obj.add_objects = 'libingen_server' + #obj.install_path = '${LIBDIR}' + obj.install_path = '${LV2DIR}/ingen.lv2/' + obj.use = 'libingen_server libingen_shared' autowaf.use_lib(bld, obj, core_libs) diff --git a/src/shared/LV2URIMap.cpp b/src/shared/LV2URIMap.cpp index 4ca5a033..a65b9644 100644 --- a/src/shared/LV2URIMap.cpp +++ b/src/shared/LV2URIMap.cpp @@ -96,6 +96,7 @@ LV2URIMap::LV2URIMap() , lv2_InputPort (NS_LV2 "InputPort") , lv2_OutputPort (NS_LV2 "OutputPort") , lv2_Plugin (NS_LV2 "Plugin") + , lv2_connectionOptional(NS_LV2 "connectionOptional") , lv2_default (NS_LV2 "default") , lv2_index (NS_LV2 "index") , lv2_integer (NS_LV2 "integer") diff --git a/src/shared/LV2URIMap.hpp b/src/shared/LV2URIMap.hpp index 75f6748e..8363d341 100644 --- a/src/shared/LV2URIMap.hpp +++ b/src/shared/LV2URIMap.hpp @@ -128,6 +128,7 @@ public: const Quark lv2_InputPort; const Quark lv2_OutputPort; const Quark lv2_Plugin; + const Quark lv2_connectionOptional; const Quark lv2_default; const Quark lv2_index; const Quark lv2_integer; |