diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-07-29 23:41:41 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-07-29 23:41:41 -0400 |
commit | a9691abf3b0eaca5e78bea9e8d1cb7ea700e2e1e (patch) | |
tree | 11600389bfcce38204c6d397d6fb1a0562ba600b /libs/ardour/ardour | |
parent | c7b000f401cedb4e05721bd94f5a1622027c2950 (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.h | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/jack_audiobackend.h | 12 | ||||
-rw-r--r-- | libs/ardour/ardour/jack_connection.h | 35 |
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__ */ |