diff options
author | David Robillard <d@drobilla.net> | 2020-11-29 17:14:35 +0100 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-11-29 18:03:31 +0100 |
commit | 78b359c44b67f4f1fff9e31dd9243af5e996f38a (patch) | |
tree | 59aeee028fd339894e94eb21fc5cdbf53a2b8c5d /src/JackDriver.cpp | |
parent | d3561e8cf1d5a289ff2ce4a26e4a970437a812d5 (diff) | |
download | patchage-78b359c44b67f4f1fff9e31dd9243af5e996f38a.tar.gz patchage-78b359c44b67f4f1fff9e31dd9243af5e996f38a.tar.bz2 patchage-78b359c44b67f4f1fff9e31dd9243af5e996f38a.zip |
Add AudioDriver interface
Diffstat (limited to 'src/JackDriver.cpp')
-rw-r--r-- | src/JackDriver.cpp | 86 |
1 files changed, 52 insertions, 34 deletions
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 <utility> 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; -} |