summaryrefslogtreecommitdiff
path: root/libs/backends/jack/jack_audiobackend.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/backends/jack/jack_audiobackend.cc')
-rw-r--r--libs/backends/jack/jack_audiobackend.cc82
1 files changed, 64 insertions, 18 deletions
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc
index b3dbdcae71..1e7cb9d8d5 100644
--- a/libs/backends/jack/jack_audiobackend.cc
+++ b/libs/backends/jack/jack_audiobackend.cc
@@ -57,8 +57,8 @@ JACKAudioBackend::JACKAudioBackend (AudioEngine& e, boost::shared_ptr<JackConnec
, _target_buffer_size (1024)
, _target_sample_format (FormatFloat)
, _target_interleaved (false)
- , _target_input_channels (-1)
- , _target_output_channels (-1)
+ , _target_input_channels (0)
+ , _target_output_channels (0)
, _target_systemic_input_latency (0)
, _target_systemic_output_latency (0)
, _current_sample_rate (0)
@@ -292,7 +292,10 @@ int
JACKAudioBackend::set_input_channels (uint32_t cnt)
{
if (available()) {
- return -1;
+ if (cnt != 0) {
+ /* can't set a real value for this while JACK runs */
+ return -1;
+ }
}
_target_input_channels = cnt;
@@ -304,7 +307,10 @@ int
JACKAudioBackend::set_output_channels (uint32_t cnt)
{
if (available()) {
- return -1;
+ if (cnt != 0) {
+ /* can't set a real value for this while JACK runs */
+ return -1;
+ }
}
_target_output_channels = cnt;
@@ -316,6 +322,7 @@ int
JACKAudioBackend::set_systemic_input_latency (uint32_t l)
{
if (available()) {
+ /* can't do this while JACK runs */
return -1;
}
@@ -328,6 +335,7 @@ int
JACKAudioBackend::set_systemic_output_latency (uint32_t l)
{
if (available()) {
+ /* can't do this while JACK runs */
return -1;
}
@@ -341,18 +349,34 @@ JACKAudioBackend::set_systemic_output_latency (uint32_t l)
std::string
JACKAudioBackend::device_name () const
{
- if (available()) {
- return "???";
+ if (!_jack_connection->in_control()) {
+ return "???"; // JACK has no way (as of fall 2013) to return
+ // the device name
}
return _target_device;
}
+std::string
+JACKAudioBackend::driver_name() const
+{
+ if (!_jack_connection->in_control()) {
+ return "???"; // JACK has no way (as of fall 2013) to return
+ // the driver name
+ }
+
+ return _target_driver;
+}
+
float
JACKAudioBackend::sample_rate () const
{
- if (available()) {
- return _current_sample_rate;
+ if (!_jack_connection->in_control()) {
+ if (available()) {
+ return _current_sample_rate;
+ } else {
+ return 0;
+ }
}
return _target_sample_rate;
}
@@ -360,8 +384,12 @@ JACKAudioBackend::sample_rate () const
uint32_t
JACKAudioBackend::buffer_size () const
{
- if (available()) {
- return _current_buffer_size;
+ if (!_jack_connection->in_control()) {
+ if (available()) {
+ return _current_buffer_size;
+ } else {
+ return 0;
+ }
}
return _target_buffer_size;
}
@@ -381,19 +409,37 @@ JACKAudioBackend::interleaved () const
uint32_t
JACKAudioBackend::input_channels () const
{
- if (available()) {
- return n_physical (JackPortIsInput).n_audio();
- }
- return _target_input_channels;
+ if (!_jack_connection->in_control()) {
+ if (available()) {
+ return n_physical (JackPortIsInput).n_audio();
+ } else {
+ return 0;
+ }
+ } else {
+ if (available()) {
+ return n_physical (JackPortIsInput).n_audio();
+ } else {
+ return _target_input_channels;
+ }
+ }
}
uint32_t
JACKAudioBackend::output_channels () const
{
- if (available()) {
- return n_physical (JackPortIsOutput).n_audio();
- }
- return _target_output_channels;
+ if (!_jack_connection->in_control()) {
+ if (available()) {
+ return n_physical (JackPortIsOutput).n_audio();
+ } else {
+ return 0;
+ }
+ } else {
+ if (available()) {
+ return n_physical (JackPortIsOutput).n_audio();
+ } else {
+ return _target_output_channels;
+ }
+ }
}
uint32_t