20 #ifndef __JackCoreAudioDriver__
21 #define __JackCoreAudioDriver__
23 #include <AudioToolbox/AudioConverter.h>
24 #include <CoreAudio/CoreAudio.h>
25 #include <AudioUnit/AudioUnit.h>
26 #include "JackAudioDriver.h"
38 typedef UInt8 CAAudioHardwareDeviceSectionID;
39 #define kAudioDeviceSectionInput ((CAAudioHardwareDeviceSectionID)0x01)
40 #define kAudioDeviceSectionOutput ((CAAudioHardwareDeviceSectionID)0x00)
41 #define kAudioDeviceSectionGlobal ((CAAudioHardwareDeviceSectionID)0x00)
42 #define kAudioDeviceSectionWildcard ((CAAudioHardwareDeviceSectionID)0xFF)
44 #define WAIT_COUNTER 60
45 #define WAIT_NOTIFICATION_COUNTER 30
60 AudioBufferList* fJackInputData;
61 AudioBufferList* fDriverOutputData;
63 AudioDeviceID fDeviceID;
64 AudioObjectID fPluginID;
66 AudioUnitRenderActionFlags* fActionFags;
67 const AudioTimeStamp* fCurrentTime;
72 char fCaptureUID[256];
73 char fPlaybackUID[256];
76 float fComputationGrain;
77 bool fClockDriftCompensate;
80 static OSStatus Render(
void *inRefCon,
81 AudioUnitRenderActionFlags *ioActionFlags,
82 const AudioTimeStamp *inTimeStamp,
84 UInt32 inNumberFrames,
85 AudioBufferList *ioData);
87 static OSStatus AudioHardwareNotificationCallback(AudioHardwarePropertyID inPropertyID,
void* inClientData);
89 static OSStatus DeviceNotificationCallback(AudioDeviceID inDevice,
92 AudioDevicePropertyID inPropertyID,
95 static OSStatus SRNotificationCallback(AudioDeviceID inDevice,
98 AudioDevicePropertyID inPropertyID,
101 static OSStatus BSNotificationCallback(AudioDeviceID inDevice,
104 AudioDevicePropertyID inPropertyID,
107 OSStatus GetDeviceIDFromUID(
const char* UID, AudioDeviceID*
id);
108 OSStatus GetDefaultDevice(AudioDeviceID*
id);
109 OSStatus GetDefaultInputDevice(AudioDeviceID*
id);
110 OSStatus GetDefaultOutputDevice(AudioDeviceID*
id);
111 OSStatus GetDeviceNameFromID(AudioDeviceID
id,
char* name);
112 OSStatus GetTotalChannels(AudioDeviceID device,
int& channelCount,
bool isInput);
113 OSStatus GetStreamLatencies(AudioDeviceID device,
bool isInput, vector<int>& latencies);
116 OSStatus CreateAggregateDevice(AudioDeviceID captureDeviceID, AudioDeviceID playbackDeviceID, jack_nframes_t samplerate, AudioDeviceID* outAggregateDevice);
117 OSStatus CreateAggregateDeviceAux(vector<AudioDeviceID> captureDeviceID, vector<AudioDeviceID> playbackDeviceID, jack_nframes_t samplerate, AudioDeviceID* outAggregateDevice);
118 OSStatus DestroyAggregateDevice();
119 bool IsAggregateDevice(AudioDeviceID device);
121 int SetupDevices(
const char* capture_driver_uid,
122 const char* playback_driver_uid,
123 char* capture_driver_name,
124 char* playback_driver_name,
125 jack_nframes_t samplerate);
127 int SetupChannels(
bool capturing,
135 int SetupBuffers(
int inchannels);
136 void DisposeBuffers();
138 int SetupBufferSize(jack_nframes_t buffer_size);
139 int SetupSampleRate(jack_nframes_t samplerate);
140 int SetupSampleRateAux(AudioDeviceID inDevice, jack_nframes_t samplerate);
142 int OpenAUHAL(
bool capturing,
148 const vector<int>& chan_in_list,
149 const vector<int>& chan_out_list,
150 jack_nframes_t nframes,
151 jack_nframes_t samplerate);
155 void RemoveListeners();
157 bool TakeHogAux(AudioDeviceID deviceID,
bool isInput);
160 void UpdateLatencies();
167 int Open(jack_nframes_t buffer_size,
168 jack_nframes_t samplerate,
173 const char* chan_in_list,
174 const char* chan_out_list,
176 const char* capture_driver_name,
177 const char* playback_driver_name,
178 jack_nframes_t capture_latency,
179 jack_nframes_t playback_latency,
180 int async_output_latency,
181 int computation_grain,
195 bool IsFixedBufferSize()
200 int SetBufferSize(jack_nframes_t buffer_size);