summaryrefslogtreecommitdiffstats
path: root/src/engine/Engine.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-05-12 04:34:08 +0000
committerDavid Robillard <d@drobilla.net>2009-05-12 04:34:08 +0000
commit0fd55176b99cd6bd3230afdf350687a04702bd92 (patch)
tree07f8fd4244c415bac532981c6800e0ea9beb0982 /src/engine/Engine.cpp
parenteffacccee852f5070c29f214cd2d15ce9aa2e91b (diff)
downloadingen-0fd55176b99cd6bd3230afdf350687a04702bd92.tar.gz
ingen-0fd55176b99cd6bd3230afdf350687a04702bd92.tar.bz2
ingen-0fd55176b99cd6bd3230afdf350687a04702bd92.zip
Detach/Reattach from/to Jack from UI (ticket #180).
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@1985 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/Engine.cpp')
-rw-r--r--src/engine/Engine.cpp68
1 files changed, 33 insertions, 35 deletions
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp
index 41004b97..4d984916 100644
--- a/src/engine/Engine.cpp
+++ b/src/engine/Engine.cpp
@@ -22,26 +22,26 @@
#include "raul/Deletable.hpp"
#include "raul/Maid.hpp"
#include "raul/SharedPtr.hpp"
-#include "Engine.hpp"
-#include "tuning.hpp"
-#include "Event.hpp"
-#include "common/interface/EventType.hpp"
-#include "shared/Store.hpp"
-#include "NodeFactory.hpp"
+#include "AudioDriver.hpp"
#include "ClientBroadcaster.hpp"
-#include "PatchImpl.hpp"
+#include "Engine.hpp"
#include "EngineStore.hpp"
+#include "Event.hpp"
+#include "MessageContext.hpp"
#include "MidiDriver.hpp"
+#include "NodeFactory.hpp"
#include "OSCDriver.hpp"
-#include "QueuedEventSource.hpp"
+#include "PatchImpl.hpp"
#include "PostProcessor.hpp"
-#include "events/CreatePatchEvent.hpp"
#include "PostProcessor.hpp"
-#include "AudioDriver.hpp"
-#include "ProcessSlave.hpp"
#include "ProcessContext.hpp"
-#include "MessageContext.hpp"
+#include "ProcessSlave.hpp"
+#include "QueuedEventSource.hpp"
#include "ThreadManager.hpp"
+#include "common/interface/EventType.hpp"
+#include "events/CreatePatchEvent.hpp"
+#include "shared/Store.hpp"
+#include "tuning.hpp"
using namespace std;
namespace Ingen {
@@ -182,20 +182,21 @@ Engine::activate(size_t parallelism)
_midi_driver = new DummyMidiDriver();
for (EventSources::iterator i = _event_sources.begin(); i != _event_sources.end(); ++i)
- (*i)->activate();
+ (*i)->activate_source();
// Create root patch
-
- PatchImpl* root_patch = new PatchImpl(*this, "", 1, NULL,
- _audio_driver->sample_rate(), _audio_driver->buffer_size(), 1);
- root_patch->activate();
- _world->store->add(root_patch);
- root_patch->compiled_patch(root_patch->compile());
-
- assert(_audio_driver->root_patch() == NULL);
- _audio_driver->set_root_patch(root_patch);
+ PatchImpl* root_patch = _audio_driver->root_patch();
+ if (!root_patch) {
+ root_patch = new PatchImpl(*this, "", 1, NULL,
+ _audio_driver->sample_rate(), _audio_driver->buffer_size(), 1);
+ root_patch->activate();
+ _world->store->add(root_patch);
+ root_patch->compiled_patch(root_patch->compile());
+ _audio_driver->set_root_patch(root_patch);
+ }
_audio_driver->activate();
+ _midi_driver->attach(*_audio_driver.get());
_process_slaves.clear();
_process_slaves.reserve(parallelism);
@@ -219,34 +220,31 @@ Engine::deactivate()
return;
for (EventSources::iterator i = _event_sources.begin(); i != _event_sources.end(); ++i)
- (*i)->deactivate();
+ (*i)->deactivate_source();
/*for (Tree<GraphObject*>::iterator i = _engine_store->objects().begin();
i != _engine_store->objects().end(); ++i)
if ((*i)->as_node() != NULL && (*i)->as_node()->parent() == NULL)
(*i)->as_node()->deactivate();*/
- _audio_driver->deactivate();
-
- if (_midi_driver != NULL) {
+ if (_midi_driver)
_midi_driver->deactivate();
- delete _midi_driver;
- _midi_driver = NULL;
- }
+
+ _audio_driver->deactivate();
_audio_driver->root_patch()->deactivate();
- for (size_t i=0; i < _process_slaves.size(); ++i) {
+ /*for (size_t i=0; i < _process_slaves.size(); ++i) {
delete _process_slaves[i];
- }
+ }*/
- _process_slaves.clear();
+ //_process_slaves.clear();
// Finalize any lingering events (unlikely)
- _post_processor->process();
+ //_post_processor->process();
- _audio_driver.reset();
- _event_sources.clear();
+ //_audio_driver.reset();
+ //_event_sources.clear();
_activated = false;
}