From 62ff24405d5067f0576faaabf10c20eef69b4ca4 Mon Sep 17 00:00:00 2001 From: sletz Date: Mon, 20 Aug 2007 06:55:23 +0000 Subject: [PATCH] Add systemic latencies management in CoreAudio driver. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1515 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 4 ++++ macosx/JackCoreAudioDriver.cpp | 26 +++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7cee181c..f1cf10e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ --------------------------- Jackdmp changes log --------------------------- + +2007-08-21 Stephane Letz + + * Add "systemic" latencies management in CoreAudio driver. 2007-08-16 Stephane Letz diff --git a/macosx/JackCoreAudioDriver.cpp b/macosx/JackCoreAudioDriver.cpp index 80e5a229..6ede9ead 100644 --- a/macosx/JackCoreAudioDriver.cpp +++ b/macosx/JackCoreAudioDriver.cpp @@ -823,9 +823,19 @@ int JackCoreAudioDriver::Attach() jack_error("Cannot register port for %s", buf); return -1; } - + + size = sizeof(UInt32); + UInt32 value1 = 0; + UInt32 value2 = 0; + err = AudioDeviceGetProperty(fDeviceID, 0, true, kAudioDevicePropertyLatency, &size, &value1); + if (err != noErr) + JackLog("AudioDeviceGetProperty kAudioDevicePropertyLatency error \n"); + err = AudioDeviceGetProperty(fDeviceID, 0, true, kAudioDevicePropertySafetyOffset, &size, &value2); + if (err != noErr) + JackLog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); + port = fGraphManager->GetPort(port_index); - port->SetLatency(fEngineControl->fBufferSize + fCaptureLatency); + port->SetLatency(fEngineControl->fBufferSize + value1 + value2 + fCaptureLatency); fCapturePortList[i] = port_index; } @@ -849,9 +859,19 @@ int JackCoreAudioDriver::Attach() jack_error("Cannot register port for %s", buf); return -1; } + + size = sizeof(UInt32); + UInt32 value1 = 0; + UInt32 value2 = 0; + err = AudioDeviceGetProperty(fDeviceID, 0, false, kAudioDevicePropertyLatency, &size, &value1); + if (err != noErr) + JackLog("AudioDeviceGetProperty kAudioDevicePropertyLatency error \n"); + err = AudioDeviceGetProperty(fDeviceID, 0, false, kAudioDevicePropertySafetyOffset, &size, &value2); + if (err != noErr) + JackLog("AudioDeviceGetProperty kAudioDevicePropertySafetyOffset error \n"); port = fGraphManager->GetPort(port_index); - port->SetLatency(fEngineControl->fBufferSize + fPlaybackLatency); + port->SetLatency(fEngineControl->fBufferSize + value1 + value2 + fPlaybackLatency); fPlaybackPortList[i] = port_index; // Monitor ports