From 78b359c44b67f4f1fff9e31dd9243af5e996f38a Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 29 Nov 2020 17:14:35 +0100 Subject: Add AudioDriver interface --- src/JackDriver.cpp | 86 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 34 deletions(-) (limited to 'src/JackDriver.cpp') diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp index b30d45f..b3c7658 100644 --- a/src/JackDriver.cpp +++ b/src/JackDriver.cpp @@ -46,7 +46,7 @@ PATCHAGE_RESTORE_WARNINGS #include JackDriver::JackDriver(ILog& log, EventSink emit_event) - : Driver{std::move(emit_event)} + : AudioDriver{std::move(emit_event)} , _log{log} , _is_activated{false} {} @@ -108,6 +108,12 @@ JackDriver::detach() _emit_event(DriverDetachmentEvent{ClientType::jack}); } +bool +JackDriver::is_attached() const +{ + return _client != nullptr; +} + static std::string get_property(const jack_uuid_t subject, const char* const key) { @@ -299,6 +305,51 @@ JackDriver::disconnect(const PortID& tail_id, const PortID& head_id) return true; } +uint32_t +JackDriver::xruns() +{ + return _xruns; +} + +void +JackDriver::reset_xruns() +{ + _xruns = 0; +} + +uint32_t +JackDriver::buffer_size() +{ + return _is_activated ? _buffer_size : jack_get_buffer_size(_client); +} + +bool +JackDriver::set_buffer_size(const uint32_t frames) +{ + if (!_client) { + _buffer_size = frames; + return true; + } + + if (buffer_size() == frames) { + return true; + } + + if (jack_set_buffer_size(_client, frames)) { + _log.error("[JACK] Unable to set buffer size"); + return false; + } + + _buffer_size = frames; + return true; +} + +uint32_t +JackDriver::sample_rate() +{ + return jack_get_sample_rate(_client); +} + void JackDriver::jack_client_registration_cb(const char* const name, const int registered, @@ -375,36 +426,3 @@ JackDriver::jack_shutdown_cb(void* const jack_driver) me->_emit_event(DriverDetachmentEvent{ClientType::jack}); } - -jack_nframes_t -JackDriver::buffer_size() -{ - return _is_activated ? _buffer_size : jack_get_buffer_size(_client); -} - -void -JackDriver::reset_xruns() -{ - _xruns = 0; -} - -bool -JackDriver::set_buffer_size(jack_nframes_t size) -{ - if (!_client) { - _buffer_size = size; - return true; - } - - if (buffer_size() == size) { - return true; - } - - if (jack_set_buffer_size(_client, size)) { - _log.error("[JACK] Unable to set buffer size"); - return false; - } - - _buffer_size = size; - return true; -} -- cgit v1.2.1