summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-07-29 23:41:41 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-07-29 23:41:41 -0400
commita9691abf3b0eaca5e78bea9e8d1cb7ea700e2e1e (patch)
tree11600389bfcce38204c6d397d6fb1a0562ba600b /libs/ardour/ardour
parentc7b000f401cedb4e05721bd94f5a1622027c2950 (diff)
small steps toward getting this all working - add new JackConnection object to share jack_client_t between AudioBackend and PortEngine
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/audioengine.h5
-rw-r--r--libs/ardour/ardour/jack_audiobackend.h12
-rw-r--r--libs/ardour/ardour/jack_connection.h35
3 files changed, 47 insertions, 5 deletions
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index 422e12e9d8..d7d9ca8224 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -182,7 +182,10 @@ public:
/* The backend will cause this at the appropriate time(s)
*/
- int process_callback (pframes_t nframes);
+ int process_callback (pframes_t nframes);
+
+ int buffer_size_change (pframes_t nframes);
+ int sample_rate_change (pframes_t nframes);
private:
AudioEngine (const std::string& client_name, const std::string& session_uuid);
diff --git a/libs/ardour/ardour/jack_audiobackend.h b/libs/ardour/ardour/jack_audiobackend.h
index 218f08b55e..6d2683790c 100644
--- a/libs/ardour/ardour/jack_audiobackend.h
+++ b/libs/ardour/ardour/jack_audiobackend.h
@@ -34,6 +34,8 @@
namespace ARDOUR {
+class JackConnection;
+
class JACKAudioBackend : public AudioBackend {
public:
JACKAudioBackend (AudioEngine& e);
@@ -75,8 +77,7 @@ class JACKAudioBackend : public AudioBackend {
int freewheel (bool);
private:
- jack_client_t* volatile _jack; /* could be reset to null by SIGPIPE or another thread */
- std::string jack_client_name;
+ JackConnection* _jack_connection;
static int _xrun_callback (void *arg);
static int _graph_order_callback (void *arg);
@@ -89,8 +90,6 @@ class JACKAudioBackend : public AudioBackend {
static void _registration_callback (jack_port_id_t, int, void *);
static void _connect_callback (jack_port_id_t, jack_port_id_t, int, void *);
static void _latency_callback (jack_latency_callback_mode_t, void*);
- static void halted (void *);
- static void halted_info (jack_status_t,const char*,void *);
#ifdef HAVE_JACK_SESSION
static void _session_callback (jack_session_event_t *event, void *arg);
#endif
@@ -133,6 +132,11 @@ class JACKAudioBackend : public AudioBackend {
uint32_t _target_output_channels;
uint32_t _target_systemic_input_latency;
uint32_t _target_systemic_output_latency;
+
+ uint32_t _current_sample_rate;
+ uint32_t _current_buffer_size;
+ uint32_t _current_usecs_per_cycle;
+
};
} // namespace
diff --git a/libs/ardour/ardour/jack_connection.h b/libs/ardour/ardour/jack_connection.h
new file mode 100644
index 0000000000..02fb7c7e55
--- /dev/null
+++ b/libs/ardour/ardour/jack_connection.h
@@ -0,0 +1,35 @@
+#ifndef __libardour_jack_connection_h__
+#define __libardour_jack_connection_h__
+
+#include <string>
+#include <jack/jack.h>
+
+#include "pbd/signals.h"
+
+namespace ARDOUR {
+
+class JackConnection {
+ public:
+ JackConnection (const std::string& client_name, const std::string& session_uuid);
+ ~JackConnection ();
+
+ int open ();
+ int close ();
+ bool connected () const { return _jack != 0; }
+
+ jack_client_t* jack() const { return _jack; }
+
+ PBD::Signal1<void,const char*> Disconnected;
+
+ void halted_callback ();
+ void halted_info_callback (jack_status_t, const char*);
+
+ private:
+ jack_client_t* volatile _jack;
+ std::string client_name;
+ std::string session_uuid;
+};
+
+} // namespace
+
+#endif /* __libardour_jack_connection_h__ */