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.
24 #include <boost/scoped_ptr.hpp>
25 #include <glibmm/timer.h>
26 #include <glibmm/spawn.h>
28 #include "pbd/error.h"
30 #include "jack/jack.h"
31 #include "jack/thread.h"
33 #include "ardour/audioengine.h"
34 #include "ardour/session.h"
35 #include "ardour/types.h"
37 #include "jack_audiobackend.h"
38 #include "jack_connection.h"
39 #include "jack_utils.h"
43 using namespace ARDOUR;
48 #define GET_PRIVATE_JACK_POINTER(localvar) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return; }
49 #define GET_PRIVATE_JACK_POINTER_RET(localvar,r) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return r; }
51 JACKAudioBackend::JACKAudioBackend (AudioEngine& e, boost::shared_ptr<JackConnection> jc)
53 , _jack_connection (jc)
55 , _freewheeling (false)
56 , _target_sample_rate (48000)
57 , _target_buffer_size (1024)
58 , _target_sample_format (FormatFloat)
59 , _target_interleaved (false)
60 , _target_input_channels (0)
61 , _target_output_channels (0)
62 , _target_systemic_input_latency (0)
63 , _target_systemic_output_latency (0)
64 , _current_sample_rate (0)
65 , _current_buffer_size (0)
67 _jack_connection->Connected.connect_same_thread (jack_connection_connection, boost::bind (&JACKAudioBackend::when_connected_to_jack, this));
68 _jack_connection->Disconnected.connect_same_thread (disconnect_connection, boost::bind (&JACKAudioBackend::disconnected, this, _1));
71 JACKAudioBackend::~JACKAudioBackend()
76 JACKAudioBackend::name() const
82 JACKAudioBackend::private_handle() const
84 return _jack_connection->jack();
88 JACKAudioBackend::available() const
90 return (private_handle() != 0);
94 JACKAudioBackend::is_realtime () const
96 GET_PRIVATE_JACK_POINTER_RET (_priv_jack,false);
97 return jack_is_realtime (_priv_jack);
101 JACKAudioBackend::requires_driver_selection() const
107 JACKAudioBackend::enumerate_drivers () const
109 vector<string> currently_available;
110 get_jack_audio_driver_names (currently_available);
111 return currently_available;
115 JACKAudioBackend::set_driver (const std::string& name)
117 _target_driver = name;
121 vector<AudioBackend::DeviceStatus>
122 JACKAudioBackend::enumerate_devices () const
124 vector<string> currently_available = get_jack_device_names_for_audio_driver (_target_driver);
125 vector<DeviceStatus> statuses;
127 if (all_devices.find (_target_driver) == all_devices.end()) {
128 all_devices.insert (make_pair (_target_driver, std::set<string>()));
131 /* store every device we've found, by driver name.
133 * This is so we do not confuse ALSA, FFADO, netjack etc. devices
137 DeviceList& all (all_devices[_target_driver]);
139 for (vector<string>::const_iterator d = currently_available.begin(); d != currently_available.end(); ++d) {
143 for (DeviceList::const_iterator d = all.begin(); d != all.end(); ++d) {
144 if (find (currently_available.begin(), currently_available.end(), *d) == currently_available.end()) {
145 statuses.push_back (DeviceStatus (*d, false));
147 statuses.push_back (DeviceStatus (*d, false));
155 JACKAudioBackend::available_sample_rates (const string& /*device*/) const
160 f.push_back (sample_rate());
164 /* if JACK is not already running, just list a bunch of reasonable
165 values and let the future sort it all out.
168 f.push_back (8000.0);
169 f.push_back (16000.0);
170 f.push_back (24000.0);
171 f.push_back (32000.0);
172 f.push_back (44100.0);
173 f.push_back (48000.0);
174 f.push_back (88200.0);
175 f.push_back (96000.0);
176 f.push_back (192000.0);
177 f.push_back (384000.0);
183 JACKAudioBackend::available_buffer_sizes (const string& /*device*/) const
188 s.push_back (buffer_size());
208 JACKAudioBackend::available_input_channel_count (const string& /*device*/) const
214 JACKAudioBackend::available_output_channel_count (const string& /*device*/) const
219 /* -- parameter setting -- */
222 JACKAudioBackend::set_device_name (const string& dev)
225 /* need to stop and restart JACK for this to work, at present */
229 _target_device = dev;
234 JACKAudioBackend::set_sample_rate (float sr)
237 _target_sample_rate = sr;
241 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
243 if (sr == jack_get_sample_rate (_priv_jack)) {
251 JACKAudioBackend::set_buffer_size (uint32_t nframes)
254 _target_buffer_size = nframes;
258 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
260 if (nframes == jack_get_buffer_size (_priv_jack)) {
264 return jack_set_buffer_size (_priv_jack, nframes);
268 JACKAudioBackend::set_sample_format (SampleFormat sf)
270 /* as far as JACK clients are concerned, the hardware is always
271 * floating point format.
273 if (sf == FormatFloat) {
280 JACKAudioBackend::set_interleaved (bool yn)
282 /* as far as JACK clients are concerned, the hardware is always
292 JACKAudioBackend::set_input_channels (uint32_t cnt)
296 /* can't set a real value for this while JACK runs */
301 _target_input_channels = cnt;
307 JACKAudioBackend::set_output_channels (uint32_t cnt)
311 /* can't set a real value for this while JACK runs */
316 _target_output_channels = cnt;
322 JACKAudioBackend::set_systemic_input_latency (uint32_t l)
325 /* can't do this while JACK runs */
329 _target_systemic_input_latency = l;
335 JACKAudioBackend::set_systemic_output_latency (uint32_t l)
338 /* can't do this while JACK runs */
342 _target_systemic_output_latency = l;
347 /* --- Parameter retrieval --- */
350 JACKAudioBackend::device_name () const
352 if (!_jack_connection->in_control()) {
353 return "???"; // JACK has no way (as of fall 2013) to return
357 return _target_device;
361 JACKAudioBackend::driver_name() const
363 if (!_jack_connection->in_control()) {
364 return "???"; // JACK has no way (as of fall 2013) to return
368 return _target_driver;
372 JACKAudioBackend::sample_rate () const
374 if (!_jack_connection->in_control()) {
376 return _current_sample_rate;
381 return _target_sample_rate;
385 JACKAudioBackend::buffer_size () const
387 if (!_jack_connection->in_control()) {
389 return _current_buffer_size;
394 return _target_buffer_size;
398 JACKAudioBackend::sample_format () const
404 JACKAudioBackend::interleaved () const
410 JACKAudioBackend::input_channels () const
412 if (!_jack_connection->in_control()) {
414 return n_physical (JackPortIsInput).n_audio();
420 return n_physical (JackPortIsInput).n_audio();
422 return _target_input_channels;
428 JACKAudioBackend::output_channels () const
430 if (!_jack_connection->in_control()) {
432 return n_physical (JackPortIsOutput).n_audio();
438 return n_physical (JackPortIsOutput).n_audio();
440 return _target_output_channels;
446 JACKAudioBackend::systemic_input_latency () const
448 return _target_systemic_output_latency;
452 JACKAudioBackend::systemic_output_latency () const
454 return _target_systemic_output_latency;
458 JACKAudioBackend::raw_buffer_size(DataType t)
460 std::map<DataType,size_t>::const_iterator s = _raw_buffer_sizes.find(t);
461 return (s != _raw_buffer_sizes.end()) ? s->second : 0;
465 JACKAudioBackend::setup_jack_startup_command ()
467 /* first we map the parameters that have been set onto a
468 * JackCommandLineOptions object.
471 JackCommandLineOptions options;
473 get_jack_default_server_path (options.server_path);
474 options.driver = _target_driver;
475 options.samplerate = _target_sample_rate;
476 options.period_size = _target_buffer_size;
477 options.num_periods = 2;
478 options.input_device = _target_device;
479 options.output_device = _target_device;
480 options.input_latency = _target_systemic_input_latency;
481 options.output_latency = _target_systemic_output_latency;
482 options.input_channels = _target_input_channels;
483 options.output_channels = _target_output_channels;
484 if (_target_sample_format == FormatInt16) {
485 options.force16_bit = _target_sample_format;
487 options.realtime = true;
488 options.ports_max = 2048;
490 /* this must always be true for any server instance we start ourselves
493 options.temporary = true;
497 if (!get_jack_command_line_string (options, cmdline)) {
498 /* error, somehow - we will still try to start JACK
499 * automatically but it will be without our preferred options
504 std::cerr << "JACK command line will be: " << cmdline << std::endl;
506 write_jack_config_file (get_jack_server_user_config_file_path(), cmdline);
509 /* ---- BASIC STATE CONTROL API: start/stop/pause/freewheel --- */
512 JACKAudioBackend::start ()
516 if (_jack_connection->in_control()) {
517 /* we will be starting JACK, so set up the
518 command that JACK will use when it (auto-)starts
520 setup_jack_startup_command ();
523 if (_jack_connection->open ()) {
528 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
530 /* get the buffer size and sample rates established */
532 jack_sample_rate_callback (jack_get_sample_rate (_priv_jack));
533 jack_bufsize_callback (jack_get_buffer_size (_priv_jack));
535 /* Now that we have buffer size and sample rate established, the engine
536 can go ahead and do its stuff
539 engine.reestablish_ports ();
541 if (!jack_port_type_get_buffer_size) {
542 warning << _("This version of JACK is old - you should upgrade to a newer version that supports jack_port_type_get_buffer_size()") << endmsg;
545 set_jack_callbacks ();
547 if (jack_activate (_priv_jack) == 0) {
550 // error << _("cannot activate JACK client") << endmsg;
553 engine.reconnect_ports ();
559 JACKAudioBackend::stop ()
561 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
563 _jack_connection->close ();
565 _current_buffer_size = 0;
566 _current_sample_rate = 0;
568 _raw_buffer_sizes.clear();
574 JACKAudioBackend::pause ()
576 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
579 jack_deactivate (_priv_jack);
586 JACKAudioBackend::freewheel (bool onoff)
588 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
590 if (onoff == _freewheeling) {
591 /* already doing what has been asked for */
596 if (jack_set_freewheel (_priv_jack, onoff) == 0) {
597 _freewheeling = true;
604 /* --- TRANSPORT STATE MANAGEMENT --- */
607 JACKAudioBackend::transport_stop ()
609 GET_PRIVATE_JACK_POINTER (_priv_jack);
610 jack_transport_stop (_priv_jack);
614 JACKAudioBackend::transport_start ()
616 GET_PRIVATE_JACK_POINTER (_priv_jack);
617 jack_transport_start (_priv_jack);
621 JACKAudioBackend::transport_locate (framepos_t where)
623 GET_PRIVATE_JACK_POINTER (_priv_jack);
624 jack_transport_locate (_priv_jack, where);
628 JACKAudioBackend::transport_frame () const
630 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
631 return jack_get_current_transport_frame (_priv_jack);
635 JACKAudioBackend::transport_state () const
637 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, ((TransportState) JackTransportStopped));
639 return (TransportState) jack_transport_query (_priv_jack, &pos);
643 JACKAudioBackend::set_time_master (bool yn)
645 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
647 return jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
649 return jack_release_timebase (_priv_jack);
656 JACKAudioBackend::get_sync_offset (pframes_t& offset) const
659 #ifdef HAVE_JACK_VIDEO_SUPPORT
661 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
666 (void) jack_transport_query (_priv_jack, &pos);
668 if (pos.valid & JackVideoFrameOffset) {
669 offset = pos.video_offset;
682 JACKAudioBackend::sample_time ()
684 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
685 return jack_frame_time (_priv_jack);
689 JACKAudioBackend::sample_time_at_cycle_start ()
691 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
692 return jack_last_frame_time (_priv_jack);
696 JACKAudioBackend::samples_since_cycle_start ()
698 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
699 return jack_frames_since_cycle_start (_priv_jack);
705 ardour_jack_error (const char* msg)
707 error << "JACK: " << msg << endmsg;
711 JACKAudioBackend::set_jack_callbacks ()
713 GET_PRIVATE_JACK_POINTER (_priv_jack);
715 jack_set_thread_init_callback (_priv_jack, AudioEngine::thread_init_callback, 0);
717 jack_set_process_thread (_priv_jack, _process_thread, this);
718 jack_set_sample_rate_callback (_priv_jack, _sample_rate_callback, this);
719 jack_set_buffer_size_callback (_priv_jack, _bufsize_callback, this);
720 jack_set_xrun_callback (_priv_jack, _xrun_callback, this);
721 jack_set_sync_callback (_priv_jack, _jack_sync_callback, this);
722 jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
724 #ifdef HAVE_JACK_SESSION
725 if( jack_set_session_callback)
726 jack_set_session_callback (_priv_jack, _session_callback, this);
729 if (jack_set_latency_callback) {
730 jack_set_latency_callback (_priv_jack, _latency_callback, this);
733 jack_set_error_function (ardour_jack_error);
737 JACKAudioBackend::_jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
738 jack_position_t* pos, int new_position, void *arg)
740 static_cast<JACKAudioBackend*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
744 JACKAudioBackend::jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
745 jack_position_t* pos, int new_position)
747 ARDOUR::Session* session = engine.session();
750 session->jack_timebase_callback (state, nframes, pos, new_position);
755 JACKAudioBackend::_jack_sync_callback (jack_transport_state_t state, jack_position_t* pos, void* arg)
757 return static_cast<JACKAudioBackend*> (arg)->jack_sync_callback (state, pos);
761 JACKAudioBackend::jack_sync_callback (jack_transport_state_t state, jack_position_t* pos)
763 TransportState tstate;
766 case JackTransportStopped:
767 tstate = TransportStopped;
769 case JackTransportRolling:
770 tstate = TransportRolling;
772 case JackTransportLooping:
773 tstate = TransportLooping;
775 case JackTransportStarting:
776 tstate = TransportStarting;
780 return engine.sync_callback (tstate, pos->frame);
786 JACKAudioBackend::_xrun_callback (void *arg)
788 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
789 if (jab->available()) {
790 jab->engine.Xrun (); /* EMIT SIGNAL */
795 #ifdef HAVE_JACK_SESSION
797 JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
799 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
800 ARDOUR::Session* session = jab->engine.session();
803 session->jack_session_event (event);
809 JACKAudioBackend::_freewheel_callback (int onoff, void *arg)
811 static_cast<JACKAudioBackend*>(arg)->freewheel_callback (onoff);
815 JACKAudioBackend::freewheel_callback (int onoff)
817 _freewheeling = onoff;
818 engine.freewheel_callback (onoff);
822 JACKAudioBackend::_latency_callback (jack_latency_callback_mode_t mode, void* arg)
824 return static_cast<JACKAudioBackend*> (arg)->jack_latency_callback (mode);
828 JACKAudioBackend::create_process_thread (boost::function<void()> f, pthread_t* thread, size_t stacksize)
830 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
831 ThreadData* td = new ThreadData (this, f, stacksize);
833 if (jack_client_create_thread (_priv_jack, thread, jack_client_real_time_priority (_priv_jack),
834 jack_is_realtime (_priv_jack), _start_process_thread, td)) {
842 JACKAudioBackend::wait_for_process_thread_exit (AudioBackendNativeThread thr)
845 /* this doesn't actively try to stop the thread, it just waits till it exits */
846 return pthread_join (thr, &status);
850 JACKAudioBackend::_start_process_thread (void* arg)
852 ThreadData* td = reinterpret_cast<ThreadData*> (arg);
853 boost::function<void()> f = td->f;
862 JACKAudioBackend::_process_thread (void *arg)
864 return static_cast<JACKAudioBackend*> (arg)->process_thread ();
868 JACKAudioBackend::process_thread ()
870 /* JACK doesn't do this for us when we use the wait API
873 AudioEngine::thread_init_callback (this);
876 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
878 pframes_t nframes = jack_cycle_wait (_priv_jack);
880 if (engine.process_callback (nframes)) {
884 jack_cycle_signal (_priv_jack, 0);
891 JACKAudioBackend::_sample_rate_callback (pframes_t nframes, void *arg)
893 return static_cast<JACKAudioBackend*> (arg)->jack_sample_rate_callback (nframes);
897 JACKAudioBackend::jack_sample_rate_callback (pframes_t nframes)
899 _current_sample_rate = nframes;
900 return engine.sample_rate_change (nframes);
904 JACKAudioBackend::jack_latency_callback (jack_latency_callback_mode_t mode)
906 engine.latency_callback (mode == JackPlaybackLatency);
910 JACKAudioBackend::_bufsize_callback (pframes_t nframes, void *arg)
912 return static_cast<JACKAudioBackend*> (arg)->jack_bufsize_callback (nframes);
916 JACKAudioBackend::jack_bufsize_callback (pframes_t nframes)
918 /* if the size has not changed, this should be a no-op */
920 if (nframes == _current_buffer_size) {
924 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 1);
926 _current_buffer_size = nframes;
928 if (jack_port_type_get_buffer_size) {
929 _raw_buffer_sizes[DataType::AUDIO] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_AUDIO_TYPE);
930 _raw_buffer_sizes[DataType::MIDI] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_MIDI_TYPE);
933 /* Old version of JACK.
935 These crude guesses, see below where we try to get the right answers.
937 Note that our guess for MIDI deliberatey tries to overestimate
938 by a little. It would be nicer if we could get the actual
939 size from a port, but we have to use this estimate in the
940 event that there are no MIDI ports currently. If there are
941 the value will be adjusted below.
944 _raw_buffer_sizes[DataType::AUDIO] = nframes * sizeof (Sample);
945 _raw_buffer_sizes[DataType::MIDI] = nframes * 4 - (nframes/2);
948 engine.buffer_size_change (nframes);
954 JACKAudioBackend::disconnected (const char* why)
956 bool was_running = _running;
959 _current_buffer_size = 0;
960 _current_sample_rate = 0;
963 engine.halted_callback (why); /* EMIT SIGNAL */
968 JACKAudioBackend::cpu_load() const
970 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
971 return jack_cpu_load (_priv_jack);
975 JACKAudioBackend::update_latencies ()
977 GET_PRIVATE_JACK_POINTER (_priv_jack);
978 jack_recompute_total_latencies (_priv_jack);
982 JACKAudioBackend::n_physical (unsigned long flags) const
986 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, c);
988 const char ** ports = jack_get_ports (_priv_jack, NULL, NULL, JackPortIsPhysical | flags);
991 for (uint32_t i = 0; ports[i]; ++i) {
992 if (!strstr (ports[i], "Midi-Through")) {
993 DataType t = port_data_type (jack_port_by_name (_priv_jack, ports[i]));
994 if (t != DataType::NIL) {
995 c.set (t, c.get (t) + 1);
1007 JACKAudioBackend::can_change_sample_rate_when_running () const
1013 JACKAudioBackend::can_change_buffer_size_when_running () const
1019 JACKAudioBackend::control_app_name () const
1021 /* Since JACK/ALSA really don't provide particularly integrated support
1022 for the idea of a control app to be used to control a device,
1023 allow the user to take some control themselves if necessary.
1026 const char* env_value = g_getenv ("ARDOUR_DEVICE_CONTROL_APP");
1030 if (_target_driver.empty() || _target_device.empty()) {
1034 if (_target_driver == "ALSA") {
1036 if (_target_device == "Hammerfall DSP") {
1037 appname = "hdspconf";
1038 } else if (_target_device == "M Audio Delta 1010") {
1039 appname = "mudita24";
1043 appname = env_value;
1050 JACKAudioBackend::launch_control_app ()
1052 string appname = control_app_name();
1054 if (appname.empty()) {
1055 error << string_compose (_("There is no control application for the device \"%1\""), _target_device) << endmsg;
1059 std::list<string> args;
1060 args.push_back (appname);
1061 Glib::spawn_async ("", args, Glib::SPAWN_SEARCH_PATH);