summaryrefslogtreecommitdiff
path: root/libs/backends/jack/jack_audiobackend.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-10-21 16:24:24 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-10-21 16:24:24 -0400
commitcfe42bc4ea9a5a6234f43c173e14fdd89af39589 (patch)
tree9af6cd22c43c9e92523e48311499f8bca636f7a7 /libs/backends/jack/jack_audiobackend.cc
parentf1a6735ca4f36b5291b472463b979df01300cbac (diff)
fix issues with recording while synced to JACK (non-pure-virtual method added to AudioBackend) and remove pause() from AudioEngine/AudioBackend APIs
Diffstat (limited to 'libs/backends/jack/jack_audiobackend.cc')
-rw-r--r--libs/backends/jack/jack_audiobackend.cc55
1 files changed, 43 insertions, 12 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;
+}