summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-02-05 06:20:36 +0000
committerDavid Robillard <d@drobilla.net>2007-02-05 06:20:36 +0000
commitadafa2493e84f0b8ad46760967f82cc2efdcc2c9 (patch)
tree7006e145bd3b8ebcf3fe5c4272ccf88ed2dcb2f2
parent2ddb45bc8acaf5e00e5606238efd0f40595d6b96 (diff)
downloadraul-adafa2493e84f0b8ad46760967f82cc2efdcc2c9.tar.gz
raul-adafa2493e84f0b8ad46760967f82cc2efdcc2c9.tar.bz2
raul-adafa2493e84f0b8ad46760967f82cc2efdcc2c9.zip
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
-rw-r--r--raul/JackDriver.h7
-rw-r--r--src/JackDriver.cpp28
-rw-r--r--src/RDFQuery.cpp4
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)) {