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"
40 #include "jack_session.h"
44 using namespace ARDOUR;
50 #define GET_PRIVATE_JACK_POINTER(localvar) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return; }
51 #define GET_PRIVATE_JACK_POINTER_RET(localvar,r) jack_client_t* localvar = _jack_connection->jack(); if (!(localvar)) { return r; }
53 JACKAudioBackend::JACKAudioBackend (AudioEngine& e, AudioBackendInfo& info, boost::shared_ptr<JackConnection> jc)
54 : AudioBackend (e, info)
55 , _jack_connection (jc)
57 , _freewheeling (false)
58 , _target_sample_rate (48000)
59 , _target_buffer_size (1024)
60 , _target_interleaved (false)
61 , _target_input_channels (0)
62 , _target_output_channels (0)
63 , _target_systemic_input_latency (0)
64 , _target_systemic_output_latency (0)
65 , _current_sample_rate (0)
66 , _current_buffer_size (0)
69 _jack_connection->Connected.connect_same_thread (jack_connection_connection, boost::bind (&JACKAudioBackend::when_connected_to_jack, this));
70 _jack_connection->Disconnected.connect_same_thread (disconnect_connection, boost::bind (&JACKAudioBackend::disconnected, this, _1));
73 JACKAudioBackend::~JACKAudioBackend()
78 JACKAudioBackend::name() const
84 JACKAudioBackend::private_handle() const
86 return _jack_connection->jack();
90 JACKAudioBackend::available() const
92 return (private_handle() != 0);
96 JACKAudioBackend::is_realtime () const
98 GET_PRIVATE_JACK_POINTER_RET (_priv_jack,false);
99 return jack_is_realtime (_priv_jack);
103 JACKAudioBackend::requires_driver_selection() const
109 JACKAudioBackend::enumerate_drivers () const
111 vector<string> currently_available;
112 get_jack_audio_driver_names (currently_available);
113 return currently_available;
117 JACKAudioBackend::set_driver (const std::string& name)
119 _target_driver = name;
123 vector<AudioBackend::DeviceStatus>
124 JACKAudioBackend::enumerate_devices () const
126 vector<string> currently_available = get_jack_device_names_for_audio_driver (_target_driver);
127 vector<DeviceStatus> statuses;
129 if (all_devices.find (_target_driver) == all_devices.end()) {
130 all_devices.insert (make_pair (_target_driver, std::set<string>()));
133 /* store every device we've found, by driver name.
135 * This is so we do not confuse ALSA, FFADO, netjack etc. devices
139 DeviceList& all (all_devices[_target_driver]);
141 for (vector<string>::const_iterator d = currently_available.begin(); d != currently_available.end(); ++d) {
145 for (DeviceList::const_iterator d = all.begin(); d != all.end(); ++d) {
146 if (find (currently_available.begin(), currently_available.end(), *d) == currently_available.end()) {
147 statuses.push_back (DeviceStatus (*d, false));
149 statuses.push_back (DeviceStatus (*d, false));
157 JACKAudioBackend::available_sample_rates (const string& device) const
161 if (device == _target_device && available()) {
162 f.push_back (sample_rate());
166 /* if JACK is not already running, just list a bunch of reasonable
167 values and let the future sort it all out.
170 f.push_back (8000.0);
171 f.push_back (16000.0);
172 f.push_back (24000.0);
173 f.push_back (32000.0);
174 f.push_back (44100.0);
175 f.push_back (48000.0);
176 f.push_back (88200.0);
177 f.push_back (96000.0);
178 f.push_back (192000.0);
179 f.push_back (384000.0);
185 JACKAudioBackend::available_buffer_sizes (const string& device) const
189 if (device == _target_device && available()) {
190 s.push_back (buffer_size());
210 JACKAudioBackend::available_input_channel_count (const string& /*device*/) const
216 JACKAudioBackend::available_output_channel_count (const string& /*device*/) const
221 /* -- parameter setting -- */
224 JACKAudioBackend::set_device_name (const string& dev)
227 /* need to stop and restart JACK for this to work, at present */
231 _target_device = dev;
236 JACKAudioBackend::set_sample_rate (float sr)
239 _target_sample_rate = sr;
243 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
245 if (sr == jack_get_sample_rate (_priv_jack)) {
253 JACKAudioBackend::set_buffer_size (uint32_t nframes)
256 _target_buffer_size = nframes;
260 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
262 if (nframes == jack_get_buffer_size (_priv_jack)) {
266 return jack_set_buffer_size (_priv_jack, nframes);
270 JACKAudioBackend::set_interleaved (bool yn)
272 /* as far as JACK clients are concerned, the hardware is always
282 JACKAudioBackend::set_input_channels (uint32_t cnt)
286 /* can't set a real value for this while JACK runs */
291 _target_input_channels = cnt;
297 JACKAudioBackend::set_output_channels (uint32_t cnt)
301 /* can't set a real value for this while JACK runs */
306 _target_output_channels = cnt;
312 JACKAudioBackend::set_systemic_input_latency (uint32_t l)
315 /* can't do this while JACK runs */
319 _target_systemic_input_latency = l;
325 JACKAudioBackend::set_systemic_output_latency (uint32_t l)
328 /* can't do this while JACK runs */
332 _target_systemic_output_latency = l;
337 /* --- Parameter retrieval --- */
340 JACKAudioBackend::device_name () const
342 if (!_jack_connection->in_control()) {
343 return "???"; // JACK has no way (as of fall 2013) to return
347 return _target_device;
351 JACKAudioBackend::driver_name() const
353 if (!_jack_connection->in_control()) {
354 return "???"; // JACK has no way (as of fall 2013) to return
358 return _target_driver;
362 JACKAudioBackend::sample_rate () const
364 if (!_jack_connection->in_control()) {
366 return _current_sample_rate;
371 return _target_sample_rate;
375 JACKAudioBackend::buffer_size () const
377 if (!_jack_connection->in_control()) {
379 return _current_buffer_size;
384 return _target_buffer_size;
388 JACKAudioBackend::interleaved () const
394 JACKAudioBackend::midi_option () const
396 return _target_midi_option;
400 JACKAudioBackend::input_channels () const
402 if (!_jack_connection->in_control()) {
404 return n_physical (JackPortIsInput).n_audio();
410 return n_physical (JackPortIsInput).n_audio();
412 return _target_input_channels;
418 JACKAudioBackend::output_channels () const
420 if (!_jack_connection->in_control()) {
422 return n_physical (JackPortIsOutput).n_audio();
428 return n_physical (JackPortIsOutput).n_audio();
430 return _target_output_channels;
436 JACKAudioBackend::systemic_input_latency () const
438 return _target_systemic_output_latency;
442 JACKAudioBackend::systemic_output_latency () const
444 return _target_systemic_output_latency;
448 JACKAudioBackend::raw_buffer_size(DataType t)
450 std::map<DataType,size_t>::const_iterator s = _raw_buffer_sizes.find(t);
451 return (s != _raw_buffer_sizes.end()) ? s->second : 0;
455 JACKAudioBackend::setup_jack_startup_command (bool for_latency_measurement)
457 /* first we map the parameters that have been set onto a
458 * JackCommandLineOptions object.
461 JackCommandLineOptions options;
463 get_jack_default_server_path (options.server_path);
464 options.driver = _target_driver;
465 options.samplerate = _target_sample_rate;
466 options.period_size = _target_buffer_size;
467 options.num_periods = 2;
468 options.input_device = _target_device;
469 options.output_device = _target_device;
470 options.input_latency = _target_systemic_input_latency;
471 options.output_latency = _target_systemic_output_latency;
472 options.input_channels = _target_input_channels;
473 options.output_channels = _target_output_channels;
474 if (_target_sample_format == FormatInt16) {
475 options.force16_bit = _target_sample_format;
477 options.realtime = true;
478 options.ports_max = 2048;
480 ARDOUR::set_midi_option (options, _target_midi_option);
482 /* this must always be true for any server instance we start ourselves
485 options.temporary = true;
489 if (!get_jack_command_line_string (options, cmdline, for_latency_measurement)) {
490 /* error, somehow - we will still try to start JACK
491 * automatically but it will be without our preferred options
493 std::cerr << "get_jack_command_line_string () failed: using default settings." << std::endl;
497 std::cerr << "JACK command line will be: " << cmdline << std::endl;
499 write_jack_config_file (get_jack_server_user_config_file_path(), cmdline);
502 /* ---- BASIC STATE CONTROL API: start/stop/pause/freewheel --- */
505 JACKAudioBackend::_start (bool for_latency_measurement)
509 if (_jack_connection->in_control()) {
510 /* we will be starting JACK, so set up the
511 command that JACK will use when it (auto-)starts
513 setup_jack_startup_command (for_latency_measurement);
516 if (_jack_connection->open ()) {
521 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
523 /* get the buffer size and sample rates established */
525 jack_sample_rate_callback (jack_get_sample_rate (_priv_jack));
526 jack_bufsize_callback (jack_get_buffer_size (_priv_jack));
528 /* Now that we have buffer size and sample rate established, the engine
529 can go ahead and do its stuff
532 if (engine.reestablish_ports ()) {
533 error << _("Could not re-establish ports after connecting to JACK") << endmsg;
537 if (!jack_port_type_get_buffer_size) {
538 warning << _("This version of JACK is old - you should upgrade to a newer version that supports jack_port_type_get_buffer_size()") << endmsg;
541 set_jack_callbacks ();
543 if (jack_activate (_priv_jack) == 0) {
546 // error << _("cannot activate JACK client") << endmsg;
549 engine.reconnect_ports ();
555 JACKAudioBackend::stop ()
557 _running = false; // no 'engine halted message'.
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::freewheel (bool onoff)
573 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
575 if (onoff == _freewheeling) {
576 /* already doing what has been asked for */
581 if (jack_set_freewheel (_priv_jack, onoff) == 0) {
582 _freewheeling = onoff;
589 /* --- TRANSPORT STATE MANAGEMENT --- */
592 JACKAudioBackend::transport_stop ()
594 GET_PRIVATE_JACK_POINTER (_priv_jack);
595 jack_transport_stop (_priv_jack);
599 JACKAudioBackend::transport_start ()
601 GET_PRIVATE_JACK_POINTER (_priv_jack);
602 jack_transport_start (_priv_jack);
606 JACKAudioBackend::transport_locate (framepos_t where)
608 GET_PRIVATE_JACK_POINTER (_priv_jack);
609 jack_transport_locate (_priv_jack, where);
613 JACKAudioBackend::transport_frame () const
615 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
616 return jack_get_current_transport_frame (_priv_jack);
620 JACKAudioBackend::transport_state () const
622 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, ((TransportState) JackTransportStopped));
624 return (TransportState) jack_transport_query (_priv_jack, &pos);
628 JACKAudioBackend::set_time_master (bool yn)
630 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
632 return jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
634 return jack_release_timebase (_priv_jack);
641 JACKAudioBackend::get_sync_offset (pframes_t& offset) const
644 #ifdef HAVE_JACK_VIDEO_SUPPORT
646 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
651 (void) jack_transport_query (_priv_jack, &pos);
653 if (pos.valid & JackVideoFrameOffset) {
654 offset = pos.video_offset;
667 JACKAudioBackend::sample_time ()
669 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
670 return jack_frame_time (_priv_jack);
674 JACKAudioBackend::sample_time_at_cycle_start ()
676 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
677 return jack_last_frame_time (_priv_jack);
681 JACKAudioBackend::samples_since_cycle_start ()
683 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
684 return jack_frames_since_cycle_start (_priv_jack);
690 ardour_jack_error (const char* msg)
692 error << "JACK: " << msg << endmsg;
696 JACKAudioBackend::set_jack_callbacks ()
698 GET_PRIVATE_JACK_POINTER (_priv_jack);
700 jack_set_thread_init_callback (_priv_jack, AudioEngine::thread_init_callback, 0);
702 jack_set_process_thread (_priv_jack, _process_thread, this);
703 jack_set_sample_rate_callback (_priv_jack, _sample_rate_callback, this);
704 jack_set_buffer_size_callback (_priv_jack, _bufsize_callback, this);
705 jack_set_xrun_callback (_priv_jack, _xrun_callback, this);
706 jack_set_sync_callback (_priv_jack, _jack_sync_callback, this);
707 jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
709 #ifdef HAVE_JACK_SESSION
710 if( jack_set_session_callback)
711 jack_set_session_callback (_priv_jack, _session_callback, this);
714 if (jack_set_latency_callback) {
715 jack_set_latency_callback (_priv_jack, _latency_callback, this);
718 jack_set_error_function (ardour_jack_error);
722 JACKAudioBackend::_jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
723 jack_position_t* pos, int new_position, void *arg)
725 static_cast<JACKAudioBackend*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
729 JACKAudioBackend::jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
730 jack_position_t* pos, int new_position)
732 ARDOUR::Session* session = engine.session();
735 JACKSession jsession (session);
736 jsession.timebase_callback (state, nframes, pos, new_position);
741 JACKAudioBackend::_jack_sync_callback (jack_transport_state_t state, jack_position_t* pos, void* arg)
743 return static_cast<JACKAudioBackend*> (arg)->jack_sync_callback (state, pos);
747 JACKAudioBackend::jack_sync_callback (jack_transport_state_t state, jack_position_t* pos)
749 TransportState tstate;
750 bool tstate_valid = true;
753 case JackTransportRolling:
754 tstate = TransportRolling;
756 case JackTransportLooping:
757 tstate = TransportLooping;
759 case JackTransportStarting:
760 tstate = TransportStarting;
762 case JackTransportStopped:
763 tstate = TransportStopped;
766 // ignore "unofficial" states like JackTransportNetStarting (jackd2)
767 tstate_valid = false;
772 return engine.sync_callback (tstate, pos->frame);
779 JACKAudioBackend::_xrun_callback (void *arg)
781 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
782 if (jab->available()) {
783 jab->engine.Xrun (); /* EMIT SIGNAL */
789 JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
791 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
792 ARDOUR::Session* session = jab->engine.session();
795 JACKSession jsession (session);
796 jsession.session_event (event);
801 JACKAudioBackend::_freewheel_callback (int onoff, void *arg)
803 static_cast<JACKAudioBackend*>(arg)->freewheel_callback (onoff);
807 JACKAudioBackend::freewheel_callback (int onoff)
809 _freewheeling = onoff;
810 engine.freewheel_callback (onoff);
814 JACKAudioBackend::_latency_callback (jack_latency_callback_mode_t mode, void* arg)
816 return static_cast<JACKAudioBackend*> (arg)->jack_latency_callback (mode);
820 JACKAudioBackend::create_process_thread (boost::function<void()> f)
822 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
824 jack_native_thread_t thread_id;
825 ThreadData* td = new ThreadData (this, f, thread_stack_size());
827 if (jack_client_create_thread (_priv_jack, &thread_id, jack_client_real_time_priority (_priv_jack),
828 jack_is_realtime (_priv_jack), _start_process_thread, td)) {
832 _jack_threads.push_back(thread_id);
837 JACKAudioBackend::join_process_threads ()
839 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
843 for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
844 i != _jack_threads.end(); i++) {
846 #if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined(PLATFORM_WINDOWS)
847 if (jack_client_stop_thread (_priv_jack, *i) != 0) {
850 if (pthread_join (*i, &status) != 0) {
852 error << "AudioEngine: cannot stop process thread" << endmsg;
857 _jack_threads.clear();
863 JACKAudioBackend::in_process_thread ()
865 for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
866 i != _jack_threads.end(); i++) {
868 #ifdef COMPILER_MINGW
869 if (*i == GetCurrentThread()) {
873 if (pthread_equal (*i, pthread_self()) != 0) {
883 JACKAudioBackend::process_thread_count ()
885 return _jack_threads.size();
889 JACKAudioBackend::_start_process_thread (void* arg)
891 ThreadData* td = reinterpret_cast<ThreadData*> (arg);
892 boost::function<void()> f = td->f;
901 JACKAudioBackend::_process_thread (void *arg)
903 return static_cast<JACKAudioBackend*> (arg)->process_thread ();
907 JACKAudioBackend::process_thread ()
909 /* JACK doesn't do this for us when we use the wait API
912 AudioEngine::thread_init_callback (this);
915 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
917 pframes_t nframes = jack_cycle_wait (_priv_jack);
919 if (engine.process_callback (nframes)) {
923 jack_cycle_signal (_priv_jack, 0);
930 JACKAudioBackend::_sample_rate_callback (pframes_t nframes, void *arg)
932 return static_cast<JACKAudioBackend*> (arg)->jack_sample_rate_callback (nframes);
936 JACKAudioBackend::jack_sample_rate_callback (pframes_t nframes)
938 _current_sample_rate = nframes;
939 return engine.sample_rate_change (nframes);
943 JACKAudioBackend::jack_latency_callback (jack_latency_callback_mode_t mode)
945 engine.latency_callback (mode == JackPlaybackLatency);
949 JACKAudioBackend::_bufsize_callback (pframes_t nframes, void *arg)
951 return static_cast<JACKAudioBackend*> (arg)->jack_bufsize_callback (nframes);
955 JACKAudioBackend::jack_bufsize_callback (pframes_t nframes)
957 /* if the size has not changed, this should be a no-op */
959 if (nframes == _current_buffer_size) {
963 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 1);
965 _current_buffer_size = nframes;
967 if (jack_port_type_get_buffer_size) {
968 _raw_buffer_sizes[DataType::AUDIO] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_AUDIO_TYPE);
969 _raw_buffer_sizes[DataType::MIDI] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_MIDI_TYPE);
972 /* Old version of JACK.
974 These crude guesses, see below where we try to get the right answers.
976 Note that our guess for MIDI deliberatey tries to overestimate
977 by a little. It would be nicer if we could get the actual
978 size from a port, but we have to use this estimate in the
979 event that there are no MIDI ports currently. If there are
980 the value will be adjusted below.
983 _raw_buffer_sizes[DataType::AUDIO] = nframes * sizeof (Sample);
984 _raw_buffer_sizes[DataType::MIDI] = nframes * 4 - (nframes/2);
987 engine.buffer_size_change (nframes);
993 JACKAudioBackend::disconnected (const char* why)
995 bool was_running = _running;
998 _current_buffer_size = 0;
999 _current_sample_rate = 0;
1002 engine.halted_callback (why); /* EMIT SIGNAL */
1007 JACKAudioBackend::dsp_load() const
1009 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
1010 return jack_cpu_load (_priv_jack);
1014 JACKAudioBackend::update_latencies ()
1016 GET_PRIVATE_JACK_POINTER (_priv_jack);
1017 jack_recompute_total_latencies (_priv_jack);
1021 JACKAudioBackend::n_physical (unsigned long flags) const
1025 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, c);
1027 const char ** ports = jack_get_ports (_priv_jack, NULL, NULL, JackPortIsPhysical | flags);
1030 for (uint32_t i = 0; ports[i]; ++i) {
1031 if (!strstr (ports[i], "Midi-Through")) {
1032 DataType t = port_data_type (jack_port_by_name (_priv_jack, ports[i]));
1033 if (t != DataType::NIL) {
1034 c.set (t, c.get (t) + 1);
1046 JACKAudioBackend::can_change_sample_rate_when_running () const
1052 JACKAudioBackend::can_change_buffer_size_when_running () const
1058 JACKAudioBackend::control_app_name () const
1060 /* Since JACK/ALSA really don't provide particularly integrated support
1061 for the idea of a control app to be used to control a device,
1062 allow the user to take some control themselves if necessary.
1065 const char* env_value = g_getenv ("ARDOUR_DEVICE_CONTROL_APP");
1069 if (_target_driver.empty() || _target_device.empty()) {
1073 if (_target_driver == "ALSA") {
1075 if (_target_device == "Hammerfall DSP") {
1076 appname = "hdspconf";
1077 } else if (_target_device == "M Audio Delta 1010") {
1078 appname = "mudita24";
1079 } else if (_target_device == "M2496") {
1080 appname = "mudita24";
1084 appname = env_value;
1091 JACKAudioBackend::launch_control_app ()
1093 string appname = control_app_name();
1095 if (appname.empty()) {
1096 error << string_compose (_("There is no control application for the device \"%1\""), _target_device) << endmsg;
1100 std::list<string> args;
1101 args.push_back (appname);
1102 Glib::spawn_async ("", args, Glib::SPAWN_SEARCH_PATH);
1106 JACKAudioBackend::enumerate_midi_options () const
1108 return ARDOUR::enumerate_midi_options ();
1112 JACKAudioBackend::set_midi_option (const string& opt)
1114 _target_midi_option = opt;
1119 JACKAudioBackend::speed_and_position (double& speed, framepos_t& position)
1121 jack_position_t pos;
1122 jack_transport_state_t state;
1125 /* this won't be called if the port engine in use is not JACK, so we do
1126 not have to worry about the type of PortEngine::private_handle()
1132 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, true);
1134 state = jack_transport_query (_priv_jack, &pos);
1137 case JackTransportStopped:
1141 case JackTransportRolling:
1145 case JackTransportLooping:
1149 case JackTransportStarting:
1151 // don't adjust speed here, just leave it as it was
1154 starting = true; // jack2: JackTransportNetStarting
1155 std::cerr << "WARNING: Unknown JACK transport state: " << state << std::endl;
1158 position = pos.frame;