From adafa2493e84f0b8ad46760967f82cc2efdcc2c9 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 5 Feb 2007 06:20:36 +0000 Subject: RDF querying bug fix (crash on empty results). Added process callback static wrapper stuff to Jack driver. git-svn-id: http://svn.drobilla.net/lad/raul@277 a436a847-0d15-0410-975c-d299462d15a1 --- raul/JackDriver.h | 7 ++++++- src/JackDriver.cpp | 28 +++++++++++++++++++++------- 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); @@ -116,6 +117,23 @@ JackDriver::jack_graph_order_cb(void* jack_driver) } +int +JackDriver::jack_xrun_cb(void* jack_driver) +{ + JackDriver* me = reinterpret_cast(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) { @@ -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(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)) { -- cgit v1.2.1