summaryrefslogtreecommitdiff
path: root/libs/backends/jack
diff options
context:
space:
mode:
Diffstat (limited to 'libs/backends/jack')
-rw-r--r--libs/backends/jack/jack_audiobackend.cc55
-rw-r--r--libs/backends/jack/jack_audiobackend.h5
-rw-r--r--libs/backends/jack/jack_session.cc1
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"