summaryrefslogtreecommitdiffstats
path: root/src/server/ingen_lv2.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-01-17 00:10:50 +0100
committerDavid Robillard <d@drobilla.net>2018-01-17 00:10:50 +0100
commitbd50ebb65df099d84fcf8978c7dc1db7db3b2917 (patch)
treed9d842e08c82dcb92ca4b4494b52953735cbb851 /src/server/ingen_lv2.cpp
parent3441b4268a070418b6d7b7266d93b265ba79f45f (diff)
downloadingen-bd50ebb65df099d84fcf8978c7dc1db7db3b2917.tar.gz
ingen-bd50ebb65df099d84fcf8978c7dc1db7db3b2917.tar.bz2
ingen-bd50ebb65df099d84fcf8978c7dc1db7db3b2917.zip
Clean up Engine component memory management and trim include tree
Diffstat (limited to 'src/server/ingen_lv2.cpp')
-rw-r--r--src/server/ingen_lv2.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/server/ingen_lv2.cpp b/src/server/ingen_lv2.cpp
index 8dfea405..1b6652ae 100644
--- a/src/server/ingen_lv2.cpp
+++ b/src/server/ingen_lv2.cpp
@@ -405,7 +405,7 @@ using namespace Ingen;
using namespace Ingen::Server;
static void
-ingen_lv2_main(SPtr<Engine> engine, LV2Driver* driver)
+ingen_lv2_main(SPtr<Engine> engine, const SPtr<LV2Driver>& driver)
{
while (true) {
// Wait until there is work to be done
@@ -551,8 +551,7 @@ ingen_instantiate(const LV2_Descriptor* descriptor,
plugin->engine = engine;
plugin->world->set_engine(engine);
- SPtr<Interface> interface = SPtr<Interface>(engine->interface(),
- NullDeleter<Interface>);
+ SPtr<Interface> interface = engine->interface();
plugin->world->set_interface(interface);
@@ -600,9 +599,9 @@ ingen_connect_port(LV2_Handle instance, uint32_t port, void* data)
{
using namespace Ingen::Server;
- IngenPlugin* me = (IngenPlugin*)instance;
- Server::Engine* engine = (Server::Engine*)me->world->engine().get();
- LV2Driver* driver = (LV2Driver*)engine->driver();
+ IngenPlugin* me = (IngenPlugin*)instance;
+ Server::Engine* engine = (Server::Engine*)me->world->engine().get();
+ const SPtr<LV2Driver>& driver = static_ptr_cast<LV2Driver>(engine->driver());
if (port < driver->ports().size()) {
driver->ports().at(port)->set_buffer(data);
} else {
@@ -613,10 +612,9 @@ ingen_connect_port(LV2_Handle instance, uint32_t port, void* data)
static void
ingen_activate(LV2_Handle instance)
{
- IngenPlugin* me = (IngenPlugin*)instance;
- SPtr<Server::Engine> engine = dynamic_ptr_cast<Server::Engine>(
- me->world->engine());
- LV2Driver* driver = (LV2Driver*)engine->driver();
+ IngenPlugin* me = (IngenPlugin*)instance;
+ SPtr<Server::Engine> engine = static_ptr_cast<Server::Engine>(me->world->engine());
+ const SPtr<LV2Driver>& driver = static_ptr_cast<LV2Driver>(engine->driver());
engine->activate();
me->main = new std::thread(ingen_lv2_main, engine, driver);
}
@@ -624,9 +622,9 @@ ingen_activate(LV2_Handle instance)
static void
ingen_run(LV2_Handle instance, uint32_t sample_count)
{
- IngenPlugin* me = (IngenPlugin*)instance;
- Server::Engine* engine = (Server::Engine*)me->world->engine().get();
- LV2Driver* driver = (LV2Driver*)engine->driver();
+ IngenPlugin* me = (IngenPlugin*)instance;
+ SPtr<Server::Engine> engine = static_ptr_cast<Server::Engine>(me->world->engine());
+ const SPtr<LV2Driver>& driver = static_ptr_cast<LV2Driver>(engine->driver());
Server::ThreadManager::set_flag(Ingen::Server::THREAD_PROCESS);
Server::ThreadManager::set_flag(Ingen::Server::THREAD_IS_REAL_TIME);