2 Copyright (C) 2013 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 #include <boost/scoped_ptr.hpp>
23 #include <glibmm/timer.h>
25 #include "pbd/error.h"
27 #include "midi++/manager.h"
29 #include "ardour/audioengine.h"
30 #include "ardour/types.h"
31 #include "ardour/jack_audiobackend.h"
32 #include "ardour/jack_connection.h"
33 #include "ardour/jack_portengine.h"
34 #include "ardour/jack_utils.h"
38 using namespace ARDOUR;
43 #define GET_PRIVATE_JACK_POINTER(localvar) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return; }
44 #define GET_PRIVATE_JACK_POINTER_RET(localvar,r) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return r; }
46 JACKAudioBackend::JACKAudioBackend (AudioEngine& e, boost::shared_ptr<JackConnection> jc)
48 , _jack_connection (jc)
50 , _freewheeling (false)
51 , _target_sample_rate (48000)
52 , _target_buffer_size (1024)
53 , _target_sample_format (FormatFloat)
54 , _target_interleaved (false)
55 , _target_input_channels (-1)
56 , _target_output_channels (-1)
57 , _target_systemic_input_latency (0)
58 , _target_systemic_output_latency (0)
62 JACKAudioBackend::~JACKAudioBackend()
67 JACKAudioBackend::name() const
73 JACKAudioBackend::private_handle() const
75 return _jack_connection->jack();
79 JACKAudioBackend::connected() const
81 return (private_handle() != 0);
85 JACKAudioBackend::is_realtime () const
87 GET_PRIVATE_JACK_POINTER_RET (_priv_jack,false);
88 return jack_is_realtime (_priv_jack);
92 JACKAudioBackend::requires_driver_selection() const
98 JACKAudioBackend::enumerate_drivers () const
100 vector<string> currently_available;
101 get_jack_audio_driver_names (currently_available);
102 return currently_available;
106 JACKAudioBackend::set_driver (const std::string& name)
108 _target_driver = name;
112 vector<AudioBackend::DeviceStatus>
113 JACKAudioBackend::enumerate_devices () const
115 vector<string> currently_available = get_jack_device_names_for_audio_driver (_target_driver);
116 vector<DeviceStatus> statuses;
118 if (all_devices.find (_target_driver) == all_devices.end()) {
119 all_devices.insert (make_pair (_target_driver, std::set<string>()));
122 /* store every device we've found, by driver name.
124 * This is so we do not confuse ALSA, FFADO, netjack etc. devices
128 DeviceList& all (all_devices[_target_driver]);
130 for (vector<string>::const_iterator d = currently_available.begin(); d != currently_available.end(); ++d) {
134 for (DeviceList::const_iterator d = all.begin(); d != all.end(); ++d) {
135 if (find (currently_available.begin(), currently_available.end(), *d) == currently_available.end()) {
136 statuses.push_back (DeviceStatus (*d, false));
138 statuses.push_back (DeviceStatus (*d, false));
146 JACKAudioBackend::available_sample_rates (const string& /*device*/) const
151 f.push_back (sample_rate());
155 /* if JACK is not already running, just list a bunch of reasonable
156 values and let the future sort it all out.
159 f.push_back (8000.0);
160 f.push_back (16000.0);
161 f.push_back (24000.0);
162 f.push_back (32000.0);
163 f.push_back (44100.0);
164 f.push_back (48000.0);
165 f.push_back (88200.0);
166 f.push_back (96000.0);
167 f.push_back (192000.0);
168 f.push_back (384000.0);
174 JACKAudioBackend::available_buffer_sizes (const string& /*device*/) const
179 s.push_back (buffer_size());
199 JACKAudioBackend::available_input_channel_count (const string& /*device*/) const
205 JACKAudioBackend::available_output_channel_count (const string& /*device*/) const
210 /* -- parameter setting -- */
213 JACKAudioBackend::set_device_name (const string& dev)
216 /* need to stop and restart JACK for this to work, at present */
220 _target_device = dev;
225 JACKAudioBackend::set_sample_rate (float sr)
228 _target_sample_rate = sr;
232 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
234 if (sr == jack_get_sample_rate (_priv_jack)) {
242 JACKAudioBackend::set_buffer_size (uint32_t nframes)
245 _target_buffer_size = nframes;
249 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
251 if (nframes == jack_get_buffer_size (_priv_jack)) {
255 return jack_set_buffer_size (_priv_jack, nframes);
259 JACKAudioBackend::set_sample_format (SampleFormat sf)
261 /* as far as JACK clients are concerned, the hardware is always
262 * floating point format.
264 if (sf == FormatFloat) {
271 JACKAudioBackend::set_interleaved (bool yn)
273 /* as far as JACK clients are concerned, the hardware is always
283 JACKAudioBackend::set_input_channels (uint32_t cnt)
289 _target_input_channels = cnt;
295 JACKAudioBackend::set_output_channels (uint32_t cnt)
301 _target_output_channels = cnt;
307 JACKAudioBackend::set_systemic_input_latency (uint32_t l)
313 _target_systemic_input_latency = l;
319 JACKAudioBackend::set_systemic_output_latency (uint32_t l)
325 _target_systemic_output_latency = l;
330 /* --- Parameter retrieval --- */
333 JACKAudioBackend::device_name () const
339 JACKAudioBackend::sample_rate () const
342 return _current_sample_rate;
344 return _target_sample_rate;
348 JACKAudioBackend::buffer_size () const
351 return _current_buffer_size;
353 return _target_buffer_size;
357 JACKAudioBackend::sample_format () const
363 JACKAudioBackend::interleaved () const
369 JACKAudioBackend::input_channels () const
372 return n_physical (JackPortIsInput).n_audio();
374 return _target_input_channels;
378 JACKAudioBackend::output_channels () const
381 return n_physical (JackPortIsOutput).n_audio();
383 return _target_output_channels;
387 JACKAudioBackend::systemic_input_latency () const
389 return _current_systemic_output_latency;
393 JACKAudioBackend::systemic_output_latency () const
395 return _current_systemic_output_latency;
399 JACKAudioBackend::raw_buffer_size(DataType t)
401 std::map<DataType,size_t>::const_iterator s = _raw_buffer_sizes.find(t);
402 return (s != _raw_buffer_sizes.end()) ? s->second : 0;
406 JACKAudioBackend::setup_jack_startup_command ()
408 /* first we map the parameters that have been set onto a
409 * JackCommandLineOptions object.
412 JackCommandLineOptions options;
414 get_jack_default_server_path (options.server_path);
415 options.driver = _target_driver;
416 options.samplerate = _target_sample_rate;
417 options.period_size = _target_buffer_size;
418 options.num_periods = 2;
419 options.input_device = _target_device;
420 options.output_device = _target_device;
421 options.input_latency = _target_systemic_input_latency;
422 options.output_latency = _target_systemic_output_latency;
423 if (_target_sample_format == FormatInt16) {
424 options.force16_bit = _target_sample_format;
426 options.realtime = true;
427 options.ports_max = 2048;
429 /* this must always be true for any server instance we start ourselves
432 options.temporary = true;
436 if (!get_jack_command_line_string (options, cmdline)) {
440 std::cerr << "JACK command line will be: " << cmdline << std::endl;
442 // write_jack_config_file (get_jack_server_user_config_file_path(), cmdline);
445 /* ---- BASIC STATE CONTROL API: start/stop/pause/freewheel --- */
448 JACKAudioBackend::start ()
452 if (!_jack_connection->server_running()) {
453 setup_jack_startup_command ();
456 _jack_connection->open ();
459 engine.reestablish_ports ();
461 if (!jack_port_type_get_buffer_size) {
462 warning << _("This version of JACK is old - you should upgrade to a newer version that supports jack_port_type_get_buffer_size()") << endmsg;
465 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
467 engine.sample_rate_change (jack_get_sample_rate (_priv_jack));
469 /* testing the nullity of this function name is a proxy for
470 * whether jack_activate() will definitely call the buffer size
471 * callback. with older versions of JACK, this function symbol
472 * will be null. this is sort of reliable, but not clean since
473 * weak symbol support is highly platform and compiler
476 if (!jack_port_type_get_buffer_size) {
477 jack_bufsize_callback (jack_get_buffer_size (_priv_jack));
480 set_jack_callbacks ();
482 if (jack_activate (_priv_jack) == 0) {
485 // error << _("cannot activate JACK client") << endmsg;
488 engine.reconnect_ports ();
494 JACKAudioBackend::stop ()
496 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
498 _jack_connection->close ();
500 _current_buffer_size = 0;
501 _current_sample_rate = 0;
503 _raw_buffer_sizes.clear();
509 JACKAudioBackend::pause ()
511 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
514 jack_deactivate (_priv_jack);
521 JACKAudioBackend::freewheel (bool onoff)
523 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
525 if (onoff == _freewheeling) {
526 /* already doing what has been asked for */
531 if (jack_set_freewheel (_priv_jack, onoff) == 0) {
532 _freewheeling = true;
539 /* --- TRANSPORT STATE MANAGEMENT --- */
542 JACKAudioBackend::transport_stop ()
544 GET_PRIVATE_JACK_POINTER (_priv_jack);
545 jack_transport_stop (_priv_jack);
549 JACKAudioBackend::transport_start ()
551 GET_PRIVATE_JACK_POINTER (_priv_jack);
552 jack_transport_start (_priv_jack);
556 JACKAudioBackend::transport_locate (framepos_t where)
558 GET_PRIVATE_JACK_POINTER (_priv_jack);
559 jack_transport_locate (_priv_jack, where);
563 JACKAudioBackend::transport_frame () const
565 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
566 return jack_get_current_transport_frame (_priv_jack);
570 JACKAudioBackend::transport_state () const
572 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, ((TransportState) JackTransportStopped));
574 return (TransportState) jack_transport_query (_priv_jack, &pos);
578 JACKAudioBackend::set_time_master (bool yn)
580 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
582 return jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
584 return jack_release_timebase (_priv_jack);
591 JACKAudioBackend::get_sync_offset (pframes_t& offset) const
594 #ifdef HAVE_JACK_VIDEO_SUPPORT
596 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
601 (void) jack_transport_query (_priv_jack, &pos);
603 if (pos.valid & JackVideoFrameOffset) {
604 offset = pos.video_offset;
617 JACKAudioBackend::sample_time ()
619 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
620 return jack_frame_time (_priv_jack);
624 JACKAudioBackend::sample_time_at_cycle_start ()
626 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
627 return jack_last_frame_time (_priv_jack);
631 JACKAudioBackend::samples_since_cycle_start ()
633 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
634 return jack_frames_since_cycle_start (_priv_jack);
640 ardour_jack_error (const char* msg)
642 error << "JACK: " << msg << endmsg;
646 JACKAudioBackend::set_jack_callbacks ()
648 GET_PRIVATE_JACK_POINTER (_priv_jack);
650 jack_set_thread_init_callback (_priv_jack, AudioEngine::thread_init_callback, 0);
652 jack_set_process_thread (_priv_jack, _process_thread, this);
653 jack_set_sample_rate_callback (_priv_jack, _sample_rate_callback, this);
654 jack_set_buffer_size_callback (_priv_jack, _bufsize_callback, this);
655 jack_set_xrun_callback (_priv_jack, _xrun_callback, this);
656 jack_set_sync_callback (_priv_jack, _jack_sync_callback, this);
657 jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
659 #ifdef HAVE_JACK_SESSION
660 if( jack_set_session_callback)
661 jack_set_session_callback (_priv_jack, _session_callback, this);
664 if (jack_set_latency_callback) {
665 jack_set_latency_callback (_priv_jack, _latency_callback, this);
668 jack_set_error_function (ardour_jack_error);
672 JACKAudioBackend::_jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
673 jack_position_t* pos, int new_position, void *arg)
675 static_cast<JACKAudioBackend*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
679 JACKAudioBackend::jack_timebase_callback (jack_transport_state_t state, pframes_t /*nframes*/,
680 jack_position_t* pos, int /*new_position*/)
682 TransportState tstate;
686 case JackTransportStopped:
687 tstate = TransportStopped;
689 case JackTransportRolling:
690 tstate = TransportRolling;
692 case JackTransportLooping:
693 tstate = TransportLooping;
695 case JackTransportStarting:
696 tstate = TransportStarting;
701 position = pos->frame;
704 // engine.timebase_callback (tstate, nframes, position, new_position);
708 JACKAudioBackend::_jack_sync_callback (jack_transport_state_t state, jack_position_t* pos, void* arg)
710 return static_cast<JACKAudioBackend*> (arg)->jack_sync_callback (state, pos);
714 JACKAudioBackend::jack_sync_callback (jack_transport_state_t state, jack_position_t* pos)
716 TransportState tstate;
719 case JackTransportStopped:
720 tstate = TransportStopped;
722 case JackTransportRolling:
723 tstate = TransportRolling;
725 case JackTransportLooping:
726 tstate = TransportLooping;
728 case JackTransportStarting:
729 tstate = TransportStarting;
733 return engine.sync_callback (tstate, pos->frame);
739 JACKAudioBackend::_xrun_callback (void *arg)
741 JACKAudioBackend* ae = static_cast<JACKAudioBackend*> (arg);
742 if (ae->connected()) {
743 ae->engine.Xrun (); /* EMIT SIGNAL */
748 #ifdef HAVE_JACK_SESSION
750 JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
752 JACKAudioBackend* ae = static_cast<JACKAudioBackend*> (arg);
753 if (ae->connected()) {
754 ae->engine.JackSessionEvent (event); /* EMIT SIGNAL */
760 JACKAudioBackend::_freewheel_callback (int onoff, void *arg)
762 static_cast<JACKAudioBackend*>(arg)->freewheel_callback (onoff);
766 JACKAudioBackend::freewheel_callback (int onoff)
768 _freewheeling = onoff;
769 engine.freewheel_callback (onoff);
773 JACKAudioBackend::_latency_callback (jack_latency_callback_mode_t mode, void* arg)
775 return static_cast<JACKAudioBackend*> (arg)->jack_latency_callback (mode);
779 JACKAudioBackend::create_process_thread (boost::function<void()> f, pthread_t* thread, size_t stacksize)
781 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
782 ThreadData* td = new ThreadData (this, f, stacksize);
784 if (jack_client_create_thread (_priv_jack, thread, jack_client_real_time_priority (_priv_jack),
785 jack_is_realtime (_priv_jack), _start_process_thread, td)) {
793 JACKAudioBackend::_start_process_thread (void* arg)
795 ThreadData* td = reinterpret_cast<ThreadData*> (arg);
796 boost::function<void()> f = td->f;
805 JACKAudioBackend::_process_thread (void *arg)
807 return static_cast<JACKAudioBackend*> (arg)->process_thread ();
811 JACKAudioBackend::process_thread ()
813 /* JACK doesn't do this for us when we use the wait API
816 AudioEngine::thread_init_callback (this);
819 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
821 pframes_t nframes = jack_cycle_wait (_priv_jack);
823 if (engine.process_callback (nframes)) {
827 jack_cycle_signal (_priv_jack, 0);
834 JACKAudioBackend::_sample_rate_callback (pframes_t nframes, void *arg)
836 return static_cast<JACKAudioBackend*> (arg)->jack_sample_rate_callback (nframes);
840 JACKAudioBackend::jack_sample_rate_callback (pframes_t nframes)
842 _current_sample_rate = nframes;
843 return engine.sample_rate_change (nframes);
847 JACKAudioBackend::jack_latency_callback (jack_latency_callback_mode_t mode)
849 engine.latency_callback (mode == JackPlaybackLatency);
853 JACKAudioBackend::_bufsize_callback (pframes_t nframes, void *arg)
855 return static_cast<JACKAudioBackend*> (arg)->jack_bufsize_callback (nframes);
859 JACKAudioBackend::jack_bufsize_callback (pframes_t nframes)
861 /* if the size has not changed, this should be a no-op */
863 if (nframes == _current_buffer_size) {
867 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 1);
869 _current_buffer_size = nframes;
870 _current_usecs_per_cycle = (int) floor ((((double) nframes / sample_rate())) * 1000000.0);
872 if (jack_port_type_get_buffer_size) {
873 _raw_buffer_sizes[DataType::AUDIO] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_AUDIO_TYPE);
874 _raw_buffer_sizes[DataType::MIDI] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_MIDI_TYPE);
877 /* Old version of JACK.
879 These crude guesses, see below where we try to get the right answers.
881 Note that our guess for MIDI deliberatey tries to overestimate
882 by a little. It would be nicer if we could get the actual
883 size from a port, but we have to use this estimate in the
884 event that there are no MIDI ports currently. If there are
885 the value will be adjusted below.
888 _raw_buffer_sizes[DataType::AUDIO] = nframes * sizeof (Sample);
889 _raw_buffer_sizes[DataType::MIDI] = nframes * 4 - (nframes/2);
892 engine.buffer_size_change (nframes);
898 JACKAudioBackend::disconnected (const char* why)
900 /* called from jack shutdown handler */
902 bool was_running = _running;
905 _current_buffer_size = 0;
906 _current_sample_rate = 0;
909 engine.halted_callback (why); /* EMIT SIGNAL */
913 JACKAudioBackend::cpu_load() const
915 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
916 return jack_cpu_load (_priv_jack);
920 JACKAudioBackend::update_latencies ()
922 GET_PRIVATE_JACK_POINTER (_priv_jack);
923 jack_recompute_total_latencies (_priv_jack);
927 JACKAudioBackend::n_physical (unsigned long flags) const
931 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, c);
933 const char ** ports = jack_get_ports (_priv_jack, NULL, NULL, JackPortIsPhysical | flags);
936 for (uint32_t i = 0; ports[i]; ++i) {
937 if (!strstr (ports[i], "Midi-Through")) {
938 DataType t (jack_port_type (jack_port_by_name (_priv_jack, ports[i])));
939 c.set (t, c.get (t) + 1);