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/JackDbusDriver.cpp | 110 ++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 56 deletions(-) (limited to 'src/JackDbusDriver.cpp') diff --git a/src/JackDbusDriver.cpp b/src/JackDbusDriver.cpp index 4ab7b8c..add838d 100644 --- a/src/JackDbusDriver.cpp +++ b/src/JackDbusDriver.cpp @@ -55,7 +55,7 @@ PATCHAGE_RESTORE_WARNINGS #define JACKDBUS_PORT_TYPE_MIDI 1 JackDriver::JackDriver(ILog& log, EventSink emit_event) - : Driver{std::move(emit_event)} + : AudioDriver{std::move(emit_event)} , _log(log) , _dbus_error() , _dbus_connection(nullptr) @@ -721,6 +721,56 @@ JackDriver::disconnect(const PortID& tail_id, const PortID& head_id) return true; } +uint32_t +JackDriver::xruns() +{ + DBusMessage* reply_ptr = nullptr; + dbus_uint32_t xruns = 0u; + + if (_server_responding && !_server_started) { + return 0; + } + + if (!call(true, + JACKDBUS_IFACE_CONTROL, + "GetXruns", + &reply_ptr, + DBUS_TYPE_INVALID)) { + return 0; + } + + if (!dbus_message_get_args(reply_ptr, + &_dbus_error, + DBUS_TYPE_UINT32, + &xruns, + DBUS_TYPE_INVALID)) { + dbus_message_unref(reply_ptr); + dbus_error_free(&_dbus_error); + error_msg("Decoding reply of GetXruns failed"); + return 0; + } + + dbus_message_unref(reply_ptr); + + return xruns; +} + +void +JackDriver::reset_xruns() +{ + DBusMessage* reply_ptr = nullptr; + + if (!call(true, + JACKDBUS_IFACE_CONTROL, + "ResetXruns", + &reply_ptr, + DBUS_TYPE_INVALID)) { + return; + } + + dbus_message_unref(reply_ptr); +} + uint32_t JackDriver::buffer_size() { @@ -756,12 +806,10 @@ JackDriver::buffer_size() } bool -JackDriver::set_buffer_size(const uint32_t size) +JackDriver::set_buffer_size(const uint32_t frames) { DBusMessage* reply_ptr = nullptr; - dbus_uint32_t buffer_size = 0u; - - buffer_size = size; + dbus_uint32_t buffer_size = frames; if (!call(true, JACKDBUS_IFACE_CONTROL, @@ -778,7 +826,7 @@ JackDriver::set_buffer_size(const uint32_t size) return true; } -float +uint32_t JackDriver::sample_rate() { DBusMessage* reply_ptr = nullptr; @@ -808,56 +856,6 @@ JackDriver::sample_rate() return sample_rate; } -uint32_t -JackDriver::get_xruns() -{ - DBusMessage* reply_ptr = nullptr; - dbus_uint32_t xruns = 0u; - - if (_server_responding && !_server_started) { - return 0; - } - - if (!call(true, - JACKDBUS_IFACE_CONTROL, - "GetXruns", - &reply_ptr, - DBUS_TYPE_INVALID)) { - return 0; - } - - if (!dbus_message_get_args(reply_ptr, - &_dbus_error, - DBUS_TYPE_UINT32, - &xruns, - DBUS_TYPE_INVALID)) { - dbus_message_unref(reply_ptr); - dbus_error_free(&_dbus_error); - error_msg("Decoding reply of GetXruns failed"); - return 0; - } - - dbus_message_unref(reply_ptr); - - return xruns; -} - -void -JackDriver::reset_xruns() -{ - DBusMessage* reply_ptr = nullptr; - - if (!call(true, - JACKDBUS_IFACE_CONTROL, - "ResetXruns", - &reply_ptr, - DBUS_TYPE_INVALID)) { - return; - } - - dbus_message_unref(reply_ptr); -} - PortType JackDriver::patchage_port_type(const dbus_uint32_t dbus_port_type) const { -- cgit v1.2.1