summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-05-31 19:54:40 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-05-31 19:54:40 +0000
commit71a32f5a000f852dc849e6e677e3a45b95bb0e7f (patch)
tree0ae68f99cc333130744be38b5b1fd2e09432965a
parent888b025f797424e400b77c0b1ac97d71e5bff29e (diff)
conditionally compile support for jack_port_type_get_buffer_size() and if available at compile AND runtime, use it in preference to jack_port_get_buffer_size() during a reconnect to JACK
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@9646 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/SConscript23
-rw-r--r--libs/ardour/audioengine.cc15
2 files changed, 36 insertions, 2 deletions
diff --git a/libs/ardour/SConscript b/libs/ardour/SConscript
index 5a8303957e..5dcf82a497 100644
--- a/libs/ardour/SConscript
+++ b/libs/ardour/SConscript
@@ -139,6 +139,23 @@ ardour.Append(CXXFLAGS="-DLOCALEDIR=\\\"" + os.path.join (final_prefix, 'share',
ardour.Merge ([ libraries['jack'] ])
#
+# See if JACK supports jack_port_type_get_buffer_size()
+#
+jack_port_type_buffer_size_source_file = """
+#include <jack/jack.h>
+int main(int argc, char **argv)
+{
+ jack_port_type_get_buffer_size (0, JACK_DEFAULT_AUDIO_TYPE);
+ return 0;
+}
+"""
+def CheckJackPortTypeGetBufferSize(context):
+ context.Message('Checking for jack_port_type_get_buffer_size()...')
+ result = context.TryLink(jack_port_type_buffer_size_source_file, '.c')
+ context.Result(result)
+ return result
+
+#
# See if JACK supports jack_client_open()
#
@@ -236,12 +253,16 @@ conf = Configure(ardour, custom_tests = {
'CheckJackOnInfoShutdown' : CheckJackOnInfoShutdown,
'CheckJackRecomputeLatencies' : CheckJackRecomputeLatencies,
'CheckJackVideoFrameOffset' : CheckJackVideoFrameOffset,
- 'CheckJackEnsureMonitorInput' : CheckJackEnsureMonitorInput
+ 'CheckJackEnsureMonitorInput' : CheckJackEnsureMonitorInput,
+ 'CheckJackPortTypeGetBufferSize' : CheckJackPortTypeGetBufferSize
})
if conf.CheckJackClientOpen():
ardour.Append(CXXFLAGS="-DHAVE_JACK_CLIENT_OPEN")
+if conf.CheckJackPortTypeGetBufferSize():
+ ardour.Append(CXXFLAGS="-DHAVE_JACK_PORT_TYPE_GET_BUFFER_SIZE")
+
if conf.CheckJackOnInfoShutdown():
ardour.Append(CXXFLAGS="-DHAVE_JACK_ON_INFO_SHUTDOWN")
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index fe5de6dc82..5501f76e79 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -1249,7 +1249,20 @@ AudioEngine::reconnect_to_jack ()
if (session) {
session->reset_jack_connection (_priv_jack);
- nframes_t blocksize = jack_get_buffer_size (_priv_jack);
+
+ nframes_t blocksize;
+
+#ifdef HAVE_JACK_PORT_TYPE_GET_BUFFER_SIZE
+ if (jack_port_type_get_buffer_size) {
+ blocksize = jack_port_type_get_buffer_size (_priv_jack, JACK_DEFAULT_AUDIO_TYPE);
+ } else {
+ warning << _("This version of JACK is old - you should upgrade to a newer version that supports jack_port_type_get_buffer_size()") << endmsg;
+ blocksize = jack_get_buffer_size (_priv_jack);
+ }
+#else
+ blocksize = jack_get_buffer_size (_priv_jack);
+#endif
+
Port::set_buffer_size (blocksize);
session->set_block_size (blocksize);
session->set_frame_rate (jack_get_sample_rate (_priv_jack));