summaryrefslogtreecommitdiffstats
path: root/src/JackDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-11-29 17:14:35 +0100
committerDavid Robillard <d@drobilla.net>2020-11-29 18:03:31 +0100
commit78b359c44b67f4f1fff9e31dd9243af5e996f38a (patch)
tree59aeee028fd339894e94eb21fc5cdbf53a2b8c5d /src/JackDriver.cpp
parentd3561e8cf1d5a289ff2ce4a26e4a970437a812d5 (diff)
downloadpatchage-78b359c44b67f4f1fff9e31dd9243af5e996f38a.tar.gz
patchage-78b359c44b67f4f1fff9e31dd9243af5e996f38a.tar.bz2
patchage-78b359c44b67f4f1fff9e31dd9243af5e996f38a.zip
Add AudioDriver interface
Diffstat (limited to 'src/JackDriver.cpp')
-rw-r--r--src/JackDriver.cpp86
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;
-}