From: Robin Gareus Date: Sat, 5 Dec 2015 12:56:18 +0000 (+0100) Subject: JACK: expose --nperiods option X-Git-Tag: 4.5~289 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=7ad8ad8823b4eb05660a73411c071f4d5083dc1f;p=ardour.git JACK: expose --nperiods option --- diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc index 944fa4111c..32c9f203fa 100644 --- a/libs/backends/jack/jack_audiobackend.cc +++ b/libs/backends/jack/jack_audiobackend.cc @@ -54,6 +54,7 @@ JACKAudioBackend::JACKAudioBackend (AudioEngine& e, AudioBackendInfo& info, boos , _freewheeling (false) , _target_sample_rate (48000) , _target_buffer_size (1024) + , _target_num_periods (2) , _target_interleaved (false) , _target_input_channels (0) , _target_output_channels (0) @@ -203,6 +204,17 @@ JACKAudioBackend::available_buffer_sizes (const string& device) const return s; } +std::vector +JACKAudioBackend::available_period_sizes (const std::string& driver) const +{ + vector s; + if (ARDOUR::get_jack_audio_driver_supports_setting_period_count (driver)) { + s.push_back (2); + s.push_back (3); + } + return s; +} + uint32_t JACKAudioBackend::available_input_channel_count (const string& /*device*/) const { @@ -246,6 +258,16 @@ JACKAudioBackend::set_sample_rate (float sr) return -1; } +int +JACKAudioBackend::set_peridod_size (uint32_t nperiods) +{ + if (!available()) { + _target_num_periods = nperiods; + return 0; + } + return -1; +} + int JACKAudioBackend::set_buffer_size (uint32_t nframes) { @@ -381,6 +403,12 @@ JACKAudioBackend::buffer_size () const return _target_buffer_size; } +uint32_t +JACKAudioBackend::period_size () const +{ + return _target_num_periods; +} + bool JACKAudioBackend::interleaved () const { @@ -461,7 +489,7 @@ JACKAudioBackend::setup_jack_startup_command (bool for_latency_measurement) options.driver = _target_driver; options.samplerate = _target_sample_rate; options.period_size = _target_buffer_size; - options.num_periods = 2; + options.num_periods = _target_num_periods; options.input_device = _target_device; options.output_device = _target_device; if (for_latency_measurement) { diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h index 530e3fdfd7..54eea35f02 100644 --- a/libs/backends/jack/jack_audiobackend.h +++ b/libs/backends/jack/jack_audiobackend.h @@ -58,6 +58,7 @@ class JACKAudioBackend : public AudioBackend { std::vector available_sample_rates (const std::string& device) const; std::vector available_buffer_sizes (const std::string& device) const; + std::vector available_period_sizes (const std::string& driver) const; uint32_t available_input_channel_count (const std::string& device) const; uint32_t available_output_channel_count (const std::string& device) const; @@ -67,6 +68,7 @@ class JACKAudioBackend : public AudioBackend { int set_device_name (const std::string&); int set_sample_rate (float); int set_buffer_size (uint32_t); + int set_peridod_size (uint32_t); int set_interleaved (bool yn); int set_input_channels (uint32_t); int set_output_channels (uint32_t); @@ -80,6 +82,7 @@ class JACKAudioBackend : public AudioBackend { std::string device_name () const; float sample_rate () const; uint32_t buffer_size () const; + uint32_t period_size () const; bool interleaved () const; uint32_t input_channels () const; uint32_t output_channels () const; @@ -167,6 +170,9 @@ class JACKAudioBackend : public AudioBackend { bool can_set_systemic_midi_latencies () const { return false; } + bool can_set_period_size () const { + return true; + } int midi_event_get (pframes_t& timestamp, size_t& size, uint8_t** buf, void* port_buffer, uint32_t event_index); int midi_event_put (void* port_buffer, pframes_t timestamp, const uint8_t* buffer, size_t size); @@ -253,6 +259,7 @@ class JACKAudioBackend : public AudioBackend { std::string _target_device; float _target_sample_rate; uint32_t _target_buffer_size; + uint32_t _target_num_periods; SampleFormat _target_sample_format; bool _target_interleaved; uint32_t _target_input_channels;