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>
27 #include "pbd/error.h"
29 #include "jack/jack.h"
30 #include "jack/thread.h"
32 #include "ardour/audioengine.h"
33 #include "ardour/session.h"
34 #include "ardour/types.h"
36 #include "jack_audiobackend.h"
37 #include "jack_connection.h"
38 #include "jack_portengine.h"
39 #include "jack_utils.h"
43 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_sample_format (FormatFloat)
61 , _target_interleaved (false)
62 , _target_input_channels (-1)
63 , _target_output_channels (-1)
64 , _target_systemic_input_latency (0)
65 , _target_systemic_output_latency (0)
66 , _current_sample_rate (0)
67 , _current_buffer_size (0)
69 _jack_connection->Disconnected.connect_same_thread (disconnect_connection, boost::bind (&JACKAudioBackend::disconnected, this, _1));
72 JACKAudioBackend::~JACKAudioBackend()
77 JACKAudioBackend::name() const
83 JACKAudioBackend::private_handle() const
85 return _jack_connection->jack();
89 JACKAudioBackend::connected() const
91 return (private_handle() != 0);
95 JACKAudioBackend::is_realtime () const
97 GET_PRIVATE_JACK_POINTER_RET (_priv_jack,false);
98 return jack_is_realtime (_priv_jack);
102 JACKAudioBackend::requires_driver_selection() const
108 JACKAudioBackend::enumerate_drivers () const
110 vector<string> currently_available;
111 get_jack_audio_driver_names (currently_available);
112 return currently_available;
116 JACKAudioBackend::set_driver (const std::string& name)
118 _target_driver = name;
122 vector<AudioBackend::DeviceStatus>
123 JACKAudioBackend::enumerate_devices () const
125 vector<string> currently_available = get_jack_device_names_for_audio_driver (_target_driver);
126 vector<DeviceStatus> statuses;
128 if (all_devices.find (_target_driver) == all_devices.end()) {
129 all_devices.insert (make_pair (_target_driver, std::set<string>()));
132 /* store every device we've found, by driver name.
134 * This is so we do not confuse ALSA, FFADO, netjack etc. devices
138 DeviceList& all (all_devices[_target_driver]);
140 for (vector<string>::const_iterator d = currently_available.begin(); d != currently_available.end(); ++d) {
144 for (DeviceList::const_iterator d = all.begin(); d != all.end(); ++d) {
145 if (find (currently_available.begin(), currently_available.end(), *d) == currently_available.end()) {
146 statuses.push_back (DeviceStatus (*d, false));
148 statuses.push_back (DeviceStatus (*d, false));
156 JACKAudioBackend::available_sample_rates (const string& /*device*/) const
161 f.push_back (sample_rate());
165 /* if JACK is not already running, just list a bunch of reasonable
166 values and let the future sort it all out.
169 f.push_back (8000.0);
170 f.push_back (16000.0);
171 f.push_back (24000.0);
172 f.push_back (32000.0);
173 f.push_back (44100.0);
174 f.push_back (48000.0);
175 f.push_back (88200.0);
176 f.push_back (96000.0);
177 f.push_back (192000.0);
178 f.push_back (384000.0);
184 JACKAudioBackend::available_buffer_sizes (const string& /*device*/) const
189 s.push_back (buffer_size());
209 JACKAudioBackend::available_input_channel_count (const string& /*device*/) const
215 JACKAudioBackend::available_output_channel_count (const string& /*device*/) const
220 /* -- parameter setting -- */
223 JACKAudioBackend::set_device_name (const string& dev)
226 /* need to stop and restart JACK for this to work, at present */
230 _target_device = dev;
235 JACKAudioBackend::set_sample_rate (float sr)
238 _target_sample_rate = sr;
242 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
244 if (sr == jack_get_sample_rate (_priv_jack)) {
252 JACKAudioBackend::set_buffer_size (uint32_t nframes)
255 _target_buffer_size = nframes;
259 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
261 if (nframes == jack_get_buffer_size (_priv_jack)) {
265 return jack_set_buffer_size (_priv_jack, nframes);
269 JACKAudioBackend::set_sample_format (SampleFormat sf)
271 /* as far as JACK clients are concerned, the hardware is always
272 * floating point format.
274 if (sf == FormatFloat) {
281 JACKAudioBackend::set_interleaved (bool yn)
283 /* as far as JACK clients are concerned, the hardware is always
293 JACKAudioBackend::set_input_channels (uint32_t cnt)
299 _target_input_channels = cnt;
305 JACKAudioBackend::set_output_channels (uint32_t cnt)
311 _target_output_channels = cnt;
317 JACKAudioBackend::set_systemic_input_latency (uint32_t l)
323 _target_systemic_input_latency = l;
329 JACKAudioBackend::set_systemic_output_latency (uint32_t l)
335 _target_systemic_output_latency = l;
340 /* --- Parameter retrieval --- */
343 JACKAudioBackend::device_name () const
349 return _target_device;
353 JACKAudioBackend::sample_rate () const
356 return _current_sample_rate;
358 return _target_sample_rate;
362 JACKAudioBackend::buffer_size () const
365 return _current_buffer_size;
367 return _target_buffer_size;
371 JACKAudioBackend::sample_format () const
377 JACKAudioBackend::interleaved () const
383 JACKAudioBackend::input_channels () const
386 return n_physical (JackPortIsInput).n_audio();
388 return _target_input_channels;
392 JACKAudioBackend::output_channels () const
395 return n_physical (JackPortIsOutput).n_audio();
397 return _target_output_channels;
401 JACKAudioBackend::systemic_input_latency () const
403 return _target_systemic_output_latency;
407 JACKAudioBackend::systemic_output_latency () const
409 return _target_systemic_output_latency;
413 JACKAudioBackend::raw_buffer_size(DataType t)
415 std::map<DataType,size_t>::const_iterator s = _raw_buffer_sizes.find(t);
416 return (s != _raw_buffer_sizes.end()) ? s->second : 0;
420 JACKAudioBackend::setup_jack_startup_command ()
422 /* first we map the parameters that have been set onto a
423 * JackCommandLineOptions object.
426 JackCommandLineOptions options;
428 get_jack_default_server_path (options.server_path);
429 options.driver = _target_driver;
430 options.samplerate = _target_sample_rate;
431 options.period_size = _target_buffer_size;
432 options.num_periods = 2;
433 options.input_device = _target_device;
434 options.output_device = _target_device;
435 options.input_latency = _target_systemic_input_latency;
436 options.output_latency = _target_systemic_output_latency;
437 options.input_channels = _target_input_channels;
438 options.output_channels = _target_output_channels;
439 if (_target_sample_format == FormatInt16) {
440 options.force16_bit = _target_sample_format;
442 options.realtime = true;
443 options.ports_max = 2048;
445 /* this must always be true for any server instance we start ourselves
448 options.temporary = true;
452 if (!get_jack_command_line_string (options, cmdline)) {
457 std::cerr << "JACK command line will be: " << cmdline << std::endl;
459 write_jack_config_file (get_jack_server_user_config_file_path(), cmdline);
462 /* ---- BASIC STATE CONTROL API: start/stop/pause/freewheel --- */
465 JACKAudioBackend::start ()
469 if (!_jack_connection->server_running()) {
470 setup_jack_startup_command ();
473 if (_jack_connection->open ()) {
478 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
480 /* get the buffer size and sample rates established */
482 jack_sample_rate_callback (jack_get_sample_rate (_priv_jack));
483 jack_bufsize_callback (jack_get_buffer_size (_priv_jack));
485 /* Now that we have buffer size and sample rate established, the engine
486 can go ahead and do its stuff
489 engine.reestablish_ports ();
491 if (!jack_port_type_get_buffer_size) {
492 warning << _("This version of JACK is old - you should upgrade to a newer version that supports jack_port_type_get_buffer_size()") << endmsg;
495 set_jack_callbacks ();
497 if (jack_activate (_priv_jack) == 0) {
500 // error << _("cannot activate JACK client") << endmsg;
503 engine.reconnect_ports ();
509 JACKAudioBackend::stop ()
511 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
513 _jack_connection->close ();
515 _current_buffer_size = 0;
516 _current_sample_rate = 0;
518 _raw_buffer_sizes.clear();
524 JACKAudioBackend::pause ()
526 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
529 jack_deactivate (_priv_jack);
536 JACKAudioBackend::freewheel (bool onoff)
538 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
540 if (onoff == _freewheeling) {
541 /* already doing what has been asked for */
546 if (jack_set_freewheel (_priv_jack, onoff) == 0) {
547 _freewheeling = true;
554 /* --- TRANSPORT STATE MANAGEMENT --- */
557 JACKAudioBackend::transport_stop ()
559 GET_PRIVATE_JACK_POINTER (_priv_jack);
560 jack_transport_stop (_priv_jack);
564 JACKAudioBackend::transport_start ()
566 GET_PRIVATE_JACK_POINTER (_priv_jack);
567 jack_transport_start (_priv_jack);
571 JACKAudioBackend::transport_locate (framepos_t where)
573 GET_PRIVATE_JACK_POINTER (_priv_jack);
574 jack_transport_locate (_priv_jack, where);
578 JACKAudioBackend::transport_frame () const
580 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
581 return jack_get_current_transport_frame (_priv_jack);
585 JACKAudioBackend::transport_state () const
587 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, ((TransportState) JackTransportStopped));
589 return (TransportState) jack_transport_query (_priv_jack, &pos);
593 JACKAudioBackend::set_time_master (bool yn)
595 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1);
597 return jack_set_timebase_callback (_priv_jack, 0, _jack_timebase_callback, this);
599 return jack_release_timebase (_priv_jack);
606 JACKAudioBackend::get_sync_offset (pframes_t& offset) const
609 #ifdef HAVE_JACK_VIDEO_SUPPORT
611 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, false);
616 (void) jack_transport_query (_priv_jack, &pos);
618 if (pos.valid & JackVideoFrameOffset) {
619 offset = pos.video_offset;
632 JACKAudioBackend::sample_time ()
634 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
635 return jack_frame_time (_priv_jack);
639 JACKAudioBackend::sample_time_at_cycle_start ()
641 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
642 return jack_last_frame_time (_priv_jack);
646 JACKAudioBackend::samples_since_cycle_start ()
648 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
649 return jack_frames_since_cycle_start (_priv_jack);
655 ardour_jack_error (const char* msg)
657 error << "JACK: " << msg << endmsg;
661 JACKAudioBackend::set_jack_callbacks ()
663 GET_PRIVATE_JACK_POINTER (_priv_jack);
665 jack_set_thread_init_callback (_priv_jack, AudioEngine::thread_init_callback, 0);
667 jack_set_process_thread (_priv_jack, _process_thread, this);
668 jack_set_sample_rate_callback (_priv_jack, _sample_rate_callback, this);
669 jack_set_buffer_size_callback (_priv_jack, _bufsize_callback, this);
670 jack_set_xrun_callback (_priv_jack, _xrun_callback, this);
671 jack_set_sync_callback (_priv_jack, _jack_sync_callback, this);
672 jack_set_freewheel_callback (_priv_jack, _freewheel_callback, this);
674 #ifdef HAVE_JACK_SESSION
675 if( jack_set_session_callback)
676 jack_set_session_callback (_priv_jack, _session_callback, this);
679 if (jack_set_latency_callback) {
680 jack_set_latency_callback (_priv_jack, _latency_callback, this);
683 jack_set_error_function (ardour_jack_error);
687 JACKAudioBackend::_jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
688 jack_position_t* pos, int new_position, void *arg)
690 static_cast<JACKAudioBackend*> (arg)->jack_timebase_callback (state, nframes, pos, new_position);
694 JACKAudioBackend::jack_timebase_callback (jack_transport_state_t state, pframes_t nframes,
695 jack_position_t* pos, int new_position)
697 ARDOUR::Session* session = engine.session();
700 session->jack_timebase_callback (state, nframes, pos, new_position);
705 JACKAudioBackend::_jack_sync_callback (jack_transport_state_t state, jack_position_t* pos, void* arg)
707 return static_cast<JACKAudioBackend*> (arg)->jack_sync_callback (state, pos);
711 JACKAudioBackend::jack_sync_callback (jack_transport_state_t state, jack_position_t* pos)
713 TransportState tstate;
716 case JackTransportStopped:
717 tstate = TransportStopped;
719 case JackTransportRolling:
720 tstate = TransportRolling;
722 case JackTransportLooping:
723 tstate = TransportLooping;
725 case JackTransportStarting:
726 tstate = TransportStarting;
730 return engine.sync_callback (tstate, pos->frame);
736 JACKAudioBackend::_xrun_callback (void *arg)
738 JACKAudioBackend* ae = static_cast<JACKAudioBackend*> (arg);
739 if (ae->connected()) {
740 ae->engine.Xrun (); /* EMIT SIGNAL */
745 #ifdef HAVE_JACK_SESSION
747 JACKAudioBackend::_session_callback (jack_session_event_t *event, void *arg)
749 JACKAudioBackend* ae = static_cast<JACKAudioBackend*> (arg);
750 ARDOUR::Session* session = ae->engine.session();
753 session->jack_session_event (event);
759 JACKAudioBackend::_freewheel_callback (int onoff, void *arg)
761 static_cast<JACKAudioBackend*>(arg)->freewheel_callback (onoff);
765 JACKAudioBackend::freewheel_callback (int onoff)
767 _freewheeling = onoff;
768 engine.freewheel_callback (onoff);
772 JACKAudioBackend::_latency_callback (jack_latency_callback_mode_t mode, void* arg)
774 return static_cast<JACKAudioBackend*> (arg)->jack_latency_callback (mode);
778 JACKAudioBackend::create_process_thread (boost::function<void()> f, pthread_t* thread, size_t stacksize)
780 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
781 ThreadData* td = new ThreadData (this, f, stacksize);
783 if (jack_client_create_thread (_priv_jack, thread, jack_client_real_time_priority (_priv_jack),
784 jack_is_realtime (_priv_jack), _start_process_thread, td)) {
792 JACKAudioBackend::_start_process_thread (void* arg)
794 ThreadData* td = reinterpret_cast<ThreadData*> (arg);
795 boost::function<void()> f = td->f;
804 JACKAudioBackend::_process_thread (void *arg)
806 return static_cast<JACKAudioBackend*> (arg)->process_thread ();
810 JACKAudioBackend::process_thread ()
812 /* JACK doesn't do this for us when we use the wait API
815 AudioEngine::thread_init_callback (this);
818 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
820 pframes_t nframes = jack_cycle_wait (_priv_jack);
822 if (engine.process_callback (nframes)) {
826 jack_cycle_signal (_priv_jack, 0);
833 JACKAudioBackend::_sample_rate_callback (pframes_t nframes, void *arg)
835 return static_cast<JACKAudioBackend*> (arg)->jack_sample_rate_callback (nframes);
839 JACKAudioBackend::jack_sample_rate_callback (pframes_t nframes)
841 _current_sample_rate = nframes;
842 return engine.sample_rate_change (nframes);
846 JACKAudioBackend::jack_latency_callback (jack_latency_callback_mode_t mode)
848 engine.latency_callback (mode == JackPlaybackLatency);
852 JACKAudioBackend::_bufsize_callback (pframes_t nframes, void *arg)
854 return static_cast<JACKAudioBackend*> (arg)->jack_bufsize_callback (nframes);
858 JACKAudioBackend::jack_bufsize_callback (pframes_t nframes)
860 /* if the size has not changed, this should be a no-op */
862 if (nframes == _current_buffer_size) {
866 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 1);
868 _current_buffer_size = nframes;
870 if (jack_port_type_get_buffer_size) {
871 _raw_buffer_sizes[DataType::AUDIO] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_AUDIO_TYPE);
872 _raw_buffer_sizes[DataType::MIDI] = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_MIDI_TYPE);
875 /* Old version of JACK.
877 These crude guesses, see below where we try to get the right answers.
879 Note that our guess for MIDI deliberatey tries to overestimate
880 by a little. It would be nicer if we could get the actual
881 size from a port, but we have to use this estimate in the
882 event that there are no MIDI ports currently. If there are
883 the value will be adjusted below.
886 _raw_buffer_sizes[DataType::AUDIO] = nframes * sizeof (Sample);
887 _raw_buffer_sizes[DataType::MIDI] = nframes * 4 - (nframes/2);
890 engine.buffer_size_change (nframes);
896 JACKAudioBackend::disconnected (const char* why)
898 bool was_running = _running;
901 _current_buffer_size = 0;
902 _current_sample_rate = 0;
905 engine.halted_callback (why); /* EMIT SIGNAL */
909 JACKAudioBackend::cpu_load() const
911 GET_PRIVATE_JACK_POINTER_RET(_priv_jack,0);
912 return jack_cpu_load (_priv_jack);
916 JACKAudioBackend::update_latencies ()
918 GET_PRIVATE_JACK_POINTER (_priv_jack);
919 jack_recompute_total_latencies (_priv_jack);
923 JACKAudioBackend::n_physical (unsigned long flags) const
927 GET_PRIVATE_JACK_POINTER_RET (_priv_jack, c);
929 const char ** ports = jack_get_ports (_priv_jack, NULL, NULL, JackPortIsPhysical | flags);
932 for (uint32_t i = 0; ports[i]; ++i) {
933 if (!strstr (ports[i], "Midi-Through")) {
934 DataType t (jack_port_type (jack_port_by_name (_priv_jack, ports[i])));
935 c.set (t, c.get (t) + 1);
946 JACKAudioBackend::can_change_sample_rate_when_running () const
952 JACKAudioBackend::can_change_buffer_size_when_running () const
958 JACKAudioBackend::control_app_name () const
962 std::cerr << "td = " << _target_driver << " tdev = " << _target_device << std::endl;
964 if (_target_driver.empty() || _target_device.empty()) {
968 if (_target_driver == "ALSA") {
970 if (_target_device == "Hammerfall DSP") {
971 appname = "hdspconf";
972 } else if (_target_device == "M Audio Delta 1010") {
977 std::cerr << "appname retrurned as " << appname << std::endl;