From d13e1567be0aedf6d5c2e2eb2f4b67128db14614 Mon Sep 17 00:00:00 2001 From: sletz Date: Sat, 15 Mar 2008 18:32:42 +0000 Subject: [PATCH] Add -L (extra output latency in aynchronous mode) in CoreAudio driver. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2006 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 4 ++++ macosx/JackCoreAudioDriver.cpp | 26 +++++++++++++++++++++----- macosx/JackCoreAudioDriver.h | 3 ++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 06913995..d85fb5a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,10 @@ Fernando Lopez-Lezcano Jackdmp changes log --------------------------- +2008-03-14 Stephane Letz + + * Add -L (extra output latency in aynchronous mode) in CoreAudio driver. + 2008-03-14 Stephane Letz * Fernando Lopez-Lezcano scons patch. diff --git a/macosx/JackCoreAudioDriver.cpp b/macosx/JackCoreAudioDriver.cpp index eb00a2e6..a73e2b5d 100644 --- a/macosx/JackCoreAudioDriver.cpp +++ b/macosx/JackCoreAudioDriver.cpp @@ -846,7 +846,7 @@ int JackCoreAudioDriver::AddListeners() return -1; } - if (!fEngineControl->fSyncMode) { + if (!fEngineControl->fSyncMode && fIOUsage != 1.f) { UInt32 outSize = sizeof(float); err = AudioDeviceSetProperty(fDeviceID, NULL, 0, false, kAudioDevicePropertyIOCycleUsage, outSize, &fIOUsage); if (err != noErr) { @@ -879,7 +879,8 @@ int JackCoreAudioDriver::Open(jack_nframes_t nframes, const char* capture_driver_uid, const char* playback_driver_uid, jack_nframes_t capture_latency, - jack_nframes_t playback_latency) + jack_nframes_t playback_latency, + int async_output_latency) { int in_nChannels = 0; int out_nChannels = 0; @@ -896,6 +897,7 @@ int JackCoreAudioDriver::Open(jack_nframes_t nframes, strcpy(fPlaybackUID, playback_driver_uid); fCaptureLatency = capture_latency; fPlaybackLatency = playback_latency; + fIOUsage = float(async_output_latency)/ 100.f; if (SetupDevices(capture_driver_uid, playback_driver_uid, capture_driver_name, playback_driver_name) < 0) return -1; @@ -1122,7 +1124,7 @@ extern "C" desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); strcpy(desc->name, "coreaudio"); - desc->nparams = 13; + desc->nparams = 14; desc->params = (jack_driver_param_desc_t*)calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); i = 0; @@ -1229,6 +1231,14 @@ extern "C" desc->params[i].value.i = TRUE; strcpy(desc->params[i].short_desc, "Display available CoreAudio devices"); strcpy(desc->params[i].long_desc, desc->params[i].short_desc); + + i++; + strcpy(desc->params[i].name, "async-latency"); + desc->params[i].character = 'L'; + desc->params[i].type = JackDriverParamUInt; + desc->params[i].value.i = 100; + strcpy(desc->params[i].short_desc, "Extra output latency in aynchronous mode (percent)"); + strcpy(desc->params[i].long_desc, desc->params[i].short_desc); return desc; } @@ -1247,6 +1257,7 @@ extern "C" const jack_driver_param_t *param; jack_nframes_t systemic_input_latency = 0; jack_nframes_t systemic_output_latency = 0; + int async_output_latency = 100; for (node = params; node; node = jack_slist_next(node)) { param = (const jack_driver_param_t *) node->data; @@ -1312,6 +1323,10 @@ extern "C" case 'l': Jack::DisplayDeviceNames(); break; + + case 'L': + async_output_latency = param->value.ui; + break; } } @@ -1321,8 +1336,9 @@ extern "C" playback = TRUE; } - Jack::JackDriverClientInterface* driver = new Jack::JackCoreAudioDriver("coreaudio", engine, table); - if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name, playback_pcm_name, systemic_input_latency, systemic_output_latency) == 0) { + Jack::JackCoreAudioDriver* driver = new Jack::JackCoreAudioDriver("coreaudio", engine, table); + if (driver->Open(frames_per_interrupt, srate, capture, playback, chan_in, chan_out, monitor, capture_pcm_name, + playback_pcm_name, systemic_input_latency, systemic_output_latency, async_output_latency) == 0) { return driver; } else { delete driver; diff --git a/macosx/JackCoreAudioDriver.h b/macosx/JackCoreAudioDriver.h index df5bc611..5cc5e6bf 100644 --- a/macosx/JackCoreAudioDriver.h +++ b/macosx/JackCoreAudioDriver.h @@ -156,7 +156,8 @@ class JackCoreAudioDriver : public JackAudioDriver const char* capture_driver_name, const char* playback_driver_name, jack_nframes_t capture_latency, - jack_nframes_t playback_latency); + jack_nframes_t playback_latency, + int async_output_latency); int Close(); int Attach();