diff options
Diffstat (limited to 'libs/backends/jack')
-rw-r--r-- | libs/backends/jack/jack_audiobackend.cc | 55 | ||||
-rw-r--r-- | libs/backends/jack/jack_audiobackend.h | 5 | ||||
-rw-r--r-- | libs/backends/jack/jack_session.cc | 1 |
3 files changed, 48 insertions, 13 deletions
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc index ff76486bad..7a9b993251 100644 --- a/libs/backends/jack/jack_audiobackend.cc +++ b/libs/backends/jack/jack_audiobackend.cc @@ -582,18 +582,6 @@ JACKAudioBackend::stop () } int -JACKAudioBackend::pause () -{ - GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1); - - if (_priv_jack) { - jack_deactivate (_priv_jack); - } - - return 0; -} - -int JACKAudioBackend::freewheel (bool onoff) { GET_PRIVATE_JACK_POINTER_RET (_priv_jack, -1); @@ -1131,3 +1119,46 @@ JACKAudioBackend::set_midi_option (const string& opt) _target_midi_option = opt; return 0; } + +bool +JACKAudioBackend::speed_and_position (double& speed, framepos_t& position) +{ + jack_position_t pos; + jack_transport_state_t state; + bool starting; + + /* this won't be called if the port engine in use is not JACK, so we do + not have to worry about the type of PortEngine::private_handle() + */ + + speed = 0; + position = 0; + + GET_PRIVATE_JACK_POINTER_RET (_priv_jack, true); + + state = jack_transport_query (_priv_jack, &pos); + + switch (state) { + case JackTransportStopped: + speed = 0; + starting = false; + break; + case JackTransportRolling: + speed = 1.0; + starting = false; + break; + case JackTransportLooping: + speed = 1.0; + starting = false; + break; + case JackTransportStarting: + starting = true; + // don't adjust speed here, just leave it as it was + break; + default: + std::cerr << "WARNING: Unknown JACK transport state: " << state << std::endl; + } + + position = pos.frame; + return starting; +} diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h index 3c48be5ead..c59ddb5c67 100644 --- a/libs/backends/jack/jack_audiobackend.h +++ b/libs/backends/jack/jack_audiobackend.h @@ -91,7 +91,6 @@ class JACKAudioBackend : public AudioBackend { int _start (bool for_latency_measurement); int stop (); - int pause (); int freewheel (bool); float cpu_load() const; @@ -183,6 +182,10 @@ class JACKAudioBackend : public AudioBackend { void* get_buffer (PortHandle, pframes_t); + /* transport sync */ + + bool speed_and_position (double& sp, framepos_t& pos); + private: boost::shared_ptr<JackConnection> _jack_connection; bool _running; diff --git a/libs/backends/jack/jack_session.cc b/libs/backends/jack/jack_session.cc index ca51dafccc..7cd7f6c62b 100644 --- a/libs/backends/jack/jack_session.cc +++ b/libs/backends/jack/jack_session.cc @@ -23,6 +23,7 @@ #include <glibmm/miscutils.h> #include <jack/jack.h> +#include <jack/transport.h> #include "ardour/audioengine.h" #include "ardour/filename_extensions.h" |