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, boost::shared_ptr<JackConnection> jc)
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 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
559 _jack_connection->close ();
561 _current_buffer_size = 0;
562 _current_sample_rate = 0;
564 _raw_buffer_sizes.clear();
570 JACKAudioBackend::freewheel (bool onoff)
572 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
574 if (onoff == _freewheeling) {
575 /* already doing what has been asked for */
580 if (jack_set_freewheel (_priv_jack, onoff) == 0) {
581 _freewheeling = onoff;
588 /* --- TRANSPORT STATE MANAGEMENT --- */
591 JACKAudioBackend::transport_stop ()
593 GET_PRIVATE_JACK_POINTER (_priv_jack);
594 jack_transport_stop (_priv_jack);
598 JACKAudioBackend::transport_start ()
600 GET_PRIVATE_JACK_POINTER (_priv_jack);
601 jack_transport_start (_priv_jack);
605 JACKAudioBackend::transport_locate (framepos_t where)
607 GET_PRIVATE_JACK_POINTER (_priv_jack);
608 jack_transport_locate (_priv_jack, where);
612 JACKAudioBackend::transport_frame () const
614 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
615 return jack_get_current_transport_frame (_priv_jack);
619 JACKAudioBackend::transport_state () const
621 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, ((TransportState) JackTransportStopped));
623 return (TransportState) jack_transport_query (_priv_jack, &pos);
627 JACKAudioBackend::set_time_master (bool yn)
629 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
631 return jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
633 return jack_release_timebase (_priv_jack);
640 JACKAudioBackend::get_sync_offset (pframes_t& offset) const
643 #ifdef HAVE_JACK_VIDEO_SUPPORT
645 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
650 (void) jack_transport_query (_priv_jack, &pos);
652 if (pos.valid & JackVideoFrameOffset) {
653 offset = pos.video_offset;
666 JACKAudioBackend::sample_time ()
668 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
669 return jack_frame_time (_priv_jack);
673 JACKAudioBackend::sample_time_at_cycle_start ()
675 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
676 return jack_last_frame_time (_priv_jack);
680 JACKAudioBackend::samples_since_cycle_start ()
682 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
683 return jack_frames_since_cycle_start (_priv_jack);
689 ardour_jack_error (const char* msg)
691 error << "JACK: " << msg << endmsg;
695 JACKAudioBackend::set_jack_callbacks ()
697 GET_PRIVATE_JACK_POINTER (_priv_jack);
699 jack_set_thread_init_callback (_priv_jack, AudioEngine::thread_init_callback, 0);
701 jack_set_process_thread (_priv_jack, _process_thread, this);
702 jack_set_sample_rate_callback (_priv_jack, _sample_rate_callback, this);
703 jack_set_buffer_size_callback (_priv_jack, _bufsize_callback, this);
704 jack_set_xrun_callback (_priv_jack, _xrun_callback, this);
705 jack_set_sync_callback (_priv_jack, _jack_sync_callback, this);
706 jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
708 #ifdef HAVE_JACK_SESSION
709 if( jack_set_session_callback)
710 jack_set_session_callback (_priv_jack, _session_callback, this);
713 if (jack_set_latency_callback) {
714 jack_set_latency_callback (_priv_jack, _latency_callback, this);
717 jack_set_error_function (ardour_jack_error);
721 JACKAudioBackend::_jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
722 jack_position_t* pos, int new_position, void *arg)
724 static_cast<JACKAudioBackend*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
728 JACKAudioBackend::jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
729 jack_position_t* pos, int new_position)
731 ARDOUR::Session* session = engine.session();
734 JACKSession jsession (session);
735 jsession.timebase_callback (state, nframes, pos, new_position);
740 JACKAudioBackend::_jack_sync_callback (jack_transport_state_t state, jack_position_t* pos, void* arg)
742 return static_cast<JACKAudioBackend*> (arg)->jack_sync_callback (state, pos);
746 JACKAudioBackend::jack_sync_callback (jack_transport_state_t state, jack_position_t* pos)
748 TransportState tstate;
749 bool tstate_valid = true;
752 case JackTransportRolling:
753 tstate = TransportRolling;
755 case JackTransportLooping:
756 tstate = TransportLooping;
758 case JackTransportStarting:
759 tstate = TransportStarting;
761 case JackTransportStopped:
762 tstate = TransportStopped;
765 // ignore "unofficial" states like JackTransportNetStarting (jackd2)
766 tstate_valid = false;
771 return engine.sync_callback (tstate, pos->frame);
778 JACKAudioBackend::_xrun_callback (void *arg)
780 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
781 if (jab->available()) {
782 jab->engine.Xrun (); /* EMIT SIGNAL */
788 JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
790 JACKAudioBackend* jab = static_cast<JACKAudioBackend*> (arg);
791 ARDOUR::Session* session = jab->engine.session();
794 JACKSession jsession (session);
795 jsession.session_event (event);
800 JACKAudioBackend::_freewheel_callback (int onoff, void *arg)
802 static_cast<JACKAudioBackend*>(arg)->freewheel_callback (onoff);
806 JACKAudioBackend::freewheel_callback (int onoff)
808 _freewheeling = onoff;
809 engine.freewheel_callback (onoff);
813 JACKAudioBackend::_latency_callback (jack_latency_callback_mode_t mode, void* arg)
815 return static_cast<JACKAudioBackend*> (arg)->jack_latency_callback (mode);
819 JACKAudioBackend::create_process_thread (boost::function<void()> f)
821 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
823 jack_native_thread_t thread_id;
824 ThreadData* td = new ThreadData (this, f, thread_stack_size());
826 if (jack_client_create_thread (_priv_jack, &thread_id, jack_client_real_time_priority (_priv_jack),
827 jack_is_realtime (_priv_jack), _start_process_thread, td)) {
831 _jack_threads.push_back(thread_id);
836 JACKAudioBackend::join_process_threads ()
838 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
842 for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
843 i != _jack_threads.end(); i++) {
845 #if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined(PLATFORM_WINDOWS)
846 if (jack_client_stop_thread (_priv_jack, *i) != 0) {
849 if (pthread_join (*i, &status) != 0) {
851 error << "AudioEngine: cannot stop process thread" << endmsg;
856 _jack_threads.clear();
862 JACKAudioBackend::in_process_thread ()
864 for (std::vector<jack_native_thread_t>::const_iterator i = _jack_threads.begin ();
865 i != _jack_threads.end(); i++) {
867 #ifdef COMPILER_MINGW
868 if (*i == GetCurrentThread()) {
872 if (pthread_equal (*i, pthread_self()) != 0) {
882 JACKAudioBackend::process_thread_count ()
884 return _jack_threads.size();
888 JACKAudioBackend::_start_process_thread (void* arg)
890 ThreadData* td = reinterpret_cast<ThreadData*> (arg);
891 boost::function<void()> f = td->f;
900 JACKAudioBackend::_process_thread (void *arg)
902 return static_cast<JACKAudioBackend*> (arg)->process_thread ();
906 JACKAudioBackend::process_thread ()
908 /* JACK doesn't do this for us when we use the wait API
911 AudioEngine::thread_init_callback (this);
914 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
916 pframes_t nframes = jack_cycle_wait (_priv_jack);
918 if (engine.process_callback (nframes)) {
922 jack_cycle_signal (_priv_jack, 0);
929 JACKAudioBackend::_sample_rate_callback (pframes_t nframes, void *arg)
931 return static_cast<JACKAudioBackend*> (arg)->jack_sample_rate_callback (nframes);
935 JACKAudioBackend::jack_sample_rate_callback (pframes_t nframes)
937 _current_sample_rate = nframes;
938 return engine.sample_rate_change (nframes);
942 JACKAudioBackend::jack_latency_callback (jack_latency_callback_mode_t mode)
944 engine.latency_callback (mode == JackPlaybackLatency);
948 JACKAudioBackend::_bufsize_callback (pframes_t nframes, void *arg)
950 return static_cast<JACKAudioBackend*> (arg)->jack_bufsize_callback (nframes);
954 JACKAudioBackend::jack_bufsize_callback (pframes_t nframes)
956 /* if the size has not changed, this should be a no-op */
958 if (nframes == _current_buffer_size) {
962 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 1);
964 _current_buffer_size = nframes;
966 if (jack_port_type_get_buffer_size) {
967 _raw_buffer_sizes[DataType::AUDIO] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_AUDIO_TYPE);
968 _raw_buffer_sizes[DataType::MIDI] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_MIDI_TYPE);
971 /* Old version of JACK.
973 These crude guesses, see below where we try to get the right answers.
975 Note that our guess for MIDI deliberatey tries to overestimate
976 by a little. It would be nicer if we could get the actual
977 size from a port, but we have to use this estimate in the
978 event that there are no MIDI ports currently. If there are
979 the value will be adjusted below.
982 _raw_buffer_sizes[DataType::AUDIO] = nframes * sizeof (Sample);
983 _raw_buffer_sizes[DataType::MIDI] = nframes * 4 - (nframes/2);
986 engine.buffer_size_change (nframes);
992 JACKAudioBackend::disconnected (const char* why)
994 bool was_running = _running;
997 _current_buffer_size = 0;
998 _current_sample_rate = 0;
1001 engine.halted_callback (why); /* EMIT SIGNAL */
1006 JACKAudioBackend::dsp_load() const
1008 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
1009 return jack_cpu_load (_priv_jack);
1013 JACKAudioBackend::update_latencies ()
1015 GET_PRIVATE_JACK_POINTER (_priv_jack);
1016 jack_recompute_total_latencies (_priv_jack);
1020 JACKAudioBackend::n_physical (unsigned long flags) const
1024 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, c);
1026 const char ** ports = jack_get_ports (_priv_jack, NULL, NULL, JackPortIsPhysical | flags);
1029 for (uint32_t i = 0; ports[i]; ++i) {
1030 if (!strstr (ports[i], "Midi-Through")) {
1031 DataType t = port_data_type (jack_port_by_name (_priv_jack, ports[i]));
1032 if (t != DataType::NIL) {
1033 c.set (t, c.get (t) + 1);
1045 JACKAudioBackend::can_change_sample_rate_when_running () const
1051 JACKAudioBackend::can_change_buffer_size_when_running () const
1057 JACKAudioBackend::control_app_name () const
1059 /* Since JACK/ALSA really don't provide particularly integrated support
1060 for the idea of a control app to be used to control a device,
1061 allow the user to take some control themselves if necessary.
1064 const char* env_value = g_getenv ("ARDOUR_DEVICE_CONTROL_APP");
1068 if (_target_driver.empty() || _target_device.empty()) {
1072 if (_target_driver == "ALSA") {
1074 if (_target_device == "Hammerfall DSP") {
1075 appname = "hdspconf";
1076 } else if (_target_device == "M Audio Delta 1010") {
1077 appname = "mudita24";
1078 } else if (_target_device == "M2496") {
1079 appname = "mudita24";
1083 appname = env_value;
1090 JACKAudioBackend::launch_control_app ()
1092 string appname = control_app_name();
1094 if (appname.empty()) {
1095 error << string_compose (_("There is no control application for the device \"%1\""), _target_device) << endmsg;
1099 std::list<string> args;
1100 args.push_back (appname);
1101 Glib::spawn_async ("", args, Glib::SPAWN_SEARCH_PATH);
1105 JACKAudioBackend::enumerate_midi_options () const
1107 return ARDOUR::enumerate_midi_options ();
1111 JACKAudioBackend::set_midi_option (const string& opt)
1113 _target_midi_option = opt;
1118 JACKAudioBackend::speed_and_position (double& speed, framepos_t& position)
1120 jack_position_t pos;
1121 jack_transport_state_t state;
1124 /* this won't be called if the port engine in use is not JACK, so we do
1125 not have to worry about the type of PortEngine::private_handle()
1131 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, true);
1133 state = jack_transport_query (_priv_jack, &pos);
1136 case JackTransportStopped:
1140 case JackTransportRolling:
1144 case JackTransportLooping:
1148 case JackTransportStarting:
1150 // don't adjust speed here, just leave it as it was
1153 std::cerr << "WARNING: Unknown JACK transport state: " << state << std::endl;
1156 position = pos.frame;