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->server_running()) {
517 setup_jack_startup_command ();
520 if (_jack_connection->open ()) {
525 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
527 /* get the buffer size and sample rates established */
529 jack_sample_rate_callback (jack_get_sample_rate (_priv_jack));
530 jack_bufsize_callback (jack_get_buffer_size (_priv_jack));
532 /* Now that we have buffer size and sample rate established, the engine
533 can go ahead and do its stuff
536 engine.reestablish_ports ();
538 if (!jack_port_type_get_buffer_size) {
539 warning << _("This version of JACK is old - you should upgrade to a newer version that supports jack_port_type_get_buffer_size()") << endmsg;
542 set_jack_callbacks ();
544 if (jack_activate (_priv_jack) == 0) {
547 // error << _("cannot activate JACK client") << endmsg;
550 engine.reconnect_ports ();
556 JACKAudioBackend::stop ()
558 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
560 _jack_connection->close ();
562 _current_buffer_size = 0;
563 _current_sample_rate = 0;
565 _raw_buffer_sizes.clear();
571 JACKAudioBackend::pause ()
573 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
576 jack_deactivate (_priv_jack);
583 JACKAudioBackend::freewheel (bool onoff)
585 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
587 if (onoff == _freewheeling) {
588 /* already doing what has been asked for */
593 if (jack_set_freewheel (_priv_jack, onoff) == 0) {
594 _freewheeling = true;
601 /* --- TRANSPORT STATE MANAGEMENT --- */
604 JACKAudioBackend::transport_stop ()
606 GET_PRIVATE_JACK_POINTER (_priv_jack);
607 jack_transport_stop (_priv_jack);
611 JACKAudioBackend::transport_start ()
613 GET_PRIVATE_JACK_POINTER (_priv_jack);
614 jack_transport_start (_priv_jack);
618 JACKAudioBackend::transport_locate (framepos_t where)
620 GET_PRIVATE_JACK_POINTER (_priv_jack);
621 jack_transport_locate (_priv_jack, where);
625 JACKAudioBackend::transport_frame () const
627 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
628 return jack_get_current_transport_frame (_priv_jack);
632 JACKAudioBackend::transport_state () const
634 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, ((TransportState) JackTransportStopped));
636 return (TransportState) jack_transport_query (_priv_jack, &pos);
640 JACKAudioBackend::set_time_master (bool yn)
642 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
644 return jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
646 return jack_release_timebase (_priv_jack);
653 JACKAudioBackend::get_sync_offset (pframes_t& offset) const
656 #ifdef HAVE_JACK_VIDEO_SUPPORT
658 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
663 (void) jack_transport_query (_priv_jack, &pos);
665 if (pos.valid & JackVideoFrameOffset) {
666 offset = pos.video_offset;
679 JACKAudioBackend::sample_time ()
681 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
682 return jack_frame_time (_priv_jack);
686 JACKAudioBackend::sample_time_at_cycle_start ()
688 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
689 return jack_last_frame_time (_priv_jack);
693 JACKAudioBackend::samples_since_cycle_start ()
695 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
696 return jack_frames_since_cycle_start (_priv_jack);
702 ardour_jack_error (const char* msg)
704 error << "JACK: " << msg << endmsg;
708 JACKAudioBackend::set_jack_callbacks ()
710 GET_PRIVATE_JACK_POINTER (_priv_jack);
712 jack_set_thread_init_callback (_priv_jack, AudioEngine::thread_init_callback, 0);
714 jack_set_process_thread (_priv_jack, _process_thread, this);
715 jack_set_sample_rate_callback (_priv_jack, _sample_rate_callback, this);
716 jack_set_buffer_size_callback (_priv_jack, _bufsize_callback, this);
717 jack_set_xrun_callback (_priv_jack, _xrun_callback, this);
718 jack_set_sync_callback (_priv_jack, _jack_sync_callback, this);
719 jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
721 #ifdef HAVE_JACK_SESSION
722 if( jack_set_session_callback)
723 jack_set_session_callback (_priv_jack, _session_callback, this);
726 if (jack_set_latency_callback) {
727 jack_set_latency_callback (_priv_jack, _latency_callback, this);
730 jack_set_error_function (ardour_jack_error);
734 JACKAudioBackend::_jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
735 jack_position_t* pos, int new_position, void *arg)
737 static_cast<JACKAudioBackend*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
741 JACKAudioBackend::jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
742 jack_position_t* pos, int new_position)
744 ARDOUR::Session* session = engine.session();
747 session->jack_timebase_callback (state, nframes, pos, new_position);
752 JACKAudioBackend::_jack_sync_callback (jack_transport_state_t state, jack_position_t* pos, void* arg)
754 return static_cast<JACKAudioBackend*> (arg)->jack_sync_callback (state, pos);
758 JACKAudioBackend::jack_sync_callback (jack_transport_state_t state, jack_position_t* pos)
760 TransportState tstate;
763 case JackTransportStopped:
764 tstate = TransportStopped;
766 case JackTransportRolling:
767 tstate = TransportRolling;
769 case JackTransportLooping:
770 tstate = TransportLooping;
772 case JackTransportStarting:
773 tstate = TransportStarting;
777 return engine.sync_callback (tstate, pos->frame);
783 JACKAudioBackend::_xrun_callback (void *arg)
785 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
786 if (jab->available()) {
787 jab->engine.Xrun (); /* EMIT SIGNAL */
792 #ifdef HAVE_JACK_SESSION
794 JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
796 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
797 ARDOUR::Session* session = jab->engine.session();
800 session->jack_session_event (event);
806 JACKAudioBackend::_freewheel_callback (int onoff, void *arg)
808 static_cast<JACKAudioBackend*>(arg)->freewheel_callback (onoff);
812 JACKAudioBackend::freewheel_callback (int onoff)
814 _freewheeling = onoff;
815 engine.freewheel_callback (onoff);
819 JACKAudioBackend::_latency_callback (jack_latency_callback_mode_t mode, void* arg)
821 return static_cast<JACKAudioBackend*> (arg)->jack_latency_callback (mode);
825 JACKAudioBackend::create_process_thread (boost::function<void()> f, pthread_t* thread, size_t stacksize)
827 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
828 ThreadData* td = new ThreadData (this, f, stacksize);
830 if (jack_client_create_thread (_priv_jack, thread, jack_client_real_time_priority (_priv_jack),
831 jack_is_realtime (_priv_jack), _start_process_thread, td)) {
839 JACKAudioBackend::wait_for_process_thread_exit (AudioBackendNativeThread thr)
842 /* this doesn't actively try to stop the thread, it just waits till it exits */
843 return pthread_join (thr, &status);
847 JACKAudioBackend::_start_process_thread (void* arg)
849 ThreadData* td = reinterpret_cast<ThreadData*> (arg);
850 boost::function<void()> f = td->f;
859 JACKAudioBackend::_process_thread (void *arg)
861 return static_cast<JACKAudioBackend*> (arg)->process_thread ();
865 JACKAudioBackend::process_thread ()
867 /* JACK doesn't do this for us when we use the wait API
870 AudioEngine::thread_init_callback (this);
873 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
875 pframes_t nframes = jack_cycle_wait (_priv_jack);
877 if (engine.process_callback (nframes)) {
881 jack_cycle_signal (_priv_jack, 0);
888 JACKAudioBackend::_sample_rate_callback (pframes_t nframes, void *arg)
890 return static_cast<JACKAudioBackend*> (arg)->jack_sample_rate_callback (nframes);
894 JACKAudioBackend::jack_sample_rate_callback (pframes_t nframes)
896 _current_sample_rate = nframes;
897 return engine.sample_rate_change (nframes);
901 JACKAudioBackend::jack_latency_callback (jack_latency_callback_mode_t mode)
903 engine.latency_callback (mode == JackPlaybackLatency);
907 JACKAudioBackend::_bufsize_callback (pframes_t nframes, void *arg)
909 return static_cast<JACKAudioBackend*> (arg)->jack_bufsize_callback (nframes);
913 JACKAudioBackend::jack_bufsize_callback (pframes_t nframes)
915 /* if the size has not changed, this should be a no-op */
917 if (nframes == _current_buffer_size) {
921 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 1);
923 _current_buffer_size = nframes;
925 if (jack_port_type_get_buffer_size) {
926 _raw_buffer_sizes[DataType::AUDIO] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_AUDIO_TYPE);
927 _raw_buffer_sizes[DataType::MIDI] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_MIDI_TYPE);
930 /* Old version of JACK.
932 These crude guesses, see below where we try to get the right answers.
934 Note that our guess for MIDI deliberatey tries to overestimate
935 by a little. It would be nicer if we could get the actual
936 size from a port, but we have to use this estimate in the
937 event that there are no MIDI ports currently. If there are
938 the value will be adjusted below.
941 _raw_buffer_sizes[DataType::AUDIO] = nframes * sizeof (Sample);
942 _raw_buffer_sizes[DataType::MIDI] = nframes * 4 - (nframes/2);
945 engine.buffer_size_change (nframes);
951 JACKAudioBackend::disconnected (const char* why)
953 bool was_running = _running;
956 _current_buffer_size = 0;
957 _current_sample_rate = 0;
960 engine.halted_callback (why); /* EMIT SIGNAL */
965 JACKAudioBackend::cpu_load() const
967 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
968 return jack_cpu_load (_priv_jack);
972 JACKAudioBackend::update_latencies ()
974 GET_PRIVATE_JACK_POINTER (_priv_jack);
975 jack_recompute_total_latencies (_priv_jack);
979 JACKAudioBackend::n_physical (unsigned long flags) const
983 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, c);
985 const char ** ports = jack_get_ports (_priv_jack, NULL, NULL, JackPortIsPhysical | flags);
988 for (uint32_t i = 0; ports[i]; ++i) {
989 if (!strstr (ports[i], "Midi-Through")) {
990 DataType t = port_data_type (jack_port_by_name (_priv_jack, ports[i]));
991 if (t != DataType::NIL) {
992 c.set (t, c.get (t) + 1);
1004 JACKAudioBackend::can_change_sample_rate_when_running () const
1010 JACKAudioBackend::can_change_buffer_size_when_running () const
1016 JACKAudioBackend::control_app_name () const
1018 /* Since JACK/ALSA really don't provide particularly integrated support
1019 for the idea of a control app to be used to control a device,
1020 allow the user to take some control themselves if necessary.
1023 const char* env_value = g_getenv ("ARDOUR_DEVICE_CONTROL_APP");
1027 if (_target_driver.empty() || _target_device.empty()) {
1031 if (_target_driver == "ALSA") {
1033 if (_target_device == "Hammerfall DSP") {
1034 appname = "hdspconf";
1035 } else if (_target_device == "M Audio Delta 1010") {
1036 appname = "mudita24";
1040 appname = env_value;
1047 JACKAudioBackend::launch_control_app ()
1049 string appname = control_app_name();
1051 if (appname.empty()) {
1052 error << string_compose (_("There is no control application for the device \"%1\""), _target_device) << endmsg;
1056 std::list<string> args;
1057 args.push_back (appname);
1058 Glib::spawn_async ("", args, Glib::SPAWN_SEARCH_PATH);