From b718c77fe338c18b61280aefcf8d42c01a6299fd Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 12 Apr 2017 20:19:08 +0200 Subject: Refuse to start if driver requires a graph and one is not provided --- ingen/EngineBase.hpp | 9 +++++++++ src/ingen/ingen.cpp | 9 ++++++++- src/server/Engine.cpp | 6 ++++++ src/server/Engine.hpp | 1 + 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ingen/EngineBase.hpp b/ingen/EngineBase.hpp index f857f14a..272faa47 100644 --- a/ingen/EngineBase.hpp +++ b/ingen/EngineBase.hpp @@ -48,6 +48,15 @@ public: uint32_t block_length, size_t seq_size) = 0; + /** + Return true iff the engine and driver supports dynamic ports. + + This returns false in situations where top level ports can not be + created once the driver is running, which is the case for most + environments outside Jack. + */ + virtual bool supports_dynamic_ports() const = 0; + /** Activate the engine. */ diff --git a/src/ingen/ingen.cpp b/src/ingen/ingen.cpp index 1932b793..4eacfa97 100644 --- a/src/ingen/ingen.cpp +++ b/src/ingen/ingen.cpp @@ -158,7 +158,14 @@ main(int argc, char** argv) if (!world->load_module("jack") && !world->load_module("portaudio")) { cerr << "ingen: error: Failed to load driver module" << endl; delete world; - exit(EXIT_FAILURE); + return EXIT_FAILURE; + } + + if (!world->engine()->supports_dynamic_ports() && + !conf.option("load").is_valid()) { + cerr << "ingen: error: Initial graph required for driver" << endl; + delete world; + return EXIT_FAILURE; } } diff --git a/src/server/Engine.cpp b/src/server/Engine.cpp index 2fa079f1..8ec74829 100644 --- a/src/server/Engine.cpp +++ b/src/server/Engine.cpp @@ -399,6 +399,12 @@ Engine::init(double sample_rate, uint32_t block_length, size_t seq_size) set_driver(SPtr(new DirectDriver(*this, sample_rate, block_length, seq_size))); } +bool +Engine::supports_dynamic_ports() const +{ + return !_driver || _driver->dynamic_ports(); +} + bool Engine::activate() { diff --git a/src/server/Engine.hpp b/src/server/Engine.hpp index f951eaf3..cf13f5e6 100644 --- a/src/server/Engine.hpp +++ b/src/server/Engine.hpp @@ -77,6 +77,7 @@ public: // EngineBase methods virtual void init(double sample_rate, uint32_t block_length, size_t seq_size); + virtual bool supports_dynamic_ports() const; virtual bool activate(); virtual void deactivate(); virtual bool pending_events() const; -- cgit v1.2.1