From c5d81c429f913c16c1d616b6737dd12d4d5996c2 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 17 Dec 2010 05:03:11 +0000 Subject: Remove RaulJackDriver cruft. git-svn-id: http://svn.drobilla.net/lad/trunk/machina@2737 a436a847-0d15-0410-975c-d299462d15a1 --- src/engine/JackDriver.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 3 deletions(-) (limited to 'src/engine/JackDriver.cpp') diff --git a/src/engine/JackDriver.cpp b/src/engine/JackDriver.cpp index 3f705a9..020d833 100644 --- a/src/engine/JackDriver.cpp +++ b/src/engine/JackDriver.cpp @@ -30,6 +30,7 @@ namespace Machina { JackDriver::JackDriver(SharedPtr machine) : Driver(machine) + , _client(NULL) , _machine_changed(0) , _input_port(NULL) , _output_port(NULL) @@ -40,6 +41,7 @@ JackDriver::JackDriver(SharedPtr machine) , _quantization(0.0f) , _record_dur(_frames_unit) // = 0 , _recording(0) + , _is_activated(false) { } @@ -53,7 +55,21 @@ JackDriver::~JackDriver() void JackDriver::attach(const std::string& client_name) { - Raul::JackDriver::attach(client_name); + // Already connected + if (_client) + return; + + jack_set_error_function(jack_error_cb); + + _client = jack_client_open(client_name.c_str(), JackNullOption, NULL, NULL); + + if (_client == NULL) { + _is_activated = false; + } else { + jack_set_error_function(jack_error_cb); + jack_on_shutdown(_client, jack_shutdown_cb, this); + jack_set_process_callback(_client, jack_process_cb, this); + } if (jack_client()) { @@ -98,7 +114,34 @@ JackDriver::detach() jack_port_unregister(jack_client(), _output_port); _output_port = NULL; } - Raul::JackDriver::detach(); + + if (_client) { + deactivate(); + jack_client_close(_client); + _client = NULL; + _is_activated = false; + } +} + + +void +JackDriver::activate() +{ + if (!jack_activate(_client)) { + _is_activated = true; + } else { + _is_activated = false; + } +} + + +void +JackDriver::deactivate() +{ + if (_client) + jack_deactivate(_client); + + _is_activated = false; } @@ -108,7 +151,6 @@ JackDriver::set_machine(SharedPtr machine) if (machine == _machine) return; - cout << "DRIVER MACHINE: " << machine.get() << endl; SharedPtr last_machine = _last_machine; // Keep a reference _machine_changed.reset(0); assert(!last_machine.unique()); @@ -354,4 +396,34 @@ JackDriver::finish_record() } +int +JackDriver::jack_process_cb(jack_nframes_t nframes, void* jack_driver) +{ + JackDriver* me = reinterpret_cast(jack_driver); + + assert(me); + + me->on_process(nframes); + + return 0; +} + + +void +JackDriver::jack_shutdown_cb(void* jack_driver) +{ + JackDriver* me = reinterpret_cast(jack_driver); + assert(me); + + me->_client = NULL; +} + + +void +JackDriver::jack_error_cb(const char* msg) +{ + cerr << "[JACK] Error: " << msg << endl; +} + + } // namespace Machina -- cgit v1.2.1