diff options
-rw-r--r-- | raul/JackDriver.h | 7 | ||||
-rw-r--r-- | src/JackDriver.cpp | 28 | ||||
-rw-r--r-- | src/RDFQuery.cpp | 4 |
3 files changed, 30 insertions, 9 deletions
diff --git a/raul/JackDriver.h b/raul/JackDriver.h index 22e2002..96fdc0a 100644 --- a/raul/JackDriver.h +++ b/raul/JackDriver.h @@ -65,6 +65,9 @@ public: inline float max_delay() { return jack_get_max_delayed_usecs(_client); } inline void reset_delay() { jack_reset_max_delayed_usecs(_client); } + jack_client_t* jack_client() { return _client; } + + protected: /** Process callback. Derived classes should do all audio processing here. */ virtual void on_process(jack_nframes_t /*nframes*/) {} @@ -92,8 +95,10 @@ private: static void jack_port_registration_cb(jack_port_id_t port_id, int registered, void* me); static int jack_graph_order_cb(void* me); - static int jack_buffer_size_cb(jack_nframes_t buffer_size, void* me); static int jack_xrun_cb(void* me); + static int jack_buffer_size_cb(jack_nframes_t buffer_size, void* me); + static int jack_process_cb(jack_nframes_t nframes, void* me); + static void jack_shutdown_cb(void* me); jack_client_t* _client; diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp index a8ece4a..167a4b9 100644 --- a/src/JackDriver.cpp +++ b/src/JackDriver.cpp @@ -68,6 +68,7 @@ JackDriver::attach(const string& client_name) jack_set_graph_order_callback(_client, jack_graph_order_cb, this); jack_set_buffer_size_callback(_client, jack_buffer_size_cb, this); jack_set_xrun_callback(_client, jack_xrun_cb, this); + jack_set_process_callback(_client, jack_process_cb, this); //_is_dirty = true; _buffer_size = jack_get_buffer_size(_client); @@ -117,6 +118,23 @@ JackDriver::jack_graph_order_cb(void* jack_driver) int +JackDriver::jack_xrun_cb(void* jack_driver) +{ + JackDriver* me = reinterpret_cast<JackDriver*>(jack_driver); + + assert(me); + + me->_xruns++; + me->_xrun_delay = jack_get_xrun_delayed_usecs(me->_client); + me->reset_delay(); + + me->on_xrun(); + + return 0; +} + + +int JackDriver::jack_buffer_size_cb(jack_nframes_t buffer_size, void* jack_driver) { JackDriver* me = reinterpret_cast<JackDriver*>(jack_driver); @@ -130,19 +148,15 @@ JackDriver::jack_buffer_size_cb(jack_nframes_t buffer_size, void* jack_driver) return 0; } - + int -JackDriver::jack_xrun_cb(void* jack_driver) +JackDriver::jack_process_cb(jack_nframes_t nframes, void* jack_driver) { JackDriver* me = reinterpret_cast<JackDriver*>(jack_driver); assert(me); - me->_xruns++; - me->_xrun_delay = jack_get_xrun_delayed_usecs(me->_client); - me->reset_delay(); - - me->on_xrun(); + me->on_process(nframes); return 0; } diff --git a/src/RDFQuery.cpp b/src/RDFQuery.cpp index 471723f..a489a21 100644 --- a/src/RDFQuery.cpp +++ b/src/RDFQuery.cpp @@ -37,7 +37,9 @@ RDFQuery::run(const Glib::ustring base_uri_str) const rasqal_query_prepare(rq, (unsigned char*)_query.c_str(), base_uri); rasqal_query_results* results = rasqal_query_execute(rq); - assert(results); + + if (!results) + return result; /* Return an empty Results */ while (!rasqal_query_results_finished(results)) { |